Keep Alive
네트워크 또는 시스템에서 커넥션을 끊지 않고 지속적으로 유지하기 위해 사용되는 기술이나 설정입니다.
핵심 특징
- HTTP Keep-Alive: 하나의 TCP 커넥션으로 여러 개의 HTTP 요청과 응답을 주고받는 기능입니다. HTTP/1.0은 요청마다 커넥션을 새로 열고 닫았지만, HTTP 1.1부터는 기본적으로 활성화되어 커넥션을 재사용합니다.
- TCP Keep-Alive: TCP 커넥션이 유휴 상태일 때 연결이 끊어지지 않도록 주기적으로 패킷을 전송해 생존 여부를 확인하는 기능입니다.
HTTP vs TCP Keep-Alive
| 항목 | HTTP Keep-Alive | TCP Keep-Alive |
|---|---|---|
| 동작 계층 | 애플리케이션 계층 | 전송 계층 |
| 목적 | 커넥션 재사용으로 요청/응답 처리 | 유휴 커넥션의 생존 확인 |
| 동작 방식 | 일정 시간 요청이 없으면 타임아웃 후 커넥션 종료 | 주기적으로 패킷을 보내 살아있으면 유지 |
장점
- 커넥션을 재사용하여 네트워크 비용을 절감할 수 있습니다.
- 3-Way Handshake에 필요한 RTT가 감소해 지연 시간을 줄일 수 있습니다.
- handshake 과정에서 발생하는 CPU, 메모리 등 리소스 소비를 줄일 수 있습니다.
주의사항
- 유휴 상태에서도 커넥션을 점유하므로 서버의 소켓이 부족해질 수 있습니다.
- 다수의 연결을 길게 유지하는 방식으로 서버를 과부하시키는 공격에 악용될 수 있습니다.
- 타임아웃 설정이 적절하지 않으면 커넥션 리소스가 낭비될 수 있습니다.
핵심 정리
HTTP Keep-Alive는 커넥션을 재사용해 요청/응답 비용을 줄이고, TCP Keep-Alive는 유휴 커넥션의 생존 여부를 주기적으로 확인합니다.