Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다.
Reactor 3
Reactive Streams
스펙 구현체다.- JVM 상의 리액티브 프로그래밍 패러다임을 제공한다.
왜?
리액티브 프로그래밍은 완전 비동기적이고, 논 블록킹 하게 구현되어 있으며, 이벤트 중심으로 동작합니다. 이런 특징으로 인해 리액티브 프로그래밍을 도입하면, 복잡한 저 수준의 코드를 작성할 필요 없이 효율적으로 대용량 처리가 가능합니다.
리액티브 스트림
리액티브 스트림은 4개의 인터페이스로 정의되어 있고, 구현체는 다음과 같은 것이 있습니다.
- Reactor 3
- RxJava (Version 2 ~)
- Akka Streams
- Vert.x
- Ratpack
4개의 인터페이스는Subscriber
/ Publisher
/ Subscription
/ Processor
입니다.
상호작용
리액티브 스트림은 Publisher
에서 데이터가 시작되고, 기본적으로 Subscriber
가 '1. subscrive
' 를 호출하는 순간 Publisher
에서 Subscriber
로 데이터가 전달이 시작됩니다.
위 다이어 그램 중, 3. request(n) 즉 Subscriber
가 데이터를 콕 집어서 몇 개 달라고 요청하는데, 이 부분이 'Backpressure(=배압?)'을 조절하는 부분입니다.
연산자
리액터는 '연산자(Operators)' 개념을 추가하였는데, 이는 각 단계에서 데이터를 어떻게 처리할지를 정의합니다. 이 연산 차를 거친 뒤, 최종 데이터는 Subscriber
에 의해 처리됩니다.