02. HTTP (웹의 대화법)
"식당(Server)에 들어갔다고 끝이 아닙니다. '정확한 규칙'으로 주문해야 음식이 나옵니다."
1. Why: 약속(Protocol)이 필요한 이유
01강에서 우리는 식당(IP)을 찾아가서 자리에 앉았습니다. 이제 주방장에게 요리를 시켜야 하는데, "이거 줘", "저거 줘"라고 반말을 하거나 마음대로 말하면 주방장이 못 알아듣습니다.
그래서 전 세계 모든 브라우저와 서버는 HTTP (HyperText Transfer Protocol)라는 공통의 대화 규칙을 따릅니다.
| 역할 | 비유 (식당) | 설명 |
|---|---|---|
| Request | 주문서 📝 | 손님(브라우저)이 종업원(서버)에게 제출하는 양식 |
| Response | 영수증 & 음식 🥘 | 종업원이 결과와 함께 가져오는 응답 |
2. Request: 주문서 뜯어보기 (Header vs Body)
HTTP라는 봉투는 크게 두 부분으로 나뉩니다. 이 구조는 나중에 API를 만들 때 매우 중요합니다.
(1) Header (봉투 겉면: 메타 정보)
- 내용: 보내는 사람 주소, 받는 사람 주소, 우표, "저 크롬 브라우저예요(User-Agent)" 같은 정보.
- 특징: 실제 데이터는 아니지만 배달에 꼭 필요한 정보들입니다.
(2) Body (봉투 속 편지지: 실제 데이터)
- 내용: "아이디: admin", "비밀번호: 1234", "게시글 내용" 등.
- 특징: 겉으로 드러나지 않고 봉투 안에 숨겨져 있습니다.
3. Method: 주문하는 태도 (GET vs POST)
서버에게 요청할 때, "동사(Verb)"를 사용하여 의도를 명확히 해야 합니다.
| 방식 | 동사 | 의미 | 비유 | 특징 |
|---|---|---|---|---|
| GET | 달라 | 조회 (Read) | 투명 엽서 📨 | 데이터가 주소창(URL)에 다 보임. (?query=아이폰) |
| POST | 해줘 | 처리 (Action) | 밀봉 봉투 ✉️ | 데이터가 Body에 숨겨짐. (로그인, 글쓰기) |
면접 질문: 로그인할 때 GET을 쓰면 안 되나요?
GET은 주소창에 정보가 남습니다. 비밀번호가 주소창에 다 보이면 뒤에 서 있는 사람이 다 보겠죠? 그래서 숨겨서 보내는 POST를 써야 합니다.
4. Response: 주방장의 기분 (Status Code)
서버는 구구절절 말하지 않습니다. 세 자리 숫자 코드로 결과를 통보합니다.
- 200 OK (초록불 🟢): "주문 성공! 여기 음식 나왔습니다."
- 400 Bad Request: "손님, 주문서 양식이 틀렸는데요?" (사용자 잘못)
- 404 Not Found: "그런 메뉴는 없는데요?" (주소 틀림)
- 500 Server Error (빨간불 🔴): "으악! 주방장이 배탈 났어요." (서버 개발자 잘못 - 여러분이 보게 될 에러)
5. HTTPS: 자물쇠 채운 트럭
01강에서 본 Packet은 사실 누구나 중간에서 가로채서 뜯어볼 수 있습니다. (HTTP)
그래서 요즘은 방탄 조끼를 입힌 트럭(HTTPS)을 씁니다.
- HTTP: 투명 봉투. 배달부(해커)가 내용을 볼 수 있음.
- HTTPS (Secure): 암호화된 봉투. 중간에 가로채도
x8f@#$1같은 외계어만 보임.
6. Visible Thinking: 암호문 해석하기 (Header 실습)
01강에서는 파일이 도착하는 순서(Waterfall)를 봤다면, 이번에는 도착한 파일의 송장(Header)을 뜯어봅시다. 개발자 도구와 AI가 있으면 암호를 해독할 수 있습니다.
🧠 AI Native Activity: 헤더 분석
- 개발자 도구(
F12) -> Network 탭 클릭. F5를 눌러 목록을 띄우고, 맨 위(가장 첫 번째) 파일을 클릭합니다.- 오른쪽에 나오는 Headers 탭의 내용을 드래그해서 복사(
Ctrl+C)합니다. - AI에게 물어보세요.
Prompt
이건 개발자 도구에서 가져온 HTTP Response Header야.
[붙여넣기]
- 서버가 보낸 응답 코드(Status Code)는 몇 번이고, 무슨 뜻이야?
Content-Type을 보니 서버가 나한테 뭘 줬다고 해? (HTML? JSON?)Server정보를 보니 상대방은 어떤 기술(Nginx? Cloudflare?)을 쓰고 있어?