R+7

[TIL] 차근차근 CS (5) - Keep-Alive 본문

TIL

[TIL] 차근차근 CS (5) - Keep-Alive

prgmd 2026. 7. 13. 17:09

Today I Learned

HTTP Keep-Alive

HTTP 프로토콜에서 단일 TCP 연결을 재사용해 여러 HTTP 요청과 응답을 처리하는 기술. HTTP니까 L7, 애플리케이션 계층. 초창기 HTTP는 요청마다 새로운 TCP 연결을 맺고 끊어야 했지만, HTTP Keep-Alive를 적용하면 지정된 timeout 동안 연결을 유지하며 웹 페이지를 구성하는 여러 리소스(HTML, CSS, JavaScript, Image...)를 하나의 TCP 연결 위에서 연속 송수신. 오버헤드를 대폭 줄여 웹 페이지 로딩 속도를 최적화한다. HTTP/1.1부터 기본 활성화되어 있다고.

 

다만 앞선 요청 처리가 지연되면 뒤따르는 모든 요청이 지연되는 HOL Blocking 문제는 존재. 이를 극복하고자 나온 HTTP/2는 Multiplexing 기법 이용. 단일 TCP 연결 내 여러 개 스트림을 생성해 다수 요청과 응답을 병렬로 교차 전송. HTTP/3은 UDP 기반 QUIC 프로토콜을 도입. 연결 유지와 통신 최적화를 TCP 대신 QUIC에 맞춰 대체함. 

TCP Keep-Alive

TCP 프로토콜에서 두 종단 간 연결이 유효한지 확인하고 유휴 상태(idle)로 인해 네트워크 장비가 연결을 끊는 것을 방지하는 기술. 일정 시간 데이터 송수신이 없을 경우 OS 수준에서 아주 작은 크기의 Probe 패킷을 보낸다. 상대방이 이에 대한 ACK 응답을 보내면 연결이 유효한 것으로 간주하고 타이머를 초기화. 만약 설정된 횟수만큼 재시도해도 응답이 없으면 연결이 끊어진 것으로 판단하고 소켓을 닫는다. 상대 기기 전원이 갑자기 나가거나 네트워크 단절로 비정상 종료됐을 때 서버에 남는 불필요한 좀비 커넥션을 정리할 수 있다. 또한 방화벽이나 NAT 장비가 일정 시간 통신이 없는 세션을 자체 규칙에 따라 임의로 삭제하는 것을 막아줌.

 


Today I Listend to