HTTP
- 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 통해 HTTP 프로토콜의 특징과 구조, Stateless와 Connectionless 개념, HTTP 메시지 구조를 정리함
HTTP 개념
HTTP란?
- HTTP (HyperText Transfer Protocol)
- 거의 모든 형태의 데이터 전송 가능

-
HTTP 전송 가능 데이터
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
- 서버간 통신도 HTTP 사용
버전별 특징
| HTTP 버전 | 전송 계층 | 특징 |
|---|---|---|
| HTTP/1.1 | TCP | 가장 많이 사용, 기본 기능 완성 |
| HTTP/2 | TCP | 성능 개선, 대부분의 기능 호환 |
| HTTP/3 | UDP (QUIC) | 속도 향상, 연결 개선 |
클라이언트-서버 구조
Request-Response 구조

역할 분리

- 각자 독립적으로 발전 가능
- 클라이언트는 UI/UX에 집중
- 서버는 비즈니스 로직과 데이터에 집중
Stateful과 Stateless
기본 개념
- Stateful (상태 유지)
- 서버가 클라이언트의 상태를 보관
- Stateless (무상태)
- 서버가 클라이언트의 상태를 보관하지 않음

Stateful과 Stateless 비교
| Stateful | Stateless | |
|---|---|---|
| 상태 보관 | 서버가 보관 | 서버가 보관하지 않음 |
| 서버 선택 | 항상 같은 서버 | 아무 서버나 가능 |
| 서버 확장 | 어려움 | 쉬움 (무한 확장) |
| 장애 대응 | 어려움 | 쉬움 |
| 데이터 전송량 | 적음 | 많음 (추가 정보 전달) |
Stateful - 상태 유지
-
정상 동작

-
서버 장애 발생 시 (중간에 서버 변경)

Stateless - 무상태
-
서버 변경에도 정상 동작

-
확장성
- 응답 서버를 쉽게 바꿀 수 있음
- 서버를 무한히 증설할 수 있음
- 스케일 아웃 가능 (수평 확장)

실무 설계

-
Stateless 원칙
- 최대한 무상태로 설계
- 불가피한 경우만 상태 유지
-
상태 유지가 필요한 경우
- 로그인
- 장바구니
- 사용자별 개인화 데이터
-
상태 관리 방법
- 브라우저 쿠키
- 서버 세션
- 토큰 방식 (JWT 등)
-
상태 유지는 최소한만 사용
비연결성 (Connectionless)
연결 유지 방식

-
연결 유지의 문제점
- 서버는 연결을 계속 유지
- 서버 자원 (메모리, CPU) 낭비
- 동시 접속자 수가 많으면 문제 발생
비연결성 모델

-
비연결성의 장점
- 응답 후 연결 종료
- 서버 자원을 효율적으로 사용
- 동시 접속자 수 증가에 유리
-
장점
- HTTP는 기본적으로 연결을 유지하지 않음
- 서버 자원을 효율적으로 사용
- 1시간에 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 소량
- ex) 웹 브라우저에서 검색 버튼을 누르는 시간
-
단점
- TCP/IP 연결을 새로 맺어야 함
- 3 way handshake 시간 추가
- 웹 브라우저로 사이트를 요청하면 HTML 외 JavaScript, CSS, 이미지 등 수많은 자원이 함께 다운로드
HTTP 지속 연결 (Persistent Connections)

-
장점
- 한 번 맺은 연결 재사용 (연결 시간 절약)
- 여러 리소스를 효율적으로 다운로드
- HTTP/2, HTTP/3에서 더 많은 최적화
HTTP 메시지
HTTP 메시지 구조

-
공식 스펙 (RFC 7230)
1 2 3 4
HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body ]
HTTP 요청 메시지
1
2
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com

HTTP 응답 메시지
1
2
3
4
5
6
7
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>

