-
리액티브 스트림즈(Reactive Streams)Spring Reactive Web Application/Reactive Programming 2023. 7. 21. 05:00반응형
리액티브 스트림즈(Reactive Streams)
데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하기 위한 리액티브 라이브러리의 표준 사양입니다. 리액티브 스트림즈를 구현한 구현체로 RxJava, Reactor, Akka Streams, Java 9 Flow API 등이 있습니다.
리액티브 스트림즈 구성요소
- Publisher: 데이터를 생성하고 통지(발행, 게시, 방출)하는 역할을 합니다.
- Subscriber: 구독한 Publisher로부터 통지(발행, 게시, 방출)된 데이터를 전달받아서 처리하는 역할을 합니다.
- Subscription: Publisher에 요청할 데이터의 개수를 지정하고, 데이터의 구독을 취소하는 역할을 합니다.
- Processor: Publisher와 Subscriber의 기능을 모두 가지고 있습니다.
Publisher
public interface Publisher<T> { public void subscribe(Subscriber<? super T> s); }
- subscribe: 파라미터로 전달받은 Subscriber를 등록하는 역할입니다.
Note.
리액티브 스트림즈에서의 Publisher/Subscriber와 Kafka에서의 Publisher/Subscriber는 의미가 조금 다릅니다.
Kafka의 Publisher/Subscriber는 느스한 결합 구조로 Publisher는 특정 토픽으로 메시지 데이터를 전송하기만 하면 되고, Subscriber는 특정 토픽을 구독하기만 하면 됩니다.
반면, 리액티브 스트림즈에서는 Publisher가 subscribe 메서드의 파라미터인 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: 구독 시작 시점에 Publisher에게 요청할 데이터의 개수를 지정하거나 구독을 해지하는 등의 처리를 합니다. Subscription 객체를 통해서 이루어집니다.
- onNext: Publisher가 통지한 데이터를 처리하는 역할을 합니다.
- onError: 에러를 처리하는 역할을 합니다.
- onComplete: Publisher가 데이터 통지를 완료했음을 알릴 때 호출되는 메서드입니다.
Subscription
public interface Subscription { public void request(long n); public void cancel(); }
- request: Publisher에게 데이터의 개수를 요청할 수 있습니다.
- cancel: 구독을 해지할 수 있습니다.
Processor
Publisher와 Subscriber의 기능을 모두 가지고 있습니다.
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> { }
리액티브 스트림즈 관련 용어
- Signal: Publisher와 Subscriber 간에 주고받는 상호작용을 의미합니다. 리액티브 스트림즈의 인터페이스 코드에서 볼 수 있는 onSubscribe, onNext, onComplete, onError, request 또는 cancel 메서드를 Signal이라고 표현합니다.
- Demand: Subscriber가 Publisher에게 요청하는 데이터를 의미합니다. 즉, Publisher가 아직 Subscriber에게 전달하지 않은 Subscriber가 요청한 데이터를 말합니다.
- Emit: Publisher가 데이터를 통지(발행, 게시, 방출)하는 것을 의미합니다.
- Sequence: Publisher가 emit하는 데이터의 연속적인 흐름을 정의해 놓은 것을 의미합니다. Operator 체인 형태로 정의됩니다. Flux를 통해서 데이터를 생성, emit하고 filter 메서드를 통해 필터링 한 후, map 메서드를 통해 변환하는 과정 자체를 Sequence라고 합니다.
- Operator: just, filter, map 같은 메서드들을 리액티브 프로그래밍에서는 연산자라고 부릅니다.
[참고 정보]
반응형'Spring Reactive Web Application > Reactive Programming' 카테고리의 다른 글
Blocking I/O와 Non-Blocking I/O (0) 2023.07.22 리액티브 시스템과 리액티브 프로그래밍 (0) 2023.07.20