Spring

WebFlux 첨들어봄

99duuk 2024. 12. 10. 15:18

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 등) 필요.

주요 기술 스택

  1. Spring MVC:
    • 동기식 처리: DispatcherServlet, Servlet API 기반.
    • 서버: Tomcat, Jetty, Undertow.
  2. Spring WebFlux:
    • 비동기식 처리: WebHandler, Reactive Streams 기반.
    • 서버: Netty, Undertow, Jetty.

 

  • Spring MVC는 익숙하고 직관적이며 CPU 중심의 동기 작업에 적합
  • Spring WebFlux는 비동기적으로 더 많은 요청을 처리할 수 있어 I/O 중심의 고성능 요구 사항에 적합