본문으로 건너뛰기

🌐 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는 웹 개발의 가장 기초가 되는 프로토콜입니다. 이 시리즈를 통해 HTTP의 핵심 개념을 차근차근 익혀보세요!

다음 단계: HTTP 메서드를 읽어보며 GET, POST 등의 메서드를 자세히 알아보세요.