반응형

리액티브 스트림즈는 비동기·논블로킹 환경에서 데이터 스트림을 처리하기 위한 표준 사양으로, 대규모 트래픽 처리와 시스템 효율성 향상에 기여합니다.
1. 주요 용어
▷ Signal
- Publisher와 Subscriber 간 주고받는 상호작용 메시지 (예: onNext, onComplete).
- 데이터 상태/이벤트를 전달하는 신호.
▷ Demand
- Subscriber가 요청했으나 아직 처리되지 않은 데이터의 양.
▷ Emit
- Publisher가 onNext를 통해 데이터를 발행하는 행위.
▷ Upstream/Downstream
- Upstream: 현재 메서드보다 상위의 데이터 소스 (예: just → filter에서 just는 Upstream).
- Downstream: 하위 처리 단계 (예: filter → map에서 map은 Downstream).
▷ Sequence
- 데이터 흐름을 정의한 연산 체인 (예: Flux.just().filter().map()).
▷ Operator
- 데이터 변환/필터링을 수행하는 연산자 (예: filter, map).
▷ Source
- 최초 데이터 생성 지점 (예: Flux.just()의 인자).
2. 구현 규칙
▶ Publisher
- onNext 발행 횟수는 Subscriber 요청 수를 초과할 수 없음.
- onError 또는 onComplete로 종료 신호 전달 후 더 이상 신호 발생 금지.
- 구독 취소 시 신호 전달 중단.
▶ Subscriber
- onSubscribe에서 Subscription.request()를 통해 초기 데이터 요청.
- onNext에서 데이터 처리 시 예외 발생 시 onError 호출.
▶ Subscription
- request(n)으로 요청할 데이터 수 명시.
- cancel()로 구독 해지 가능.
▶ Processor
3. 주요 구현체
라이브러리특징
| RxJava | 넷플릭스 개발, 복잡한 비동기 흐름 처리에 강점. |
| Project Reactor | Spring WebFlux의 기본 엔진, 선언형 API 제공. |
| Akka Streams | 분산 시스템에 적합, Actor 모델 기반. |
| Java Flow API | Java 9+ 내장 SPI, 표준 인터페이스 제공. |
4. 적용 시 고려사항
- Backpressure 관리: Subscriber의 처리 속도에 맞춰 데이터 발행량 조절 필요.
- 에러 핸들링: onError를 활용한 복구 로직 필수.
- 성능 최적화: 불필요한 Operator 체인 최소화.
리액티브 스트림즈는 고성능 서버 개발의 핵심 기술로, 특히 Spring WebFlux 기반 애플리케이션에서 필수적으로 활용됩니다.
[WebFlux] 리액티브 스트림즈 용어, 규칙, 라이브러리
리액티브 스트림즈 용어 Signal Publisher와 Subscriber 간에 주고받는 메시지 신호로, 각 인터페이스에...
blog.naver.com
Blocking I/O와 Non-Blocking I/O: 개념과 WebFlux에서의 활용
Blocking I/O와 Non-Blocking I/O는 시스템의 성능과 효율성을 결정짓는 중요한 개념입니다. 특히, Spring WebFlux는 Non-Blocking I/O를 기반으로 설계되어 대량의 요청을 효율적으로 처리할 수 있도록 돕습니다
hoosfa.tistory.com
반응형
'IT기술 > webflux (reactor)' 카테고리의 다른 글
| Reactor: Spring WebFlux의 리액티브 스트림즈 구현체 (4) | 2025.04.01 |
|---|---|
| Spring WebFlux와 리액티브 프로그래밍의 기초: 함수형 인터페이스부터 함수 디스크립터까지 (2) | 2025.03.26 |
| Blocking I/O와 Non-Blocking I/O: 개념과 WebFlux에서의 활용 (0) | 2025.03.23 |
| [WebFlux 심층 분석] 리액티브 스트림즈 컴포넌트 구현 및 Kafka와의 비교 (0) | 2025.03.21 |
| [WebFlux 심층 분석] 리액티브 스트림즈의 핵심 개념과 구현 전략 (0) | 2025.03.20 |