| Spring MVC | Spring WebFlux | |
|---|---|---|
| 기반 API | 서블릿 (동기·블로킹 전제) | 리액티브 스트림 (논블로킹) |
| 스레딩 | 요청당 스레드, 큰 풀 | 이벤트 루프, 소수 고정 스레드 |
| 기본 서버 | Tomcat | Netty |
| 반환 타입 | 도메인 객체 | Mono/Flux |
| 데이터 접근 | JPA/JDBC (블로킹) | R2DBC·리액티브 드라이버 (논블로킹) |
Filter, Servlet)·블로킹(getParameter, getPart)이라 끝까지 논블로킹으로 가기 어려움 → 논블로킹 런타임 공통 기반으로 쓸 새 API가 필요했음@Controller/@RequestMapping 등 Spring MVC와 동일한 애노테이션, 리액티브 반환 타입(Mono/Flux)·리액티브 @RequestBody 지원 (6단계에서)RouterFunction 기반의 가볍고 람다 중심적인 모델 (7단계에서)DispatcherServlet에 대응하는 중앙 WebHandler — 공통 요청 처리 알고리즘을 제공하고, 실제 작업은 위임 컴포넌트가 수행webHandler), 자신도 스프링 빈| 특수 빈 | 역할 |
|---|---|
HandlerMapping |
요청 → 핸들러로 매핑 (애노테이션 컨트롤러, URL 패턴 등 구현별 기준) |
HandlerAdapter |
매핑된 핸들러를 일반화된 방식으로 호출 — 호출 세부를 DispatcherHandler로부터 숨김 |
HandlerResultHandler |
핸들러 결과를 처리해 응답을 완성 (직접 쓰기 또는 뷰 렌더링) |
HttpHandler/ServerWebExchange 추상화 위에서 동작하며, 처리 완료는 Mono<Void>로 신호publishOn/boundedElastic로 오프로드(4단계)WebClient 도입 — 컨트롤러에서 리액티브 타입을 그대로 반환 가능spring.threads.virtual.enabled=true)로 블로킹 API도 높은 동시성 처리