HTTP 프로토콜의 특성과 역사적 발전 과정

HTTP는 인터넷 상에서 데이터를 주고받기 위한 애플리케이션 계층의 프로토콜로, 무상태(stateless)와 비연결성(connectionless)이라는 핵심 특성을 가지고 있으며 HTTP/0.9부터 HTTP/3까지 지속적으로 발전해왔다.



HTTP 프로토콜의 기본 특성

HTTP(HyperText Transfer Protocol)는 인터넷 상에서 데이터를 주고받기 위한 애플리케이션(응용) 계층의 프로토콜이다. TCP/IP 프로토콜 스택 위에서 동작하며, 웹 브라우저와 웹 서버 간의 통신을 담당한다.



무상태 프로토콜(Stateless)

HTTP의 가장 큰 특징 중 하나는 무상태(Stateless) 프로토콜이라는 점이다. 이는 서버가 클라이언트의 상태를 보존하지 않는다는 의미이다.

상태 유지(Stateful) vs 무상태(Stateless) 비교:
- 상태 유지: 거래 중간에 다른 점원으로 바뀌면 안됨
- 무상태: 거래 중간에 다른 점원으로 바뀌어도 됨


무상태 프로토콜의 장점:

  • 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다 (스케일아웃 용이)
  • 응답 서버를 쉽게 바꿀 수 있어 장애 발생 시 서버 교체가 간단하다
  • 서버 확장성이 높아진다

무상태 특성으로 인해 서버는 클라이언트의 이전 요청을 기억하지 않아도 되므로, 더 많은 클라이언트를 처리할 수 있다.


그러나 실무에서는 “로그인”과 같이 상태 유지가 필요한 경우가 있어, 쿠키와 세션 등의 기술을 통해 이를 보완한다.



비연결성(Connectionless)

HTTP는 기본적으로 연결을 유지하지 않는 모델을 사용한다. 클라이언트가 요청을 보내고 서버가 응답을 마치면 연결을 종료한다.

비연결성의 장점:

  • 서버 자원을 매우 효율적으로 사용할 수 있다
  • 불필요한 연결을 유지하지 않아 서버 리소스를 절약한다

비연결성의 단점:

  • 매 요청마다 TCP 3-way handshake를 수행해야 해서 연결 설정에 시간이 소요된다


이러한 단점을 보완하기 위해 HTTP 지속 연결(Persistent Connections)이 도입되었다. 지속 연결을 통해 연결 시간이 0.9초에서 0.5초로 단축되는 효과를 얻을 수 있다.

예시 그림:

image-20250418173940973



HTTP 메시지

HTTP 통신은 요청과 응답으로 이루어지며, 각각의 메시지는 특정 구조를 가진다.

HTTP 메시지 구조:
- 시작 라인 (요청 라인 또는 상태 라인)
- 헤더
- 빈 줄 (CRLF)
- 메시지 본문

HTTP 메시지는 RFC7230 등의 공식 스펙에 정의되어 있으며, 텍스트 기반으로 사람이 읽을 수 있는 형태로 구성된다.

공식 스펙: https://tools.ietf.org/html/rfc7230#section-3

image-20250418174018579



HTTP의 역사적 발전 과정

HTTP는 웹의 발전과 함께 지속적으로 진화해왔다. 각 버전마다 새로운 기능과 성능 개선이 이루어졌다.

HTTP/0.9 (1991년): 초기 HTTP 버전으로, 매우 단순한 형태였다.

  • GET 메서드만 지원
  • HTTP 헤더가 없었음
  • HTML 파일만 전송 가능

HTTP/1.0 (1996년): 기능이 크게 확장된 버전이다.

  • 다양한 메서드(POST, HEAD 등) 추가
  • 헤더 개념 도입
  • 상태 코드 도입
  • Content-Type을 통한 다양한 문서 형식 지원

HTTP/1.1 (1997년): 현재 가장 널리 사용되는 버전으로, 많은 개선사항이 도입되었다.

  • 지속 연결(Persistent Connections) 도입
  • 파이프라이닝(Pipelining) 추가
  • 호스트 헤더 추가로 가상 호스팅 지원
  • 캐싱 메커니즘 개선

HTTP/1.1은 RFC2068(1997), RFC2616(1999), RFC7230~7235(2014) 등을 통해 지속적으로 발전해왔다.


HTTP/2 (2015년): 성능 개선에 초점을 맞춘 버전이다.

  • 바이너리 프로토콜로 변경
  • 멀티플렉싱(Multiplexed Streams) 지원
  • 헤더 압축(HPACK) 도입
  • 서버 푸시 기능 추가

HTTP/3 (진행 중): TCP 대신 UDP 기반의 QUIC 프로토콜을 사용하는 버전이다.

  • 연결 설정 시간 단축
  • 패킷 손실에 더 효율적으로 대응
  • 멀티플렉싱 개선



HTTP/1.1과 HTTP/2 비교

두 버전 간의 주요 차이점을 살펴보면 HTTP/2가 어떻게 성능을 개선했는지 이해할 수 있다.

HTTP/1.1의 한계

  • 하나의 연결당 하나의 요청/응답만 처리 가능
  • HOL Blocking(Head-of-Line Blocking): 앞선 요청의 응답이 지연되면 뒤의 모든 요청도 지연됨
  • RTT(Round-Trip Time) 증가: 요청마다 왕복 시간이 발생하여 지연 증가
  • 헤더 크기의 비대화: 쿠키 등 메타데이터로 인해 헤더가 비대해짐

HTTP/2의 개선점

  • Multiplexed Streams: 하나의 연결로 여러 개의 메시지를 동시에 주고받을 수 있음
  • Stream Prioritization: 요청 리소스 간 의존관계를 설정하여 중요한 리소스를 우선적으로 처리
  • Header Compression: HPACK 압축 방식을 이용하여 헤더 정보를 압축 전송
  • Server Push: 클라이언트 요청 없이도 서버가 필요한 리소스를 미리 전송 가능

HTTP/2의 핵심 개선점은 하나의 TCP 연결에서 여러 요청과 응답을 병렬로 처리할 수 있다는 점이다.

이러한 개선으로 HTTP/2는 페이지 로딩 시간을 약 14% 정도 단축시킬 수 있다고 알려져 있다.


HTTP 프로토콜은 웹의 기반 기술로서 계속 발전하고 있으며, 각 버전의 특성을 이해하는 것은 효율적인 웹 애플리케이션 개발에 필수적이다.

댓글남기기