Keep Alive

parkrootseok·2025년 4월 10일

네트워크

목록 보기
7/10
post-thumbnail

들어가며

모 회사의 CS 테스트를 보면서 Keep Alive에 대한 개념을 처음 접했습니다. 처음 들어봤을리 없는데, 컴퓨터공학과 전공 수업에서 들었지만 너무 오래 보지 않아 까먹은 것 같습니다. 이 기회를 삼아 Keep Alive가 뭔지 정리해보겠습니다.

TCP와 HTTP Keep Alive

Keep Alive 설정은 TCP(L4)와 HTTP(L7) 두 프로토콜에서 사용됩니다. 하지만, 이 두 프로토콜에서 Keep Alive가 동작하는 방식과 목적에는 다음과 같은 차이가 있습니다.

TCP Keep Alive란?

TCP Keep Alive는 연결 생존 여부를 확인하기 위한 설정입니다. 이를 위해, 연결이 아무 활동이 없을 때 OS 차원에서 연결 상태를 확인하기 위한 패킷을 주기적으로 전송합니다.

왜, 필요할까요?

TCP 프토토콜은 연결 지향적입니다. 즉, 연결을 맺은 상대와 정상적으로 송수신이 가능한 상태인지 확인해야 합니다.

설정 방식

TCP 계층의 Keep-Alive는 기본적으로 비활성화 상태(Windows 제외)로 설정되어 있기 때문에 다음과 같은 설정(Linux 기준)이 필요합니다.

sysctl -w net.ipv4.tcp_keepalive_time=600       # 10분 동안 데이터 송수신이 없으면
sysctl -w net.ipv4.tcp_keepalive_probes=5       # 총 5번 연결 확인을 수행하는데
sysctl -w net.ipv4.tcp_keepalive_intvl=60       # 연결 확인은 60초 간격으로 진행한다.

동작 방식

TCP Keep Alive는 다음과 같은 방식으로 동작합니다.

  1. 일정 시간이 지나면, Keep-Alive Probe라는 빈 패킷을 주기적으로 전송
  2. 응답이 없다면, 최대 N번 재시도 후 연결 종료

HTTP Keep Alive란?

HTTP 1.0은 기본으로 사용하지 않고, HTTP 1.1부터 기본적으로 사용

HTTP Keep Alive은 가장 큰 목적은 연결을 재사용하여 애플리케이션의 성능을 최적화하기 위한 설정입니다. 이를 위해, HTTP 헤더에 Connection: keep-alive 설정을 추가해야 합니다.

왜, 필요할까요?

웹 서비스 구조의 복잡성 증가는 한 페이지에서 여러 리소스를 요청하는 경우에 대한 증가로 이어졌습니다. 이로 인해, 기존 HTTP 1.0의 경우 요청마다 TCP 연결을 새로 맺으면 3-Way HandShaking 비용이 계속 발생합니다. 이를 해결하기 위해, Keep-Alive를 통해 하나의 TCP 연결을 재사용하면서 성능 최적화를 수행하게 되었습니다.

동작 방식

HTTP Keep Alive는 다음과 같은 방식으로 동작합니다.

  1. 첫 번째 요청시 TCP 연결 생성
  2. Keep-Alive 활성화
    • 응답 헤더에 Connection: keep-alive 포함 확인 후, 연결 유지 결정
  3. Timeout 이후 연결 종료
    • 일정 시간 동안 추가 요청이 없을 경우 연결을 종료
profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글