클라이언트로부터 HTTP 요청이 부분만 왔을 때 어떻게 처리되는지를 알아보겠습니다.
부분 요청에 대해 알아보기 전에 클라이언트에 응답을 보내는 순서를 단계별로 알아보겠습니다.
NioEventLoop
/ EpollEventLoop
가 소켓의 Read 이벤트 감지
ServerSocketChannel
이 accept
하여 SocketChannel
생성ChannelPipeline
이 요청 처리 준비ChannelPipeline
처리ChannelPipeline
에 등록된 Handler 순차 호출
HttpServerCodec
(ByteBuf ↔ HTTP 메시지 변환)HttpObjectAggregator
(FullHttpRequest 조립)ReactorNetty
의 HttpServerOperations
가 Publisher
기반으로 요청 래핑 후 WebFlux로 전달ReactorHttpHandlerAdapter
가 호출
HttpServerRequest
, HttpServerResponse
를 ServerHttpRequest
, ServerHttpResponse
로 추상화DispatcherHandler
호출DispatcherHandler 이후 동작은 WebFlux 동작 흐름 글에서 확인할 수 있습니다. 현재 주제에서는 이 정도 과정만 확인하면 문제없습니다.
다음은 클라이언트로부터 HTTP 요청이 부분만 왔을 때 어떻게 처리되는지를 알아보겠습니다.
TCP는 스트림 기반이므로 HTTP 요청 전체가 한 번에 도착하지 않을 수 있습니다.
예를 들어 클라이언트가 POST/api
요청을 보낼 때 요청 라인과 일부 헤더만 도착하고 나머지 헤더 혹은 바디는 아직 미도착할 수 있습니다.
이 상태에서 서버는 읽을 수 있는 ByteBuf만 수신한 상황입니다.
ChannelPipeline
의 동작