지나공 : 지식을 나누는 공간

[RxJava] 1. Reactive Streams 본문

Tech/Reactive - Rxjava & Reactor

[RxJava] 1. Reactive Streams

해리리_ 2022. 4. 7. 19:27

들어가기 전에

이제부터 데이터를 생성해서 내보내는 쪽은 생산자라고 부르고, 생산자가 데이터를 내보내는 행위를 데이터를 통제한다고 하며, 생산자가 보낸 데이터를 받아 처리하는 쪽은 소비자라 부르기로 하자. 그리고 소비자가 데이터를 처리하는 것을 데이터를 소비한다고 하자.

 

Reactive Streams 란?

  • 리액티브 프로그래밍에 대한 인터페이스만 제공한다.
  • RxJava는 Reactive Streams의 인터페이스들을 구현한 구현체다.
  • Reactive Streams는 Publisher, Subscriber, Subscription, Processor라는 4개 인터페이스를 제공한다.
    • Publisher : 데이터를 생성하고 통지한다.
    • Subscriber : 통지된 데이터를 전달받아서 처리한다.
    • Subscription : 전달 받을 데이터의 개수를 요청하고 구독을 해지한다. (구독 자체를 의미)
    • Processor : Publisher와 Subscriber의 기능을 모두 가지고 있다.

https://github.com/reactive-streams/reactive-streams-jvm (리액티브 프로그래밍 라이브러리 표준 사양)

 

Publisher와 Subsriber 간 프로세스 흐름

여기서 Publisher는 데이터 개수 요청을 받고 요청 개수만큼 데이터를 통지하는 이런 모든 과정에서 계속적으로, 비동기적으로 데이터를 생성하고 있는다. 그리고 에러가 생기면 onError 함수가 호출된다.

 

Subscriber가 데이터를 구독하고 Publisher가 데이터를 통지하고 이 통지된 데이터를 가공하고 다시 subsriber가 이 가공된 데이터를 처리한다. 이 흐름이 계속된다고 강조해 왔음!!

 

Cold Publisher & Hot Publisher 

  • Cold Publisher
    • 이 생산자는 소비자가 구독할 때마다 데이터를 처음부터 새로 통지한다.
    • 데이터를 통지하는 새로운 타임 라인이 생성된다.
    • 소비자는 구독 시점과 상관없이 항상 통지된 데이터를 처음부터 끝까지 받을 수 있다.
    • Flowable이나 Observable이 Cold Publisher에 해당된다.

Cold Publisher
Cold Publisher 예제

  • Hot Publisher
    • 이 생상자는 소비자 수랑 상관 없이 데이터를 한번만 통지한다.
    • 즉, 데이터를 통지하는 타임 라인이 하나다.
    • 소비자는 발행된 데이터를 처음부터 전달 받는 게 아니라 구독한 시점에 통지된 데이터들만 전달받을 수 있다.
    • 잡지 구독과 비슷하다. 내가 돈 내고 구독하기 시작한 그 시점 이후에 발간된 잡지만 나는 갖게 되니까.

Hot Publisher
Hot Publisher 예제

구독자1은 그냥 순차적으로 자기가 시작한 시점 이후로 데이터를 다 받고, 구독자2는 자기가 구독하기 시작한 시점부터 데이터를 받아서 1,3은 전달받지 못한다.

 

*Kevin의 알기 쉬운 RxJava 강의를 정리한 글입니다.

728x90
Comments