Reactive Streams
리액티브 스트림은 JVM 환경에서 리액티브 프로그래밍의 표준 API 사양으로 비동기 데이터 스트림과 논블로킹 백프레셔에 대한 사양을 제공한다
스트리밍 처리
요청이 오면 모든 데이터를 메모리로 가져와야 하는 전통적인 데이터 처리 방식과 다르게 스트리밍 처리 방식을 사용하면 메모리에 다 올릴 필요가 없기 때문에 크기가 작은 시스템 메모리로도 많은 양의 데이터를 처리할 수 있다.
입력 데이터에 대한 파이프라인을 만들어서 데이터가 들어오는 대로 구독하고, 처리한 뒤 발행까지 한 번에 연결하여 처리한다.
비동기 방식
리액티브 스트림은 비동기 방식으로 동작하여, 동기적인 처리 방식보다 효율적이며 논블로킹 방식으로 자원을 활용할 수 있다.
백프레셔
백프레셔는 소비자가 처리할 수 있는 만큼만 데이터를 요청하는 기능으로, 빠른 프로듀서와 느린 컨슈머 간의 문제를 해결한다.
Reactive Streams 흐름
- Subscriber가 subscribe()를 통해 Publisher에게 구독을 요청
- Publisher는 onSubscribe()를 통해 Subscriber에게 Subscription (통신 매개체) 을 전달
- Subscriber, Publisher, Subscription이 서로 유기적으로 연결되어 통신을 주고받으며 subscribe()부터 onComplete()까지 연결되고, 이를 통해 백프레셔 이룸
Reactive Streams 인터페이스
- Publisher: 데이터를 생성하고 구독자에게 통지
- Subscriber: 데이터를 구독하고 통지 받은 데이터를 처리
- Subscription: Publisher, Subscriber간의 데이터를 교환하도록 연결하는 역할, 전달받을 데이터 개수와 구독을 해지할 수 있다
- Processor: Publisher, Subscriber을 모두 상속받은 인터페이스
Subscriber의 추상 메소드
- onSubscribe: 구독시 최초 한번 호출
- onNext: 구독자가 요구하는 데이터의 수 만큼 호출
- onError: 에러 또는 더 이상 처리할 수 없는 경우
- onComplete: 모든 처리가 정상적으로 완료된 경우
'Spring WebFlux' 카테고리의 다른 글
[Spring WebFlux] WebClient (0) | 2025.02.26 |
---|---|
[Spring WebFlux] Reactive Programming과 Design Pattern (0) | 2025.02.25 |
[Spring WebFlux] Project Reactor (0) | 2025.02.15 |