start-line
-
HTTP 메서드
메서드 용도 설명 GET 리소스 조회 서버에 전달할 데이터는 쿼리 파라미터 사용 POST 요청 데이터 처리 메시지 바디를 통해 서버로 데이터 전송 PUT 리소스 대체 해당 리소스가 없으면 생성 PATCH 리소스 부분 변경 리소스의 일부만 변경 DELETE 리소스 삭제 리소스를 제거 HEAD 메타데이터 조회 GET과 동일하지만 body 없이 헤더만 조회 OPTIONS 통신 옵션 조회 대상 리소스의 통신 옵션 확인 
-
HTTP 상태 코드

코드 메시지 설명 200 OK 요청 성공 201 Created 요청 성공, 새로운 리소스 생성 400 Bad Request 잘못된 요청 401 Unauthorized 인증 필요 403 Forbidden 권한 없음 404 Not Found 리소스를 찾을 수 없음 500 Internal Server Error 서버 내부 오류 503 Service Unavailable 서비스 이용 불가
HTTP 헤더 (Header)
-
분류
- HTTP 헤더 주요 유형

- 주요 헤더
헤더 설명 예시 Host 요청 대상 호스트 Host: www.google.com Content-Type 표현 데이터 형식 Content-Type: text/html Content-Length 표현 데이터 길이 Content-Length: 3423 User-Agent 클라이언트 정보 User-Agent: Mozilla/5.0 Server 서버 정보 Server: Apache/2.4 Authorization 인증 정보 Authorization: Bearer token Cache-Control 캐시 제어 Cache-Control: no-cache
연습 문제
-
HTTP/1.1과 HTTP/2, HTTP/3의 주요 차이점을 가장 잘 설명한 것은 무엇일까요?
a. 기본 기능 완성과 성능 개선
- HTTP/1.1에서 대부분의 기본 기능이 확립되었고, HTTP/2와 HTTP/3는 주로 통신 성능을 향상시키는 데 중점을 둠
-
HTTP 클라이언트-서버 구조에서, 클라이언트와 서버의 역할을 분리함으로써 얻는 가장 큰 이점은 무엇일까요?
a. 각자의 독립적 확장 및 진화 용이
- 클라이언트는 UI/UX에, 서버는 비즈니스 로직과 데이터에만 집중하여 각자 독립적으로 발전시킬 수 있음
-
HTTP ‘무상태(Stateless)’ 프로토콜이라는 것은 무엇을 의미하나요?
a. 서버가 클라이언트의 상태를 별도로 유지하지 않음
- Stateless는 서버가 클라이언트의 이전 요청 정보를 별도로 관리하거나 기억하지 않는다는 특성을 의미
-
HTTP의 무상태(Stateless) 방식이 서버 시스템 구조 설계에 주는 가장 큰 장점은 무엇일까요?
a. 서버 확장 용이
- 서버가 클라이언트 상태를 몰라도 되므로, 서버를 무한히 증설하고 유연하게 운영할 수 있음
-
HTTP 통신이 기본적으로 비연결성일 때 발생할 수 있는 성능상 단점을 보완하기 위해 주로 사용되는 방식은 무엇인가요?
a. 지속 연결(Persistent Connections) 사용
- 매 요청마다 연결을 새로 맺는 오버헤드를 줄이기 위해, 한 번 맺은 연결로 여러 요청과 응답을 처리하는 지속 연결을 사용
요약 정리

-
HTTP Stateless 프로토콜
- 서버가 클라이언트 상태를 보관하지 않음
- 서버 확장성 높음
- 데이터 전송량 증가
-
HTTP 버전
- HTTP/1.1이 가장 많이 사용
- HTTP/2는 성능 개선
- HTTP/3는 UDP 기반
-
HTTP 메시지 구조
- start-line (요청 라인 또는 상태 라인)
- header (헤더)
- empty line (공백 라인)
- message body (메시지 바디)
-
클라이언트-서버 구조
- Request-Response 패턴
- 역할 분리로 독립적 발전
-
비연결성
- 연결 유지 안 함
- 서버 자원 효율적 사용