Git :)

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리액티브 스트림즈(Reactive Streams)
    IT 서적/스프링으로 시작하는 리액티브 프로그래밍 2024. 2. 16. 17:10
    728x90

    # 리액티브 스트림즈란?

    • 리액티브 라이브러리를 어떻게 구현할지 정의해 놓은 별도의 표준 사양이 있는데, 이것을 리액티브 스트림즈라고 부른다.
    • 한마디로, 데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하기 위한 리액티브 라이브러리의 표준 사양이라고 표현할 수 있다.

    # 리액티브 스트림즈의 컴포넌트인 Publisher와 Subscriber 간에 데이터가 전달되는 동작 과정

    • 그림상으로는 Publisher와 Subscriber가 마치 같은 스레드에서 동기적으로 상호작용하는 것처럼 보이지만 실제로 Publisher와 Subscriber는 각각 다른 스레드에서 비동기적으로 상호작용하는 경우가 대부분이다.
    • Publisher의 속도가 빠르다면 Subscriber에서 데이터를 처리하는 속도가 느려지게 되고 이는 과부하가 생길 수 있다. 그렇기 때문에 이를 조절하기 위해 Subscription.,request를 통해 데이터 개수를 제어한다.

    # Kafka의 Pub/Sub와  Reactive의 Pub/Sub의 차이점

    • Kafka는 Pub와 Sub 사이에 메시지 브로커가 존재한다.
    • 토픽을 기준으로 서로 응답하기 때문에 Sub는 Publisher를 모르더라도 토픽만 알면 응답을 주고 받을 수 있다.
    • 이와 반대로 Reactive에서는 Publisher가 Subscriber를 등록하는 형태로 구독이 이루어진다. 

    # Subscriber

    public interface Subscriber<T> {
        public void onSubscribe(Subscription s) ;
        public void onNext(T t) ;
        public void onError(Throwable t) ;
        public void onComplete() ;
    }

     

    • onSubscribe : 구독 시작 시점에 어떤 처리를 할 것인지 처리하는 역할을 한다.
    • onNext : Pub가 통지한 데이터를 처리하는 역할을 한다.
    • onError: 데이터 처리과정에서 에러 발생 시, 해당 에러를 처리하는 역할을 수행한다.
    • onComplete: 데이터 통지가 정상적으로 완료될 경우에 후처리를 수행한다.

     

    # Subscription

    public interface Subscription {
        public void request(long n) ;
        public void cacel() ;
    }

     

    • Subscription 인터페이스는 Sub가 구독한 데이터의 개수를 요청하거나 데이터 요청의 취소(구독 해지) 역할을 수행한다.

     

     

    # 리액티브 스트림즈 관련 용어

    • Signal : Pub/Sub간에 주고받는 상호작용을 Signal 라고한다. (onSubscribe, onNext, onComplete, onError, request, cancel 등이 있다.)
    • Demand: Sub가 Pub에게 요청하는 데이터를 의미한다.
    • Emit: 데이터를 내보내다라는 의미로 이해하면 된다.
    • Sequence: Flux를 통해 데이터를 생성, emit하고 Filter 메서드를 통해서 필터링한 후, map 메서드를 통해서 변환하는 과정 자체를 Sequence라고 한다.
    • Operator: just, filter, map 같은 메서드들을 Operator라고 한다.
    • Source: 원천이라는 뜻(Data Source: 데이터 원천)

     

    728x90