[Spring WebFlux] 15. Spring WebFlux 개요

y001·2025년 5월 3일

Reactive Programming

목록 보기
23/30
post-thumbnail

1. Spring WebFlux 탄생 배경

Spring WebFlux는 리액티브 웹 애플리케이션을 구현하기 위해 Spring 5부터 도입된 논블로킹(Non-Blocking) 기반의 웹 프레임워크이다.

기존 Spring MVC는 Servlet 기반의 블로킹 I/O 구조로, 하나의 요청을 처리하는 동안 하나의 스레드가 점유된다. 이 방식은 동시 접속자가 많아질수록 처리 성능이 급격히 저하되는 한계를 가진다.

이에 반해 Spring WebFlux는 비동기 논블로킹 방식을 도입해, 스레드를 기다리지 않고 작업 완료 시점에 콜백을 호출하는 방식으로 훨씬 높은 동시성을 지원한다. 이 구조는 특히 리소스가 제한적인 환경이나 고부하 상황에서 유리하다.


2. Spring WebFlux의 기술 스택 비교

항목Spring MVCSpring WebFlux
서버 엔진서블릿 기반 (Tomcat 등)논블로킹 기반 (Netty, Jetty, Undertow 등)
API 기반Servlet APIReactive Streams API
보안 처리Servlet Filter + Spring SecurityWebFilter + Spring Security
데이터 엑세스JDBC, JPA, Spring Data Mongo 등 (블로킹)R2DBC, Reactive MongoDB 등 (논블로킹)

3. Spring WebFlux 요청 처리 흐름

Spring WebFlux는 다음과 같은 흐름으로 요청을 처리한다:

Client
  │
  ▼
HttpHandler
  │
  ▼
WebFilter (전처리)
  │
  ▼
DispatcherHandler
  │
  ├─ HandlerMapping (핸들러 찾기)
  ├─ HandlerAdapter (핸들러 실행)
  └─ HandlerResultHandler (결과 가공)
  │
  ▼
Response

모든 처리 과정은 논블로킹(Non-Blocking) 방식으로 수행되며, 실제 실행은 구독 시점에 발생한다.


4. 핵심 컴포넌트 설명

HttpHandler

  • WebFlux의 진입점으로, Netty 등 서버에서 요청을 받는 역할을 한다.
  • 요청과 응답을 감싼 ServerWebExchange를 생성하여 필터 체인에 넘긴다.

WebFilter

  • 인증, 로깅 등 공통 전처리를 수행하는 필터이다.
  • 모든 핸들러(애너테이션 + 함수형 라우터)에 적용된다.

HandlerFilterFunction

  • 함수형 라우터에서만 사용하는 전용 필터이다.
  • 라우터별로 선택적으로 필터를 적용할 수 있다.

WebFilter는 전역 필터, HandlerFilterFunction은 개별 필터

DispatcherHandler

  • 요청을 받아 아래 전략 컴포넌트로 위임하는 중앙 분배자이다.

    • HandlerMapping: 핸들러 탐색
    • HandlerAdapter: 핸들러 실행
    • HandlerResultHandler: 결과를 응답으로 변환

HandlerMapping

  • 요청에 알맞은 핸들러를 찾아준다.
  • 대표 구현: RequestMappingHandlerMapping, RouterFunctionMapping

HandlerAdapter

  • 찾은 핸들러를 실제로 실행하는 컴포넌트이다.
  • 다양한 핸들러 유형(컨트롤러, 라우터, 웹소켓 등)을 지원한다.

HandlerResultHandler

  • 핸들러의 실행 결과를 클라이언트에 반환할 수 있는 응답 형태로 가공한다.
  • JSON 직렬화, 템플릿 렌더링 등을 담당한다.

5. WebFlux의 Non-Blocking 구조

Spring WebFlux는 내부적으로 이벤트 루프(Event Loop) 기반으로 작동한다.

1. 요청 수신
2. 이벤트 큐에 등록
3. DB/네트워크 작업은 콜백 등록만 수행
4. 작업 완료 시 콜백 실행
5. 다음 요청 처리로 바로 이동
  • 스레드는 어떤 작업도 기다리지 않고, 다음 요청 처리로 계속 이어진다.
  • 이 구조 덕분에 단일 스레드로도 다수의 요청을 처리할 수 있다.

핵심 요점: 스레드를 점유하지 않고, 완료 이벤트만 처리한다.


6. Spring WebFlux의 스레드 모델

항목Spring MVCSpring WebFlux
처리 방식요청 1건당 스레드 1개 필요스레드 점유 없이 논블로킹 처리
스레드 전략많은 스레드 풀 필요CPU 수만큼의 고정 스레드로 이벤트 처리
기반 구조Servlet, Tomcat 등Netty + Reactor 기반

0개의 댓글