🌐 HTTP란?
📖 정의
**HTTP (HyperText Transfer Protocol)**는 웹에서 데이터를 주고받기 위한 프로토콜입니다. 클라이언트(브라우저)와 서버 간의 통신 규칙을 정의하며, 웹의 근간이 되는 기술입니다.
🎯 비유로 이해하기
우편 시스템
HTTP를 우편 시스템에 비유하면:
편지 보내기 (HTTP Request)
├─ 보내는 사람: 클라이언트 (브라우저)
├─ 받는 사람: 서버
├─ 편지 내용: 요청 데이터
└─ 우편 규칙: HTTP 프로토콜
답장 받기 (HTTP Response)
├─ 보내는 사람: 서버
├─ 받는 사람: 클라이언트
├─ 답장 내용: 응답 데이터
└─ 상태: 성공/실패
레스토랑 주문
고객 (클라이언트)
↓ 메뉴판 보기 (GET 요청)
웨이터 (HTTP)
↓ 주문 전달
주방 (서버)
↓ 음식 준비
웨이터 (HTTP)
↓ 음식 전달 (응답)
고객 (클라이언트)
💡 HTTP의 핵심 개념
요청과 응답
클라이언트 ────요청(Request)───→ 서버
←───응답(Response)────
요청 (Request)
- 클라이언트가 서버에게 무엇을 원하는지 전달
- 메서드, URL, 헤더, 바디로 구성
응답 (Response)
- 서버가 클라이언트의 요청에 대한 결과 전달
- 상태 코드, 헤더, 바디로 구성
HTTP의 특징
1. 무상태성 (Stateless)
├─ 각 요청은 독립적
├─ 이전 요청을 기억하지 않음
└─ 쿠키/세션으로 상태 관리
2. 클라이언트-서버 구조
├─ 역할 분리
├─ 클라이언트: UI/UX
└─ 서버: 데이터/비즈니스 로직
3. 무연결성 (Connectionless)
├─ 요청-응답 후 연결 종료
├─ 서버 리소스 절약
└─ Keep-Alive로 개선 가능
📚 시리즈 문서
이 시리즈는 HTTP의 핵심 개념을 단계별로 다룹니다:
1. HTTP 메서드
GET, POST, PUT, DELETE 등
- HTTP 메서드의 종류와 용도
- RESTful API 설계
- 멱등성과 안전성
- 실전 예제
2. HTTP 상태 코드
200, 404, 500 등
- 2xx (성 공), 4xx (클라이언트 오류), 5xx (서버 오류)
- 각 상태 코드의 의미
- 실무에서 자주 보는 코드
- 에러 처리 방법
3. HTTP 헤더
요청/응답 헤더
- 헤더의 역할과 종류
- Content-Type, Authorization 등
- CORS 관련 헤더
- 캐싱 헤더
4. 쿠키와 세션
상태 관리
- HTTP의 무상태성 극복
- 쿠키의 동작 원리
- 세션 vs 토큰
- 보안 고려사항
🔍 HTTP의 진화
HTTP/0.9 (1991)
├─ GET 메서드만 지원
└─ HTML만 전송
HTTP/1.0 (1996)
├─ 헤더 개념 도입
├─ POST, HEAD 추가
└─ 상태 코드 도입
HTTP/1.1 (1997)
├─ Keep-Alive 기본
├─ 파이프라이닝
├─ PUT, DELETE 등 추가
└─ 호스트 헤더 필수
HTTP/2 (2015)
├─ 바이너리 프로토콜
├─ 멀티플렉싱
├─ 헤더 압축
└─ 서버 푸시
HTTP/3 (2022)
├─ QUIC 기반 (UDP)
├─ 더 빠른 연결
└─ 패킷 손실에 강함
💡 실제 예시
웹 페이지 로딩
1. 브라우저에서 URL 입력
https://example.com
2. DNS 조회
example.com → 93.184.216.34
3. HTTP 요청 생성
GET / HTTP/1.1
Host: example.com
User-Agent: Chrome/120.0
4. 서버 응답
HTTP/1.1 200 OK
Content-Type: text/html
<html>...</html>
5. 브라우저 렌더링
화면에 웹 페이지 표시
API 호출 예시
# GET 요청 - 데이터 조회
curl https://api.example.com/users
# POST 요청 - 데이터 생성
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "홍길동"}'
# PUT 요청 - 데이터 수정
curl -X PUT https://api.example.com/users/1 \
-H "Content-Type: application/json" \
-d '{"name": "김철수"}'
# DELETE 요청 - 데이터 삭제
curl -X DELETE https://api.example.com/users/1
🤔 자주 묻는 질문
Q1. HTTP vs HTTPS 차이는?
A:
HTTP (Port 80)
├─ 평문 통신
├─ 보안 취약
└─ http://
HTTPS (Port 443)
├─ SSL/TLS 암호화
├─ 데이터 보호
├─ 인증서 필요
└─ https://
주요 차이:
- HTTPS는 데이터를 암호화하여 전송
- 중간자 공격 방지
- 검색 엔진 최적화(SEO)에 유리
- 현대 웹의 표준
Q2. HTTP는 왜 무상태인가?
A:
무상태성의 이유:
1. 확장성
├─ 서버가 상태를 저장하지 않음
├─ 여러 서버로 분산 가능
└─ 로드 밸런싱 용이
2. 단순성
├─ 각 요청이 독립적
├─ 서버 구현이 간단
└─ 장애 복구 쉬움
3. 리소스 절약
├─ 메모리 사용 최소화
└─ 동시 처리 효율적
상태 관리 방법:
- 쿠키
- 세션
- 토큰 (JWT)
- 로컬 스토리지
Q3. REST API와 HTTP의 관계는?
A:
REST (Representational State Transfer)
├─ HTTP를 기반으로 한 아키텍처 스타일
├─ HTTP 메서드를 CRUD에 매핑
└─ 리소스 중심 설계
HTTP 메서드와 CRUD:
GET → Read (조회)
POST → Create (생성)
PUT → Update (전체 수정)
PATCH → Update (부분 수정)
DELETE → Delete (삭제)
RESTful API 예시:
GET /users - 사용자 목록 조회
GET /users/1 - 특정 사용자 조회
POST /users - 새 사용자 생성
PUT /users/1 - 사용자 정보 수정
DELETE /users/1 - 사용자 삭제
🎓 학습 순서 추천
1단계: 기초 개념
├─ HTTP란? (현재 문서)
├─ 요청/응답 구조
└─ 클라이언트-서버 모델
2단계: HTTP 메서드
├─ GET, POST, PUT, DELETE
├─ 각 메서드의 용도
└─ RESTful 설계
3단계: 상태 코드
├─ 2xx, 4xx, 5xx의 의미
├─ 자주 보는 코드
└─ 에러 처리
4단계: 헤더
├─ 요청/응답 헤더
├─ Content-Type
└─ 인증 헤더
5단계: 상태 관리
├─ 쿠키와 세션
├─ 토큰 기반 인증
└─ 보안 고려사항
🔗 관련 문서
- 브라우저는 어떻게 동작하나요? - HTTP가 브라우저에서 어떻게 사용되는지
- API란? - HTTP 기반 API의 개념
- HTTPS란? - HTTP의 보안 버전
- CORS란? - HTTP의 교차 출처 정책
🎬 마치며
HTTP는 웹 개발의 가장 기초가 되는 프로토콜입니다. 이 시리즈를 통해 HTTP의 핵심 개념을 차근차근 익혀보세요!
다음 단계: HTTP 메서드를 읽어보며 GET, POST 등의 메서드를 자세히 알아보세요.