Reactive programming (반응형 프로그래밍)
리액티브 프로그래밍은 데이터 흐름(data flows)과 변화 전파에 중점을 둔 프로그래밍 패러다임(programming paradigm)이다. 이것은 프로그래밍 언어로 정적 또는 동적인 데이터 흐름을 쉽게 표현할 수 있어야하며, 데이터 흐름을 통해 하부 실행 모델이 자동으로 변화를 전파할 수 있는 것을 의미한다. 예를 들어, 데이터 A의 변화에 따라 데이터 B의 값이 변화하는 방식을 리액티브 프로그램이라 칭함.
리액티브 프로그래밍을 사용하는 이유
좋은 프로그램은 메인스레드가 멈추거나 느려지지 않도록 해서, 사용자들에게 부드러운 사용자 경험과 좋은 성능을 제공할 수 있어야 한다. 메인스레드를 자유롭게 유지하려면 무겁고 시간이 오래 걸리는 작업은 백그라운드에서 해야 한다. 이러한 작업들을 서버가 수행하기를 원하는데 그래서 우리는 네트워크 운영을 위한 '비동기 작업'이 필요하다. 반응형 프로그래밍에서는 함수형 프로그래밍 방식을 통해 콜백과 같은 방식에서 사이드 이펙트가 없으므로 스레드에 안전하며, 스케줄러 등을 활용하여 스레드를 활용한 비동기 처리가 쉽다.
즉, 사용자 경험을 향상시키기 위해서 비동기 작업이 필요한데 이 때 리액티브 프로그래밍이 필요한 것이다.
Rx
Rx는 Reactive programming을 가능하게 해주는 API
<RX = OBSERVABLE + OBSERVERS + SCHEDULERS>
Observable
- 공급자 역할. 데이터를 처리하고 다른 구성요소에 전달하는 역할을 한다.
- 데이터 스트림이다.
- 하나의 스레드에서 다른 스레드로 전달할 데이터를 압축한다.
- 주기적으로 또는 설정에 따라 생애주기동안 한 번만 데이터를 방출합니다.
OBSERVERS
- 소비자(구독자) 역할. 전달받은 데이터를 가지고 다양한 작업을 수행할 수 있습니다.
- 방출된 데이터 스트림을 소비한다.
- subscribeOn()메서드를 사용해서 Observable을 구독하고 Observable이 방출하는 데이터를 수신한다.
- Observable이 데이터를 방출할 때마다 등록된 모든 Observer는 onNext() 콜백으로 데이터를 수신합니다.
- onNext()콜백에서 JSON 응답 파싱이나 UI 업데이트와 같은 다양한 작업을 수행할 수 있다.
- Observable에서 에러가 발생하면, Observer는 onError()에서 에러를 수신합니다.
SCHEDULERS
- Schedulers는 Observable과 Observers에게 그들이 실행되어야 할 스레드를 알려주는 Rx의 구성요소.
- observeOn() 메서드로 observers에게 관찰해야 할 스레드를 알려줄 수 있다.
- scheduleOn() 메서드로 observable이 실행해야 할 스레드를 알려줄 수 있다.
'CS' 카테고리의 다른 글
[CS] 해시(Hash)와 해시 충돌 해결 방법 (0) | 2023.01.28 |
---|---|
[CS] 프로세스와 스레드 (0) | 2023.01.26 |
객체지향 5원칙 SOLID (0) | 2023.01.10 |
멱등성과 HTTP메소드 (0) | 2023.01.10 |
계층화 아키텍처 (Layered Architecture) / MVC Pattern / Node.js에서의 적용 (0) | 2023.01.10 |