본문 바로가기

CS

[CS] HTTP 지속 연결(Persistent Connection)의 등장 배경과 발전

 

 


 

 

 

HTTP는 본래 Connectionless

  • HTTP는 애플리케이션 계층의 프로토콜입니다.
  • 기본적으로는 Stateless하고, Connectionless한 방식으로 설계되었습니다.
    → 즉, 클라이언트가 요청을 보내면 서버는 응답 후 연결을 끊는 구조였습니다.

 

❗문제점(HTTP/1.0 기준)

클라이언트가 웹페이지를 요청하는 경우 : 

  1. index.html 요청 → 연결
  2. 서버 응답 → 연결 종료
  3. CSS 요청 → 다시 연결
  4. JS 요청 → 또 연결
  5. 이미지 요청들 → 각각 매번 연결

👉 하나의 페이지를 구성하는 수많은 리소스마다 연결이 반복

  • 오버헤드 증가 (연결 생성/해제 비용 큼)
  • 지연 시간(Latency) 증가
  • 서버/클라이언트의 리소스 낭비

이러한 문제점들에 대한 해결책 : HTTP 지속 연결이 도입되었습니다.

 

 

 


 

 

HTTP 지속연결(Persistent Connections)

정의 :

연결을 끊지 않고 재사용함으로써, 여러 HTTP 요청/응답을 같은 TCP 연결 위에서 처리하는 방식입니다.

 

 


 

 

HTTP/1.1의 Keep-Alive (Persistent Connections)

HTTP 지속연결이 적용된 HTTP 버전

 

특징 :

  • 기본적으로 연결을 유지하도록 설계되었습니다 (Keep-Alive가 기본)
  • 하나의 TCP 연결 위에서 여러 요청을 순차적으로 처리할 수 있습니다.
  • 클라이언트/서버가 `Connection: keep-alive` 헤더로 연결 유지 의사를 표현할 수 있습니다.

 

예시 :

GET /index.html HTTP/1.1  
Host: example.com  
Connection: keep-alive
  • 클라이언트가 이후에 CSS, JS, 이미지도 같은 연결로 계속 요청 가능 ✅
  • 일정 시간 동안 요청이 없으면 서버가 연결을 닫습니다.

 

장점 :

  • 연결 생성/해제 비용 감소
  • 리소스 로딩 속도 향상
  • 서버 부하 감소 (연결 수 제한이 줄어듦)

 

한계 :

  • 하나의 연결에서 요청을 순차적으로 처리하기 때문에, 앞선 요청이 끝날 때까지 다음 요청이 대기

 

한계에 대한 해결책 : 병렬처리 방식 (Multiplexing)

 

 


 

 

HTTP/2의 Multiplexing

정의 :

  • 하나의 TCP 연결에서 여러 요청을 동시에 병렬로 처리합니다.

 

특징 :

  • 각 요청/응답은 스트림(Stream)이라는 독립적인 단위로 전송
  • Head-of-Line blocking 문제 해결 (직렬 방식으로 인한 데이터 처리 지연)

 

장점 :

  • 병렬 처리 가능 → 페이지 로딩 속도 비약적으로 향상
  • 하나의 연결만 유지하면 됨 → 리소스 절약