728x90
Spring Boot MVC와 Spring Boot WebFlux는 개발자가 작성하는 코드 스타일은 비슷하지만, 내부 구조, 기술 스택, 처리 방식이 본질적으로 다르다. 이 글에서는 MVC와 WebFlux를 특징 요약, 흐름도, 비교 테이블, 사용 기술 스택 중심으로 깔끔하게 정리한다.
0. Spring MVC vs Spring WebFlux - 특징 요약
📌 Spring MVC 특징
- Servlet API 기반 전통적인 웹 애플리케이션 프레임워크
- Blocking 방식: 요청 처리 동안 쓰레드를 점유
- 개발 난이도 낮음: 코드가 직관적이고, 동기 흐름
- Blocking 데이터베이스 (JDBC, JPA) 사용에 최적화
- 전통적인 웹사이트, 사내 시스템에 적합
📌 Spring WebFlux 특징
- Reactive Streams API 기반 비동기 프레임워크
- Non-Blocking 방식: 필요할 때만 쓰레드 사용
- Mono, Flux 기반 스트림 프로그래밍 필수
- Non-Blocking 데이터베이스 (R2DBC, ReactiveMongo) 사용 최적화
- 고트래픽 API 서버, 실시간 서비스 구축에 적합
✅ 둘 다 @RestController 스타일을 사용할 수 있지만, 처리 방식과 내부 구조는 완전히 다르다.
1. 흐름도 비교
1.1 Spring Boot MVC 요청 흐름
Client 요청
↓
Servlet Filter
↓
DispatcherServlet
↓
HandlerMapping → HandlerAdapter
↓
Controller (@RestController)
↓
Service → Repository (JDBC, JPA)
↓
ViewResolver (필요 시)
↓
Response 반환
- DispatcherServlet이 핵심 엔진 역할
- 요청~응답 사이에 쓰레드가 지속적으로 점유됨 (Blocking)
1.2 Spring Boot WebFlux 요청 흐름
Client 요청
↓
WebFilter
↓
DispatcherHandler
↓
HandlerMapping → HandlerAdapter
↓
Handler (Annotation Controller or RouterFunction)
↓
Service → Repository (R2DBC, ReactiveMongo)
↓
Mono/Flux 스트림 반환
↓
Response 스트리밍
- DispatcherHandler가 핵심 엔진 역할
- 데이터 준비가 완료될 때까지 쓰레드 점유 없이 대기 가능 (Non-Blocking)
2. 주요 특징 비교 테이블
구분Spring MVCSpring WebFlux
기반 | Servlet API | Reactive Streams API |
요청 처리 | 동기 (Blocking) | 비동기 (Non-Blocking) |
Dispatcher | DispatcherServlet | DispatcherHandler |
필터 체인 | Servlet Filter | WebFilter |
컨트롤러 스타일 | `` | **, ** |
데이터베이스 접근 | JDBC, JPA (Blocking) | R2DBC, ReactiveMongo (Non-Blocking) |
실시간 통신 | WebSocket 별도 구현 필요 | SSE, WebSocket 기본 지원 |
서버 엔진 | Tomcat 기본 | Netty, Tomcat(reactive 모드) 선택 가능 |
쓰레드 관리 | 요청당 하나씩 소모 | 쓰레드 재활용 (성능 우수) |
개발 난이도 | 낮음 | 높음 (Reactive 이해 필요) |
3. 사용하는 기술 스택
영역Spring MVCSpring WebFlux
서버 | Tomcat, Jetty, Undertow (Servlet 기반) | Netty(기본), Tomcat, Undertow (Reactive 모드) |
DB 연동 | JDBC, Hibernate, MyBatis | R2DBC, ReactiveMongo, ReactiveCassandra |
HTTP 클라이언트 | RestTemplate (Blocking), WebClient (Non-Blocking 지원 가능) | WebClient (Non-Blocking 기본) |
메시징 | Spring AMQP (RabbitMQ, Kafka) | Spring Reactive Messaging (Kafka, RabbitMQ 등 Non-Blocking) |
4. 추가적인 주요 차이
🔹 에러 처리
- Spring MVC: @ControllerAdvice + @ExceptionHandler
- Spring WebFlux: @ControllerAdvice + @ExceptionHandler + Flux/Mono 내부에서 onErrorResume 가능
🔹 트랜잭션 처리
- Spring MVC: @Transactional 지원 (동기 트랜잭션)
- Spring WebFlux: Reactive 트랜잭션 필요 (TransactionalOperator 사용)
🔹 API 문서화
- 둘 다 SpringDoc OpenAPI 3 사용 가능
- WebFlux는 Response 타입이 Flux/Mono이므로 추가 설정 주의 필요
✅ 최종 요약
Spring MVC와 Spring WebFlux는 코딩 스타일은 비슷하지만, 실제 운영 환경에서는 성능, 처리 방식, 기술 스택이 완전히 다르다.
선택 기준추천
사용자 수가 적거나 관리성 우선 | Spring MVC |
초대형 트래픽, 실시간 데이터 처리 | Spring WebFlux |
기술 선택은 "요구사항 + 트래픽 규모 + 팀 기술 역량" 3가지를 반드시 종합해서 결정해야 한다.
728x90
'BackEnd > Spring WebFlux' 카테고리의 다른 글
Kotlin + Spring WebFlux 테스트 구조 설계기 (0) | 2025.05.28 |
---|---|
Spring WebFlux에서 MySQL을 사용하는 방법: JDBC vs R2DBC 완전 정리 (0) | 2025.04.28 |
Spring WebFlux 심화 시리즈 (4) - WebClient를 활용한 대용량 데이터 처리 (0) | 2025.04.28 |
Spring WebFlux 심화 시리즈 (3) - Flux로 페이징 처리하는 방법 (0) | 2025.04.28 |
Spring MVC vs Spring WebFlux 시리즈 (2) - 콘텐츠 리스트를 WebFlux로 반환하는 방법 (0) | 2025.04.28 |