WebFlux
- 이벤트 기반 및 비동기 프로그래밍을 지원하는 Spring Framework의 모듈
- 목적: 반응형 프로그래밍을 통해 '높은 처리량'과 '확장성'을 갖는 애플리케이션을 만드는 것을 목표로 합니다.
- Reactor를 사용하여 비동기적으로 웹 애플리케이션(어떠한 로직)을 처리하면서, Netty는 Spring WebFlux의 내부에서 사용되어 실제 HTTP 통신을 처리합니다.
- 선언형 코드 형식을 가집니다.
Reactor
- WebFlux는 Reactor라는 라이브러리를 기반으로 사용합니다.
- 비동기 방식의 논 블로킹 요청을 통해 이벤트 기반의 Reactive Stream으로 데이터를 주고받습니다.
- Publisher-Subscriber 패턴으로 동작 (옵저버 패턴과 유사)
- 리액티브 타입: Mono(0 또는 한 개), Flux(0 또는 여러 개)
"출처: https://adjh54.tistory.com/232"
💡 반응형 스트림 처리 과정
-
[subscribe] Subscriber를 Publisher에 ‘등록’하고 데이터 스트림을 ‘수신할 준비’가 되었음을 Publisher에게 알립니다.
-
[onSubscribe] Publisher가 Subscriber에게 데이터 스트림을 ‘전송하기 시작하기 전에 호출’됩니다. 이 메서드를 통해 Subscriber는 Subscription 객체를 받아들여 데이터의 양을 제어할 수 있습니다.
-
[request(n)/cancel] request(n) 메서드는 Publisher에게 n개의 데이터를 요청하고, cancel 메서드는 데이터 스트림을 취소합니다.
-
[onNext(data)] Publisher가 ‘생성한 데이터’를 Subscriber에게 전달합니다. 이 메서드는 데이터가 전송될 때마다 호출됩니다.
-
[onComplete/onError] Publisher가 모든 데이터를 전송하고, 더 이상 데이터가 없을 때 호출됩니다.
- onComplete 메서드는 모든 데이터가 성공적으로 전송되었음을 나타냅니다.
- onError 메서드는 데이터 전송 중 오류가 발생했음을 나타냅니다.