Spring 5에서 도입된 비동기 및 논블로킹(non-blocking) 웹 프레임워크
기존의 동기/블로킹 방식인 Spring MVC와 대조적으로, WebFlux는 Reactive Streams 표준을 기반으로 동작하며, 더 많은 요청을 효율적으로 처리할 수 있도록 설계됨
Spring MVC (기존 방식) 비유:
- 식당 모델:
- 서버(종업원)가 손님(요청)을 처리합니다.
- 종업원은 한 번에 한 손님의 주문을 받고, 요리를 완전히 제공할 때까지 기다립니다.
- 손님이 많으면 종업원 수를 늘려야 합니다. 결국, 종업원이 너무 많아지면 공간(서버 리소스)이 부족해집니다.
Spring WebFlux (WebFlux 방식) 비유:
- 패스트푸드 매장 모델:
- 손님이 주문을 하고, 번호표를 받습니다.
- 손님은 음식이 준비될 때까지 기다리지 않고, 테이블에서 자신의 일을 하거나 다른 곳에서 대기할 수 있습니다.
- 음식이 준비되면 번호표를 호출하고, 손님은 음식을 받습니다.
- 종업원(리소스) 수는 최소한으로 유지됩니다. 비동기적으로 손님을 처리하므로 더 많은 손님을 처리할 수 있습니다.
상황별 적합성
1. Spring MVC가 적합한 경우
- 단순하고 직관적인 코드를 선호하는 경우.
- 소규모 트래픽 환경 또는 동기적인 로직이 더 효율적인 환경.
- CPU 중심 작업(데이터 처리, 계산)이 많은 경우.
2. Spring WebFlux가 적합한 경우
- 대규모 트래픽 환경 (수천 ~ 수만 개의 요청 처리).
- API 게이트웨이, 데이터 스트리밍 등 I/O 작업이 많은 경우.
- 실시간 데이터 처리 (WebSocket, SSE 등) 필요.
주요 기술 스택
- Spring MVC:
- 동기식 처리: DispatcherServlet, Servlet API 기반.
- 서버: Tomcat, Jetty, Undertow.
- Spring WebFlux:
- 비동기식 처리: WebHandler, Reactive Streams 기반.
- 서버: Netty, Undertow, Jetty.
- Spring MVC는 익숙하고 직관적이며 CPU 중심의 동기 작업에 적합
- Spring WebFlux는 비동기적으로 더 많은 요청을 처리할 수 있어 I/O 중심의 고성능 요구 사항에 적합
'Spring' 카테고리의 다른 글
ServletResponse.isComitted(), FilterChain (with GPT) (1) | 2024.12.19 |
---|---|
(지피티 선생님의) 람다와 일급 객체, FP 특강 (0) | 2024.12.12 |
Spirng AOP (3) | 2024.09.03 |
Spring MVC 설정 파일 이해하기 : web.xml & dispatcher-servlet.xml (1) | 2024.09.03 |
ModelAndView vs @ResponseBody (0) | 2024.09.02 |