HTTP란?
HTTP(HyperText Transfer Protocol)는 웹 브라우저와 웹 서버가 통신할 때 사용하는 프로토콜입니다. 텍스트, 이미지, 동영상 등 다양한 데이터를 클라이언트(주로 브라우저)와 서버 간에 주고받는 데 사용됩니다. 현재는 HTTP/1.1, HTTP/2, 그리고 HTTP/3 같은 최신 버전으로 발전해 왔습니다.
1. HTTP의 주요 특징
-
비연결성(Stateless)
- 각 요청과 응답은 독립적입니다.
- 서버는 이전 요청의 상태를 유지하지 않으므로 클라이언트가 매 요청마다 필요한 정보를 전달해야 합니다.
-
무상태성(Stateless)
- 서버는 클라이언트와의 상태를 기억하지 않습니다.
- 상태 유지를 위해 쿠키, 세션, JWT 등을 사용합니다.
-
TCP/IP 기반
- HTTP는 TCP/IP 프로토콜 위에서 동작합니다.
- 클라이언트와 서버 간 연결이 필요한 경우 TCP로 연결을 설정한 뒤 데이터를 전송합니다.
-
유연성
- 텍스트, 이미지, JSON, XML 등 다양한 형식의 데이터를 전송할 수 있습니다.
- 확장성이 뛰어나 다양한 애플리케이션에서 사용 가능합니다.
2. HTTP 요청(Request)
구조
- HTTP 메서드: 요청의 목적을 정의 (GET, POST, PUT, DELETE 등)
- URL: 요청 대상의 위치 (예:
/api/users
)
- HTTP 버전: 사용된 HTTP 프로토콜 버전 (예: HTTP/1.1)
- 헤더(Header): 요청에 대한 추가 정보를 전달
- 본문(Body): POST, PUT 요청 등에서 데이터 전달
예시
GET /api/products HTTP/1.1
Host: example.com
Accept: application/json
3. HTTP 응답(Response)
구조
- HTTP 상태 코드(Status Code): 요청 처리 결과를 숫자로 표현
- 헤더(Header): 응답에 대한 메타데이터 (예:
Content-Type
)
- 본문(Body): 클라이언트가 요청한 데이터
예시
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "Laptop",
"price": 1000
}
주요 상태 코드
- 1xx (정보): 요청을 처리 중 (거의 사용되지 않음)
- 2xx (성공): 요청 성공
- 3xx (리다이렉션): 클라이언트가 다른 위치로 이동해야 함
- 301: 영구 리다이렉션
- 302: 임시 리다이렉션
- 4xx (클라이언트 오류): 요청에 문제가 있음
- 400: 잘못된 요청
- 401: 인증 필요
- 404: 리소스를 찾을 수 없음
- 5xx (서버 오류): 서버가 요청을 처리하지 못함
- 500: 내부 서버 오류
- 503: 서비스 이용 불가
4. HTTP 메서드
-
GET
-
POST
-
PUT
- 리소스를 업데이트 (전체)
- 기존 데이터가 있으면 덮어씀
-
PATCH
-
DELETE
-
HEAD
- GET과 유사하지만 본문 없이 응답 헤더만 반환
-
OPTIONS
5. HTTP와 HTTPS의 차이
구분 | HTTP | HTTPS |
---|
보안 | 데이터를 암호화하지 않음 | 데이터를 SSL/TLS로 암호화 |
포트 | 80번 사용 | 443번 사용 |
속도 | 더 빠름 | 암호화로 인해 약간 느림 |
URL | http:// | https:// |
6. HTTP의 버전별 특징
-
HTTP/1.1
- 현재 가장 널리 사용됨
- Keep-Alive 지원 (연결 재사용 가능)
- 요청/응답이 순차적으로 처리됨
-
HTTP/2
- 멀티플렉싱: 하나의 연결에서 다수 요청 처리 가능
- 헤더 압축 지원으로 전송 효율 향상
-
HTTP/3
- UDP 기반 QUIC 프로토콜 사용
- 연결 설정 및 데이터 전송 속도 향상
7. HTTP 요청과 응답의 과정
-
클라이언트 요청:
- 브라우저에서 URL 입력 → HTTP 요청 전송
-
DNS 조회:
-
서버 연결:
-
서버 요청 처리:
-
응답 생성 및 반환:
- 상태 코드, 데이터와 함께 HTTP 응답 반환
-
결과 렌더링:
- 브라우저가 응답 데이터를 받아 사용자 화면에 표시
HTTP는 현대 웹의 근간을 이루는 프로토콜로, 다양한 클라이언트와 서버 간의 효율적이고 확장 가능한 데이터 교환을 가능하게 합니다.
추가 학습 자료