
Spring WebFlux는 리액티브 웹 애플리케이션을 구현하기 위해 Spring 5부터 도입된 논블로킹(Non-Blocking) 기반의 웹 프레임워크이다.
기존 Spring MVC는 Servlet 기반의 블로킹 I/O 구조로, 하나의 요청을 처리하는 동안 하나의 스레드가 점유된다. 이 방식은 동시 접속자가 많아질수록 처리 성능이 급격히 저하되는 한계를 가진다.
이에 반해 Spring WebFlux는 비동기 논블로킹 방식을 도입해, 스레드를 기다리지 않고 작업 완료 시점에 콜백을 호출하는 방식으로 훨씬 높은 동시성을 지원한다. 이 구조는 특히 리소스가 제한적인 환경이나 고부하 상황에서 유리하다.
| 항목 | Spring MVC | Spring WebFlux |
|---|---|---|
| 서버 엔진 | 서블릿 기반 (Tomcat 등) | 논블로킹 기반 (Netty, Jetty, Undertow 등) |
| API 기반 | Servlet API | Reactive Streams API |
| 보안 처리 | Servlet Filter + Spring Security | WebFilter + Spring Security |
| 데이터 엑세스 | JDBC, JPA, Spring Data Mongo 등 (블로킹) | R2DBC, Reactive MongoDB 등 (논블로킹) |
Spring WebFlux는 다음과 같은 흐름으로 요청을 처리한다:
Client
│
▼
HttpHandler
│
▼
WebFilter (전처리)
│
▼
DispatcherHandler
│
├─ HandlerMapping (핸들러 찾기)
├─ HandlerAdapter (핸들러 실행)
└─ HandlerResultHandler (결과 가공)
│
▼
Response
모든 처리 과정은 논블로킹(Non-Blocking) 방식으로 수행되며, 실제 실행은 구독 시점에 발생한다.
HttpHandlerServerWebExchange를 생성하여 필터 체인에 넘긴다.WebFilterHandlerFilterFunction
WebFilter는 전역 필터,HandlerFilterFunction은 개별 필터
DispatcherHandler요청을 받아 아래 전략 컴포넌트로 위임하는 중앙 분배자이다.
HandlerMapping: 핸들러 탐색HandlerAdapter: 핸들러 실행HandlerResultHandler: 결과를 응답으로 변환HandlerMappingRequestMappingHandlerMapping, RouterFunctionMappingHandlerAdapterHandlerResultHandlerSpring WebFlux는 내부적으로 이벤트 루프(Event Loop) 기반으로 작동한다.
1. 요청 수신
2. 이벤트 큐에 등록
3. DB/네트워크 작업은 콜백 등록만 수행
4. 작업 완료 시 콜백 실행
5. 다음 요청 처리로 바로 이동
핵심 요점: 스레드를 점유하지 않고, 완료 이벤트만 처리한다.
| 항목 | Spring MVC | Spring WebFlux |
|---|---|---|
| 처리 방식 | 요청 1건당 스레드 1개 필요 | 스레드 점유 없이 논블로킹 처리 |
| 스레드 전략 | 많은 스레드 풀 필요 | CPU 수만큼의 고정 스레드로 이벤트 처리 |
| 기반 구조 | Servlet, Tomcat 등 | Netty + Reactor 기반 |