❓왜 알아보게 되었나

Next.js를 사용하면서 미들웨어 로거를 작성하여 찍어보게 되었다. 이때 응답 헤더에서 connection 설정이 keep-alive로 설정되어있는 것을 확인하게 되었다. 이것이 HTTP/1.1 프로토콜의 기본동작이라고 한다. 보통 앱을 호스팅하는 웹서버(Nginx, Apache, Vercel)에 따라 결정된다. HTTP/2에서는 이 옵션이 무시되며, 해당 프로토콜이 사용하는 다른 메커니즘에 의해 처리된다. 또한 응답 형식이 ReadableStream임을 확인하였다. 이에 대해 알아보고자 하였다.

‼ Header 속성, Connection

Header에는 현재의 요청 전송이 완료된 후 네트워크 접속을 유지할 지 제어할 수 있는 설정값 connection을 갖고 있다. ‘keep-alive’ 연결을 사용하면 연결 재사용을 지원하여 후속 요청에 대해 빠르게 응답할 수 있도록 한다.

‼Stream 형식의 응답

이 연결 속성은 stream 형식의 응답도 지원한다. 이때 chuncked encoding을 지원하므로 응답을 보내기 전, 전체 크기에 대해 알 필요가 없어진다. 큰 응답을 작은 단위로 나누어 처리하여 네트워크 지연이 최소화 되고, 서버 메모리 사용량을 최적화 할 수 있다. 또한 네트워크 버퍼를 효율적으로 사용하여 지연시간을 줄일 수 있고, 부분적 전송 실패 시 재전송이 용이하다.

‼HTTP 버전에 따른 keep-alive 옵션의 변화

<aside> 📌

QUIC Quick UDP Internet Connections

TCP/TLS 의 한계를 극복 UDP 기반으로 TCP의 신뢰성(패킷 손실 복구, 순서 보장)과 TLS의 보안성 제공

</aside>

❓ 서버는 어떻게 고유한 클라이언트를 구분할 수 있는걸까

전송제어프로토콜 TCP Transmission Control Protocol

2개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 네트워크 프로토콜. 데이터와 패킷이 보내진 순서대로 전달하는 것을 보장한다.