클라이언트로부터 HTTP 요청이 부분만 왔을 때 어떻게 처리되는지를 알아보겠습니다.

요청 처리 과정

부분 요청에 대해 알아보기 전에 클라이언트에 응답을 보내는 순서를 단계별로 알아보겠습니다.

클라이언트 요청 → Netty 수신

  1. 클라이언트가 요청 전송
  2. Netty의 NioEventLoop / EpollEventLoop가 소켓의 Read 이벤트 감지

Netty의 ChannelPipeline 처리

  1. ChannelPipeline 에 등록된 Handler 순차 호출

Reactor Netty → WebFlux로 전달

  1. ReactorHttpHandlerAdapter 가 호출

DispatcherHandler 이후 동작은 WebFlux 동작 흐름 글에서 확인할 수 있습니다. 현재 주제에서는 이 정도 과정만 확인하면 문제없습니다.

부분 요청 처리

다음은 클라이언트로부터 HTTP 요청이 부분만 왔을 때 어떻게 처리되는지를 알아보겠습니다.

“HTTP 요청이 부분만 왔다”의 의미

TCP는 스트림 기반이므로 HTTP 요청 전체가 한 번에 도착하지 않을 수 있습니다.

예를 들어 클라이언트가 POST/api 요청을 보낼 때 요청 라인과 일부 헤더만 도착하고 나머지 헤더 혹은 바디는 아직 미도착할 수 있습니다.

이 상태에서 서버는 읽을 수 있는 ByteBuf만 수신한 상황입니다.

Netty ChannelPipeline 의 동작

(1) Read 이벤트 발생