NIO 기반으로 동작하는 WebFlux에서 어떤 시점에 핸들러를 통해 만들어진 응답을 클라이언트에게 전송하는지 알아보겠습니다.
Netty
의 EventLoop
가 요청 수신 → HttpServerHandler
→ Reactor Netty
→ DispatcherHandler
로 위임DispatcherHandler
가 HandlerMapping
→ HandlerAdapter
를 통해 Handler
호출Handler
는 ServerResponse
(or ResponseEntity
) 등을 만들어 Mono<ServerResponse>
형태로 반환핸들러가 Mono<ServerResponse>
를 반환하는 시점이 아니라, 해당 Mono가 subscribe()
되어 구독되며 데이터가 전달될 때 실제 응답 전송이 시작됩니다.
WebFlux에서는:
DispatcherHandler
가 이 Mono를 구독ServerHttpResponse
의 body에 writeWith
로 DataBuffer
를 쓰기 시작즉, 응답 바디를 구성하는 Publisher가 emit하여 Netty의 채널에 write될 때 클라이언트로 전송이 시작됩니다.
HandlerResultHandler
의 역할DispatcherHandler
는 핸들러가 반환한 결과(Mono<ServerResponse>
, Mono<Rendering>
, 단일 값 등) 을 HandlerResult
로 감싸서 처리합니다.HandlerResultHandler
가 개입하여:
HandlerResult
를 어떻게 응답으로 변환할지 결정