Spring WebFlux는 Spring Framework 5.0에서 도입된 리액티브(Reactive) 웹 프레임워크이다.
기존의 Spring MVC가 서블릿 API를 기반으로 블로킹 I/O 모델을사용하는 반면, Spring WebFlux는 비동기 및 논블로킹(Non-Blocking) I/O 모델을 사용하여 높은 확장성과 성능을 제공하는 데 중점을 둔다.
Mono와 Flux를 제공한다.Mono<T>: 0개 또는 1개의 요소를 비동기적으로 처리한다(ex: 단일 객체 조회)Flux<T>: 0개에서 N개의 요소를 비동기적으로 처리한다(ex: 여러 개의 데이터 스트리밍)Mono나 Flux타입을 반환하여 비동기적인 데이터 흐름을 표현한다.@Controller 애노테이션 기반 방식 외에 함수형 프로그래밍 스타일로 라우팅과 요청을 처리를 정의할 수 있는 유연성을 제공한다.| 특징 | Spring MVC | Spring WebFlux |
|---|---|---|
| I/O 모델 | 블로킹 (Blocking) | 논블로킹 (Non-Blocking) |
| 스레드 모델 | 요청당 스레드 (Thread-per-request) | 이벤트 루브 (Event-loop) 및 적은 스레드 |
| 기반 기술 | 서블릿 API | Reactive Streams (Project Reactor) |
| 서버 | Tomcat, Jetty (서블릿 컨테이너) | Netty, Undertow (논블로킹 서버), Tomcat, Jetty (서블릿 컨테이너) |
| 적합한 사용처 | 전통적인 웹 애플리케이션, 동기적 처리, CPU 바운드 작업, 파일 업로드, JSP 렌더링, 세션 기반 인증 | 높은 동시성 요구, 실시간 데이터 처리 (스트리밍), 마이크로서비스 간 비동기 통신, API Gateway, I/O 바운드 작업 |
| 복잡도 | 상대적으로 낮음 | 리액티브 프로그래밍 학습이 어려움 |
| 디버깅 | 용이함 | 비동기 흐름 추적이 어려움 |
Mono, Flux 등의 개념에 대한 이해가 필요하여 학습이 어렵다.Spring WebFlux는 현대의 고성능, 고확장성 애플리케이션 요구사항에 맞춰 진화한 프레임워크이다. 서비스의 특성과 요구사항을 면밀히 분석하여 적절한 프레임워크를 선택하는 것이 중요하다.