목차
HTTP는 본래 Connectionless
- HTTP는 애플리케이션 계층의 프로토콜입니다.
- 기본적으로는 Stateless하고, Connectionless한 방식으로 설계되었습니다.
→ 즉, 클라이언트가 요청을 보내면 서버는 응답 후 연결을 끊는 구조였습니다.
❗문제점(HTTP/1.0 기준)
클라이언트가 웹페이지를 요청하는 경우 :
- index.html 요청 → 연결
- 서버 응답 → 연결 종료
- CSS 요청 → 다시 연결
- JS 요청 → 또 연결
- 이미지 요청들 → 각각 매번 연결
👉 하나의 페이지를 구성하는 수많은 리소스마다 연결이 반복됨
- 오버헤드 증가 (연결 생성/해제 비용 큼)
- 지연 시간(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 문제 해결 (직렬 방식으로 인한 데이터 처리 지연)
장점 :
- 병렬 처리 가능 → 페이지 로딩 속도 비약적으로 향상
- 하나의 연결만 유지하면 됨 → 리소스 절약
'CS' 카테고리의 다른 글
[CS] Servlet: 개념, 동작 순서, 그리고 Container (0) | 2025.05.08 |
---|---|
[CS] Web Server와 WAS, 각각의 역할 이해하기 (0) | 2025.05.07 |
[CS] Connection & Connectionless (0) | 2025.05.06 |
[CS] 서버 상태 관리의 두 방식: Stateless와 Stateful (0) | 2025.05.06 |
[CS] 서버 성능 향상 전략: Scale Up과 Scale Out (0) | 2025.05.06 |