[HTTP 완벽 가이드 정리] 01. HTTP: 웹의 기초 - 01. HTTP 개관
1장 HTTP 개관에서는 HTTP를 빠르게 훑어본다.
📝 핵심 요약
주제 | 요약 |
---|---|
HTTP | 인터넷의 공통 언어 |
클라이언트와 서버 | 클라이언트(브라우저) 요청(request) <-> 서버 응답(response) |
리소스 | 서버에 존재하는 모든 콘텐츠 (HTML, 이미지, 동영상, 동적 페이지 등) 정적/동적 모두 포함 |
MIME 타입 | 데이터 형식 |
URI (URL, URN) | 리소스 주소 (URL은 위치 기반, URN은 이름 기반) |
HTTP 메서드 | 리소스에 대한 동작 정의 |
HTTP 상태코드 | 서버 응답 결과 |
HTTP 메시지 구조 | 시작 줄(start line) + 헤더(header) + 바디(body) |
TCP/IP 연결 | HTTP는 TCP를 기반으로 동작 순서 보장, 무결성 보장, 보통 포트 80 |
아키텍처 구성요소 | 프록시(Proxy), 캐시(Cache), 게이트웨이(Gateway), 터널(Tunnel), 에이전트(Agent) |
1. HTTP란?
✅ 정의
HTTP(Hypertext Transfer Protocol)는 웹 상에서 클라이언트와 서버가 정보를 주고받을 때 사용하는 텍스트 기반 애플리케이션 계층 프로토콜
📌 특징
웹의 핵심 통신 규약
텍스트 기반으로 사람이 읽기 쉬움
TCP 위에서 작동 → 신뢰성 있는 데이터 전송
2. 웹 클라이언트와 서버
🖥️ 클라이언트 (Client)
- 요청을 보내는 주체 (예: 브라우저, Postman, curl)
🗄️ 서버 (Server)
- 요청을 받아 응답을 생성하는 주체 (예: Apache, Nginx, Spring Boot)
🔄 상호작용 흐름
사용자가 URL을 입력
브라우저가 요청 생성 → 서버에 전송
서버가 응답 생성 → 브라우저에 전송
브라우저가 응답 렌더링
3. 리소스 & MIME 타입
📦 리소스란?
서버에 존재하는 콘텐츠(정적 HTML, 이미지, JSON, 동영상 등)
정적/동적 모두 가능
🎨 MIME 타입
MIME(Multipurpose Internet Mail Extensions)은 원래 각기 다른 전자메일 시스템 사이에서 메시지가 오갈 때 겪는 문제점을 해결하기 위해 설계됨
콘텐츠의 형식을 나타냄
서버는 응답 시
Content-Type
헤더로 MIME 타입을 전달함
💡 MIME 타입 예시
MIME Type | 설명 |
---|---|
text/html | HTML 문서 |
image/jpeg | JPEG 이미지 |
application/json | JSON 데이터 |
브라우저는 MIME 타입을 기반으로 콘텐츠를 처리
4. URI (URL, URN)
🔍 URI (Uniform Resource Identifier)
- 리소스를 식별하는 모든 방식의 총칭
📍 URL (Locator)
위치를 기반으로 리소스를 식별
예:
http://example.com/index.html
📛 URN (Name)
이름으로 리소스를 식별 (위치와 무관)
예:
urn:isbn:1234567890
🧩 URL 구성
1
2
http://www.example.com:80/images/logo.png
└─[프로토콜]://[호스트]:[포트]/[경로]
오늘날 대부분의 URI는 URL
5. HTTP 메서드
💡 흔히 쓰이는 HTTP 메서드 예시
메서드 | 설명 | 예시 |
---|---|---|
GET | 리소스 조회 | 게시글 보기 |
POST | 데이터 생성/전송 | 회원가입 요청 |
PUT | 전체 리소스 수정 | 프로필 정보 덮어쓰기 |
DELETE | 리소스 삭제 | 댓글 삭제 |
HEAD | 헤더만 요청 | 리소스 존재 여부 확인 |
6. 상태 코드
💡 흔히 쓰이는 HTTP 상태 코드 예시
코드 | 의미 | 설명 |
---|---|---|
200 | OK | 요청 성공 처리 |
302 | Found | 임시 리디렉션 |
404 | Not Found | 리소스 없음 |
500 | Internal Server Error | 서버 내부 오류 |
클라이언트는 이 코드를 기반으로 처리 흐름을 결정
7. HTTP 메시지 구조
🧩 구성 요소
시작줄: 요청 또는 응답의 첫 줄로, 요청 시 무엇을 해야 하는지 응답 시 무슨 일이 일어났는지 나타냄
헤더: 키-값 형식의 메타데이터 (예:
Content-Type
,User-Agent
)본문: 실제 데이터 (옵션)
💡 예시
1
2
3
GET /tools.html HTTP/1.1
Host: www.joes-hardware.com
Accept: text/html
💡 실제 요청 원본 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
GET /posts/http-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-%EC%A0%95%EB%A6%AC-01-http-%EC%9B%B9%EC%9D%98-%EA%B8%B0%EC%B4%88-01-http-%EA%B0%9C%EA%B4%80/ HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ko-KR,ko;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Host: localhost:4000
Pragma: no-cache
Referer: http://localhost:4000/
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
sec-ch-ua: "Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
💡 실제 응답 원본 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HTTP/1.1 200 OK
Etag: 157e0af-a40b-6801e5b2
Content-Type: text/html; charset=utf-8
Content-Length: 41995
Last-Modified: Fri, 18 Apr 2025 05:40:02 GMT
Cache-Control: private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate
Server: WEBrick/1.9.1 (Ruby/3.4.1/2024-12-25)
Date: Fri, 18 Apr 2025 05:53:13 GMT
Connection: Keep-Alive
// 응답 본문
<!doctype html>
<html lang="ko">
...
</html>
8. TCP/IP와 HTTP
🧱 HTTP 네트워크 프로토콜 스택
1
2
3
4
5
[HTTP] - Application Layer
[TCP] - Transport Layer
[IP] - Network Layer
[네트워크를 위한 링크 인터페이스] - Data Link Layer
[물라적인 네트워크 하드웨어] - Physical Layer
🔐 TCP의 특성
데이터 손실 없음
전송 순서 보장
연결형 통신
🛠️ TCP의 주요 기능
신뢰성 보장: 데이터 손실/중복 없이 전송
순서 보장: 받은 순서 = 보낸 순서
흐름 제어: 수신자가 감당 가능한 속도로 전송
혼잡 제어: 네트워크 상태에 따라 전송량 조절
HTTP는 TCP의 안정성 위에서 동작 하며, 데이터를 ‘어떻게 보낼지’는 TCP에게 맡기고, 자신은 ‘무엇을 보낼지’에 집중하는 고수준 프로토콜
9. 요청/응답 흐름 요약
URL 입력
DNS 조회 → IP 주소 획득
포트 번호 확인 (기본 80)
TCP 연결 수립
HTTP 요청 전송
서버 응답 수신
연결 종료 및 렌더링
10. 아키텍처 구성 요소
구성요소 | 역할 | 예시 |
---|---|---|
Proxy | 중계 서버 | 보안 필터링, 로깅 |
Cache | 리소스 저장 | CDN, 브라우저 캐시 |
Gateway | 프로토콜 변환 | HTTP → FTP |
Tunnel | 암호화 통신 중계 | HTTPS 통신 |
Agent | 자동화 클라이언트 | 검색 엔진 크롤러 |