[HTTP] HTTP 기본 알아보기
웹 개발을 하면서 HTTP에 대해 깊게 생각한 적이 없는 것 같다는 생각이 들었다. 이에 HTTP에 대해서 한번 제대로 알아보고자 한다. 오늘은 간단하게 HTTP는 무엇이고, 어떻게 동작하며 어떤 구조로 이루어져 있는지 간략하게 내용을 정리하고 이후로 시간이 날때마다 HTTP에 대해서 글을 작성해 나아가고자 한다.
HTTP란 무엇인가?
HTTP(HyperText Transfer Protocol) 는 웹 브라우저와 서버가 텍스트, 이미지, 영상 등 다양한 리소스를 주고받을 수 있게 해주는 애플리케이션 계층 프로토콜입니다. 우리가 웹 브라우저에서 주소를 입력하고 페이지를 보는 모든 과정은 HTTP 요청/응답 흐름으로 이루어 진다.
- 이미지 (
.jpg
,.png
) - 영상 (
.mp4
,.webm
) - 오디오 (
.mp3
,.wav
) - 파일 (
.pdf
,.zip
) - API 응답 (
JSON
,XML
)
HTTP는 모든 형태의 디지털 콘텐츠를 웹을 통해 전송하는 통로 역할을 한다.
1
2
3
4
5
6
7
8
9
10
11
[사용자]
↓
[애플리케이션 계층: HTTP]
↓
[전송 계층: TCP]
↓
[인터넷 계층: IP]
↓
[네트워크 액세스 계층: 이더넷, WiFi]
↓
[물리 계층: 전기 신호]
HTTP의 주요 특징
특징 | 설명 |
---|---|
무상태성(stateless) | 각 요청은 독립적이며, 이전 요청의 상태를 기억하지 않음. |
클라이언트-서버 구조 | 클라이언트(브라우저)는 요청하고, 서버는 응답을 제공. |
확장 가능 | 다양한 미디어 타입 지원, 헤더 확장 가능. |
텍스트 기반 프로토콜 | 메시지는 사람이 읽을 수 있는 텍스트로 구성. |
웹 클라이언트와 서버
웹 클라이언트는 사용자 입장에서 웹 서버에 요청을 보내고, 응답을 받아 정보를 보여주는 프로그램이다. 대표적인 웹 클라이언트는 웹 브라우저 인 Chrome, Safari 등이 있고 커맨드라인 도구인 curl, wget도 웹 클라이언트이다. 웹 서버는 클라이언트의 요청을 받아 적절한 리소스를 찾아서 응답하는 역할을 한다. 대표적인 웹 서버로 Apache HTTP Server, Nginx 등이 있다.
- 웹 클라이언트 역할
- 사용자의 요청을 HTTP 메시지로 변환
- 서버로부터 HTTP 응답을 받고 화면에 렌더링
- 웹 서버 역할
- 요청 파싱
- 리소스 탐색 및 처리
- 적절한 HTTP 응답 생성
- 로깅 및 보안 처리
클라이언트는 요청 생성, 사용자 인터페이스 역할을 수행하고 웹 서버는 요청 처리 및 리소스를 제공한다. 즉, 클라이언트는 요청 주체, 서버는 응답 주체 이다.
리소스
리소스(Resources)란 웹에서 식별되고 접근 가능한 모든 것을 의미한다. 웹 페이지, 이미지, 동영상, 문서, 스크립트 등이 포함되며 단순 파일에 국한되지 않고 동적으로 생성된 데이터도 포함된다.
- URL로 식별
: HTTP는 리소스를 직접 전속하는 것이 아닌 URL을 통해 식변된 리소스를 요청하고, 그에 대한 표현을 주고 받는다.
https://example.com/index.html
→ 정적 HTML 문서https://api.example.com/users/1
→ JSON 데이터 (REST API)
- 정적 리소스 VS 동적 리소스
구분 | 설명 |
---|---|
정적 리소스 | 서버에 저장된 그대로 반환되는 파일 (예: main.css ) |
동적 리소스 | 요청에 따라 서버에서 계산/생성되는 결과 (예: /api/orders ) |
트랜잭션
HTTP 트랜잭션(Transaction)이란, 하나의 요청(Request)와 응답(Response) 한쌍을 의미한다. 사용자가 어떤 리소스를 요청하면 클라이언트는 HTTP 요청 메시지를 서버에 보내고 서버는 요청을 처리하고 HTTP 응답 메시지를 돌려주는데 이 과정 하나가 HTTP 트랜잭션 이다.
메시지
HTTP 메시지(Message)는 텍스트 기반으로 구성된 데이터 전송 단위를 의미한다. 크게 두 가지의 메시지가 있다.
- 요청 메시지(Request Message): 클라이언트 → 서버
- 응답 메시지(Response Message): 서버 → 클라이언트
- 요청 메시지 구조
1
2
3
4
5
6
7
8
9
10
[요청 라인]
GET /index.html HTTP/1.1
[헤더]
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
[본문] ← (선택적, POST 등에서 사용)
name=chanho&age=25
- Request Line: 메서드, 리소스 경로, 프로토콜 버전
- Headers: 부가 정보 (클라이언트 정보, 언어, 인코딩 등)
- Body: 폼 데이터나 JSON 등 (GET에는 없음, POST에 사용)
- 응답 메시지 구조
1
2
3
4
5
6
7
8
9
[상태 라인]
HTTP/1.1 200 OK
[헤더]
Content-Type: text/html
Content-Length: 1024
[본문]
<html>...</html>
- Status Line: HTTP 버전, 상태 코드, 상태 메시지
- Headers: 서버 정보, 콘텐츠 타입, 캐싱 등
- Body: HTML, JSON, 이미지 등 리소스 자체
TCP 커넥션
HTTP는 애플리케이션 계층의 프로토콜이고, 전송 계층의 TCP(Transmission Control Protocol)를 사용해 데이터를 안정적으로 전달한다. 즉, HTTP는 TCP 위에서 동작한다.
- HTTP 요청/응답 메시지 → TCP 커넥션을 통해 전송
- TCP가 패킷 순서 보장, 재전송, 흐름 제어, 혼잡 제어를 담당
- TCP 연결 과정: 3-way Handshake
1
2
3
[클라이언트] ---- SYN ----> [서버]
[클라이언트] <--- SYN+ACK --- [서버]
[클라이언트] ---- ACK ----> [서버]
- SYN: 연결 요청
- SYN + ACK: 수락 + 응답
- ACK: 최종 확인
- 연결의 유지와 종료
HTTP/1.0은 기본적으로 요청 1건당 연결 1회로 비지속적 이였다. HTTP/1.1부터는 지속 연결(Keep-Alive)이 기본이며 연결 종료를 위해서 4-way handshake를 통해 종료 한다.
1
2
3
4
5
# TCP 커넥션 흐름
(1) TCP 연결 수립
(2) HTTP 요청 전송 (TCP로)
(3) HTTP 응답 수신 (TCP로)
(4) 연결 유지 or 종료
HTTP/2부터는 TCP연결 하나만으로 여러 요청을 동시 처리할 수 있게 되었으며, 이를 위해 스트림(Stream) 개념을 사용한다. 하지만 여전히 TCP 기반이며, 헤더 압축, 멀티플렉싱 등을 통해 성능 개선을 할 수 있다.
프로토콜 버전
버전 | 등장 시기 | 주요 특징 |
---|---|---|
HTTP/0.9 | 1991년 | 텍스트 기반, GET만 지원 |
HTTP/1.0 | 1996년 | 헤더 도입, 상태 코드, 콘텐츠 타입 도입 |
HTTP/1.1 | 1997년~ | 지속 연결(Keep-Alive), 파이프라이닝, 캐시 제어 |
HTTP/2 | 2015년 | 바이너리 프레이밍, 멀티플렉싱, 헤더 압축 |
HTTP/3 | 2022년~ | TCP 대신 QUIC 프로토콜 기반, 지연시간 감소 |
웹의 간략 구성요소
구성 요소 | 설명 |
---|---|
클라이언트(Client) | 사용자의 요청을 서버에 전달하고 결과를 보여주는 프로그램 (예: 브라우저) |
웹 서버(Web Server) | HTTP 요청을 받고, 리소스를 응답하는 시스템 |
프록시 서버(Proxy) | 클라이언트와 서버 사이에서 요청/응답을 중계, 필터링, 캐싱 |
캐시(Cache) | 자주 요청되는 리소스를 저장하여 속도 향상 |
게이트웨이(Gateway) | HTTP 트래픽을 다른 프로토콜로 변환해주는 서버 |
터널(Tunnel) | 보안 트래픽(HTTPS 등)을 통과시키는 연결 통로 |
DNS 서버 | 도메인 이름을 IP 주소로 변환하는 시스템 |
1
2
3
4
5
6
7
8
9
[클라이언트]
↓
[프록시 서버] ← (Option)
↓
[캐시 확인]
↓
[DNS 서버 통해 IP 확인]
↓
[웹 서버] ← (게이트웨이, 터널 등이 뒤에 있을 수 있음)
오늘은 HTTP의 기본 구조에 알아봤다. 다음 게시글 부터는 실제 웹 에서 HTTP가 어떻게 동작하는지에 대해서 작성할 예정이다.