Reactive Streams와 Spring WebFlux: 비동기 스트림 처리의 핵심 이해
비동기 논블로킹 I/O는 현대 웹 애플리케이션에서 매우 중요한 기술입니다. 특히, Reactive Streams는 비동기 데이터를 효율적으로 처리하기 위한 표준을 정의하고, 이를 통해 고성능의 서버 애플리케이션을 구축하는 데 필수적인 역할을 합니다. 이번 포스트에서는 Reactive Streams, Reactor, Spring WebFlux의 개념을 이미지 기반으로 설명하고, 이들이 어떻게 비동기 스트림 처리를 구현하는지 살펴보겠습니다.
1. Reactive Stream 계층 구조
Reactive Streams는 비동기 스트림 처리에서 non-blocking 방식과 back pressure 메커니즘을 통해 데이터를 효율적으로 관리합니다. 여기서 중요한 것은 소비자가 처리할 수 있는 만큼의 데이터를 제어할 수 있다는 점입니다.
2. Reactive Streams: 비동기 스트림 처리 표준
Reactive Streams는 비동기 스트림 처리의 표준을 정의하며, 특히 back pressure 메커니즘을 통해 데이터를 효율적으로 처리하는 것이 핵심입니다.
3. Reactor 구성 요소: 비동기 스트림 구성
Reactor에서 Publisher, Processor, Subscriber, Subscription은 데이터의 흐름을 제어합니다. Subscription은 Publisher와 Subscriber 간의 연결을 관리하여, 데이터의 요청(request)과 취소(cancel) 같은 행동을 조정하는 중요한 매개체 역할을 합니다.
4. Spring WebFlux: Reactive Streams의 구성 요소
Spring WebFlux에서 Subscription은 Publisher와 Subscriber 사이에서 데이터 요청과 전송 흐름을 조정하는 중요한 매개체로 동작합니다. request n을 통해 구독자가 처리할 수 있는 만큼의 데이터를 요청하며, Subscription을 통해 데이터 흐름을 관리합니다.
5. Publisher와 Subscriber 간의 상호작용
Subscription은 Publisher와 Subscriber 사이에서 데이터 요청을 관리하고, Subscriber가 request n으로 요청한 데이터를 Publisher에게 전달받아 Subscriber에게 전송합니다. cancel을 통해 구독을 중단할 수도 있습니다.
6. Subscriber의 주요 메서드
classDiagram
class Subscriber {
+onSubscribe
+onNext
+onError
+onComplete
}
Subscriber는 주로 onSubscribe, onNext, onError, onComplete 메서드를 통해 데이터를 처리합니다. 이 메서드들은 Subscription에서 받은 데이터를 다루는 중요한 콜백 함수들입니다.
7. Subscription의 역할
classDiagram
class Subscription {
+request long n
+cancel
}
Subscription은 Publisher와 Subscriber 사이의 데이터 흐름을 관리합니다. request n을 통해 Publisher에게 데이터를 요청하고, cancel을 통해 구독을 취소할 수 있습니다.
8. Processor의 역할
Processor는 Publisher와 Subscriber의 역할을 모두 수행하며, 데이터를 변환한 후 Subscription을 통해 Subscriber에게 전달합니다.
9. Spring WebFlux의 비동기 처리
Spring WebFlux는 비동기 방식으로 데이터를 처리하며, 여러 스레드에서 Subscriber가 데이터를 처리할 수 있습니다. 이를 통해 고성능 서버를 구축할 수 있습니다.
10. Spring WebFlux의 Back Pressure
Subscription은 Publisher와 Subscriber 간의 데이터를 조정하며, request n을 통해 back pressure를 관리합니다. 구독자는 필요에 따라 cancel을 통해 구독을 중단할 수 있습니다.
'프레임워크 > 자바 스프링' 카테고리의 다른 글
Spring Webflux 실습 - 2 (0) | 2024.09.26 |
---|---|
Spring Webflux 실습 - 1 (1) | 2024.09.25 |
Webflux - spring mvc vs webflux (1) | 2024.09.18 |
Webflux 소개 (0) | 2024.09.17 |
접속자 대기열 시스템 #1: 시스템 설계와 Spring WebFlux, Redis (3) | 2024.09.09 |