❓ WebFlux
Client와 Server에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈
- Spring5에서 reactive stack을 지원하는 web container framework
🔎 WebFlux 특징
Non-Blocking IO
- 최소한의 리소스로 효율적인 운영
- Singler worker thread가 event loop 처리
Event loop는 코어 개수만큼 존재
Functional Endpoints
- Lambda 기반 functional programming model
- Request router가 handler로 request routing
- Handler method에 @RequestMapping 선언부 없이 request, response를 app에서 전부 제어
📊 Spring MVC and WebFlux Comparison
https://docs.spring.io
MVC
- 요청 당 스레드를 따로 할당받아
blocking처리 - 요청이 많을 수록 스레드 간
context switching비용 증가 - 서버의 하드웨어 성능에 따라 원활한 서버 운영 가능
WebFlux
- Event loop model로 요청을
Non blocking처리 - 적은 스레드에서 여러 작업 처리
- 스레드 간
context switching비용 감소 - 요청이 적을 때 굳이 WebFlux를 사용하지 않아도 🙄..
📋 WebFlux 프로젝트 구성
- Filter
- Handler
- WebClient
- WebFluxConfigurer
🎈 Handler
HttpHandler
Annotated Controller(기존의 MVC와 동일한 형식)- Annotations를 통해 선언하며 콜백 받는다.
WebHandler
Functional Endpoint- 처음부터 끝까지 요청 처리를 담당 및 제어
DispatcherHandler가 각 컴포넌트 호출
🎠 Router
Routing Function
- Handler Function에 요청들을 routing 해주는 역할
- @RequestMapping 역할과 유사
- @RequestMapping은 data만 전달
- Router Function은
Mono<Handler Function>로 함수 전달
🔊 Filter
- WebHandler API에 적용
- 요청 처리 전에 선행 로직 실행 가능
API Gatway역할을 하는 app에서 자주 사용
📱 WebClient
Non-blocking Http Client Module
- HTTP Request를 수행하는 client
📝 R2DBC
- JDBC의 Blocking API를 대체하는
Nonblocking API Stack - Spring 5.3.2+
JDBC를 사용한다면, blocking code가 격리되도록 하는 것이 중요
📍 Handling Errors
WebExceptionHandler
- WebFilter / WebHandler chain에서 발생한 Exception 처리