2025. 10. 29. 11:30ใCS์ ๋ฆฌ
๐งฉ HTTP ํ๋กํ ์ฝ ์๋ฒฝ ์ดํด
โถ HTTP๋?
HTTP (HyperText Transfer Protocol)์ ์ธํฐ๋ท์์ ํด๋ผ์ด์ธํธ(๋ณด๋ด๋ ์ชฝ)๊ณผ ์๋ฒ(๋ฐ๋ ์ชฝ)์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ํ๋กํ ์ฝ์ด๋ค.
์ฆ, ์น ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ์๋ก ๋ํํ ๋ ์ฌ์ฉํ๋ ์ธ์ด(์ฝ์)์ธ ์ ์ด๋ค.
---
โท TCP/IP ์์์ ๋์ํ๋ค๋ ๋ป
HTTP ์์ฒด๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ์กํ์ง ์๋๋ค. ๋์ TCP/IP๊ฐ ‘๋ฐ์ดํฐ ์ ์ก’์ ๋ด๋นํ๊ณ , HTTP๋ ‘๋ฌด์์ ์ฃผ๊ณ ๋ฐ์์ง’๋ฅผ ์ ์ํ๋ค.
| ๊ณ์ธต | ์ญํ | ์์ |
|---|---|---|
| Application | ๋ฌด์์ ์ฃผ๊ณ ๋ฐ์์ง | HTTP, FTP |
| Transport | ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ ์กํ ์ง | TCP, UDP |
| Internet | ์ด๋๋ก ๋ณด๋ผ์ง | IP |
| Network Access | ๋ฌผ๋ฆฌ์ ์ฐ๊ฒฐ | Ethernet, Wi-Fi |
์ฆ, IP๋ ์ฃผ์(์ด๋๋ก), TCP๋ ์ ๋ขฐ์ฑ ์๊ฒ ์ ์ก(์ด๋ป๊ฒ), HTTP๋ ๋ฌด์์ ๋ณด๋ผ์ง(๋ฌด์จ ๋ด์ฉ)์ ๋ด๋นํ๋ค.
---
โธ Stateless (๋น์ํ์ฑ)
HTTP์ ์ค์ํ ํน์ง์ Stateless, ์ฆ ๋ฌด์ํ์ฑ์ด๋ค. ์ด๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ด์ ์์ฒญ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์๋๋ค๋ ๋ป์ด๋ค.
๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ํ ๋ค๋ฅธ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ์๋ฒ๋ ๊ทธ ์ฌ๋์ด ์ด์ ์ ๋ก๊ทธ์ธํ๋ ์ฌ๋์ธ์ง ๋ชจ๋ฅธ๋ค.
๊ทธ๋์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฟ ํค(Cookie)์ ์ธ์ (Session)์ ์ฌ์ฉํ๋ค.
์ฅ์ : ๋จ์ํ๊ณ ํ์ฅ์ฑ ๋์.
๋จ์ : ๋งค๋ฒ ์ํ์ ๋ณด๋ฅผ ์๋ก ๋ณด๋ด์ผ ํ๋ฏ๋ก ๋นํจ์จ์ .
---
โน 1990๋ ๋์ CS Programming๊ณผ HTTP์ ๊ด๊ณ
1990๋ ๋ ์ด๋ฐ์ ์น์ด ๋์คํ๋๊ธฐ ์ ์ด๋ผ, HTTP ๋์ TCP/UDP/FTP ๋ฑ ์ ์์ค ํต์ ์ผ๋ก ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์๋ค.
์ด๋ฐ ๋ฐฉ์์ด ๋ฐ๋ก Client–Server Programming์ด์๊ณ , ๋๋ถ๋ถ ์ฌ๋ด๋ง(Intranet)์์ ์ฌ์ฉ๋์๋ค.
๊ฐ ํ์ฌ๋ง๋ค ์์ฒด ํ๋กํ ์ฝ์ ๋ง๋ค์ด ์ฐ๋ ์์ ์์, HTTP๋ ๋ชจ๋ ์น ํต์ ์ ํ์คํ์ํจ ๊ฒฐ์ ์ ์ธ ๊ธฐ์ ์ด์๋ค.
---
โบ ์์ฒญ(Request)๊ณผ ์๋ต(Response)์ ๊ตฌ์กฐ
๐น ์์ฒญ(Request)
GET /index.html HTTP/1.1
Host: www.example.com
Authorization: Bearer API_KEY
Content-Type: application/json
{ "username": "jinwoo", "password": "1234" }
- Start Line — Method + URL + Version
- Header — ์์ฒญ ๋ฉํ๋ฐ์ดํฐ (APIํค, ๋ธ๋ผ์ฐ์ ์ ๋ณด ๋ฑ)
- Body — POST, PUT ์์ฒญ ์ ์ค์ ์ ์กํ ๋ฐ์ดํฐ
๐น ์๋ต(Response)
HTTP/1.1 200 OK
Content-Type: text/html
Date: Wed, 29 Oct 2025 10:00:00 GMT
<html>Hello, World!</html>
- Status Line — HTTP ๋ฒ์ , ์ํ ์ฝ๋, ๋ฉ์์ง
- Header — ์๋ฒ ์ ๋ณด, ๋ฐ์ดํฐ ํ์ ๋ฑ
- Body — ์ค์ ๋ฐ์ดํฐ (HTML, JSON ๋ฑ)
---
โป ์ฃผ์ ์ํ ์ฝ๋(Status Code)
| ์ฝ๋ | ์๋ฏธ | ์ค๋ช |
|---|---|---|
| 200 | OK | ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋จ |
| 201 | Created | ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋จ |
| 400 | Bad Request | ์์ฒญ ๋ฌธ๋ฒ ์ค๋ฅ |
| 401 | Unauthorized | ์ธ์ฆ ํ์ |
| 403 | Forbidden | ์ ๊ทผ ๊ถํ ์์ |
| 404 | Not Found | ์์ฒญํ ๋ฆฌ์์ค ์์ |
| 500 | Internal Server Error | ์๋ฒ ๋ด๋ถ ์ค๋ฅ |
| 503 | Service Unavailable | ์๋ฒ ๊ณผ๋ถํ/์ ๊ฒ ์ค |
---
โผ HTTP vs HTTPS (๋ณด์ ๊ณ์ธต)
๐ HTTPS๋?
HTTP๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฌธ์ผ๋ก ์ฃผ๊ณ ๋ฐ๋ ๋ฐ๋ฉด, HTTPS๋ SSL/TLS ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๋ณด์์ ๊ฐํํ ๋ฒ์ ์ด๋ค.
์ฆ, HTTP + SSL/TLS = HTTPS
| ๊ตฌ๋ถ | HTTP | HTTPS |
|---|---|---|
| ๋ณด์์ฑ | ์ํธํ ์์ | SSL/TLS๋ก ์ํธํ |
| ํฌํธ ๋ฒํธ | 80 | 443 |
| ์๋ | ๋น ๋ฆ | ์ฝ๊ฐ ๋๋ฆผ(์ํธํ ์ฐ์ฐ) |
| ๋ฐ์ดํฐ ๋ณดํธ | ์ทจ์ฝ | ์์ (์ํธํ + ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ) |
| ์ฌ์ฉ ์์ | ๋ด๋ถ ํ ์คํธ ํ๊ฒฝ | ๋ก๊ทธ์ธ, ๊ฒฐ์ , API ์๋ฒ ๋ฑ |
HTTPS์ ํต์ฌ 3์์
- ์ํธํ (Encryption) — ์ 3์๊ฐ ๋ด์ฉ์ ์ฝ์ง ๋ชปํ๋๋ก ๋ณดํธ
- ์ธ์ฆ (Authentication) — ์๋ฒ์ ์ ์์ ์ฆ๋ช (CA ์ธ์ฆ์)
- ๋ฌด๊ฒฐ์ฑ (Integrity) — ๋ฐ์ดํฐ๊ฐ ๋ณ์กฐ๋์ง ์์์์ ๋ณด์ฅ
SSL ์ธ์ฆ์
์๋ฒ๊ฐ ์์ ์ด ์ง์ง์์ ์ฆ๋ช ํ๊ธฐ ์ํด CA(Certificate Authority) ๊ธฐ๊ด์์ ๋ฐ๊ธ๋ฐ์ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์ธ์ฆ์๋ฅผ ๊ฒ์ฆํ๊ณ ์ ํจํ ๋๋ง ๐ ์์ด์ฝ์ด ํ์๋๋ค.
HTTPS ํต์ ๊ณผ์ (ํธ๋์ ฐ์ดํฌ ์์ฝ)
ํด๋ผ์ด์ธํธ → ์๋ฒ : ์ฌ์ฉํ ์ํธํ ๋ฐฉ์ ์ ์
์๋ฒ → ํด๋ผ์ด์ธํธ : ์ธ์ฆ์ ์ ๋ฌ
ํด๋ผ์ด์ธํธ → ์๋ฒ : ๊ณต๊ฐํค๋ก ๋น๋ฐํค ์ํธํํ์ฌ ์ ์ก
์๋ฒ → ํด๋ผ์ด์ธํธ : ์ธ์
ํค ๊ตํ ์๋ฃ → ์ดํ ํต์ ์ํธํ
์ด ๊ณผ์ ์ TLS Handshake๋ผ๊ณ ํ๋ค.
HTTPS ๋์ ์ด์
- ๋ฐ์ดํฐ ๋์ฒญ ๋ฐ ๋ณ์กฐ ๋ฐฉ์ง (MITM ๊ณต๊ฒฉ ์ฐจ๋จ)
- ๋ก๊ทธ์ธ, ๊ฒฐ์ ์ ๋ณด ๋ณดํธ
- Google SEO ๊ฐ์ค์น ์์น
- ๋ธ๋ผ์ฐ์ ๊ฒฝ๊ณ ์ ๊ฑฐ ("์ด ์ฌ์ดํธ๋ ์์ ํ์ง ์์" ๋ฐฉ์ง)
- API ์๋ฒ ๋ณด์ ๊ฐํ (JWT, OAuth ๋ฑ๊ณผ ํจ๊ป ์ฌ์ฉ)
---
โผ TCP Handshake & TLS Handshake (ํต์ฌ ๋คํธ์ํฌ ์๋ฆฌ)
HTTP์ HTTPS๊ฐ ์ ๋๋ก ๋์ํ๋ ค๋ฉด, ๊ทธ ์๋์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ TCP ํต์ ์ด ๋จผ์ ์ฐ๊ฒฐ๋์ด์ผ ํ๋ค. ์ด๋ ์ฌ์ฉํ๋ ๊ณผ์ ์ด ๋ฐ๋ก TCP 3-Way Handshake๋ค.
---
๐น TCP 3-Way Handshake (์ฐ๊ฒฐ ์๋ฆฝ ๊ณผ์ )
TCP๋ ์ ๋ขฐ์ฑ ์๋ ์ฐ๊ฒฐํ ํ๋กํ ์ฝ์ด๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ ์ ์๋ก ์ค๋น๋๋์ง ํ์ธํ๊ณ , ์์์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ‘์ ์(Handshake)’๋ฅผ ๋๋๋ค.
[1] ํด๋ผ์ด์ธํธ → ์๋ฒ : SYN
[2] ์๋ฒ → ํด๋ผ์ด์ธํธ : SYN + ACK
[3] ํด๋ผ์ด์ธํธ → ์๋ฒ : ACK
| ๋จ๊ณ | ๋์ | ์ค๋ช |
|---|---|---|
| โ SYN | ์ฐ๊ฒฐ ์์ฒญ | ํด๋ผ์ด์ธํธ๊ฐ “์ฐ๊ฒฐํ๊ณ ์ถ๋ค”๋ ์ ํธ๋ฅผ ๋ณด๋ (SYN=1, seq=x) |
| โก SYN+ACK | ์์ฒญ ์๋ฝ | ์๋ฒ๊ฐ ์์ฒญ์ ์๋ฝํ๋ฉฐ ์๋ต (SYN=1, ACK=1, seq=y, ack=x+1) |
| โข ACK | ์ฐ๊ฒฐ ํ์ธ | ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์๋ต์ ํ์ธํ๊ณ ์ต์ข ์น์ธ (ACK=1, seq=x+1, ack=y+1) |
์ด ๊ณผ์ ์ ๊ฑฐ์น๋ฉด ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์๋ก์ ์กด์ฌ๋ฅผ ํ์ธํ๊ณ , ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ ์ํ๋ก ์ ํ๋๋ค.
---
๐น TCP 4-Way Handshake (์ฐ๊ฒฐ ์ข ๋ฃ ๊ณผ์ )
[1] ํด๋ผ์ด์ธํธ → ์๋ฒ : FIN
[2] ์๋ฒ → ํด๋ผ์ด์ธํธ : ACK
[3] ์๋ฒ → ํด๋ผ์ด์ธํธ : FIN
[4] ํด๋ผ์ด์ธํธ → ์๋ฒ : ACK
์ฐ๊ฒฐ ์ข ๋ฃ ์์๋ ์ก์ ๊ณผ ์์ ์ ๊ฐ๊ฐ ๋์ด์ผ ํ๋ฏ๋ก ์ด 4๋ฒ์ ์ ํธ๊ฐ ํ์ํ๋ค.
---
TLS Handshake (HTTPS์ ์ํธํ ์ฐ๊ฒฐ ์๋ฆฝ)
TCP๋ก ์ฐ๊ฒฐ๋ ํ, HTTPS๋ TLS(Transport Layer Security)๋ฅผ ํตํด ์ํธํ๋ ์ธ์ ์ ์ค์ ํ๋ค. ์ฆ, TCP๊ฐ “๋ฌธ์ ์ฌ๋ ๊ณผ์ ”์ด๋ผ๋ฉด, TLS๋ “๊ทธ ๋ฌธ์ ์๋ฌผ์ ๋ฅผ ๊ฑฐ๋ ๊ณผ์ ”์ด๋ค.
[1] ClientHello → ์ง์ ๊ฐ๋ฅํ ์ํธํ ๋ฐฉ์, TLS ๋ฒ์ ์ ์
[2] ServerHello → ์ํธํ ๋ฐฉ์ ์ ํ + ์ธ์ฆ์ ์ ๋ฌ
[3] ํด๋ผ์ด์ธํธ → ์ธ์ฆ์ ๊ฒ์ฆ ํ ๊ณต๊ฐํค๋ก ์ธ์
ํค ์ํธํํ์ฌ ์ ์ก
[4] ์๋ฒ → ์ธ์
ํค ๋ณตํธํ ํ Finished ๋ฉ์์ง ์ ์ก
[5] ์ดํ๋ถํฐ ์ธ์
ํค๋ก ์ํธํ๋ ๋์นญํค ํต์ ์งํ
์ฆ, TCP Handshake๋ ์ ๋ขฐ์ฑ ์๋ ์ฐ๊ฒฐ์ ๋ง๋ค๊ณ , TLS Handshake๋ ๊ทธ ์ฐ๊ฒฐ์ ๋ณด์์ ๋ํ๋ค.
---
Handshake ์์ฝ ๋น๊ต
| ์ข ๋ฅ | ๋จ๊ณ | ๋ชฉ์ | ํต์ฌ ์ ํธ |
|---|---|---|---|
| TCP 3-Way Handshake | 3๋จ๊ณ | ์ฐ๊ฒฐ ์๋ฆฝ | SYN / ACK |
| TCP 4-Way Handshake | 4๋จ๊ณ | ์ฐ๊ฒฐ ์ข ๋ฃ | FIN / ACK |
| TLS Handshake | 5๋จ๊ณ ์ด์ | ๋ณด์ ์ธ์ ์๋ฆฝ | ์ธ์ฆ์ / ์ธ์ ํค |
---
โฝ ํต์ฌ ์์ฝ
- HTTP๋ TCP/IP ์์์ ๋์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ํ๋กํ ์ฝ๋ก, ์์ฒญ(Request)๊ณผ ์๋ต(Response)์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- Stateless ํน์ฑ ๋๋ฌธ์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ด์ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์๋๋ค.
- ์์ฒญ: Method + URL + Header + Body
- ์๋ต: Status Code + Header + Body
- HTTPS๋ HTTP์ SSL/TLS ๋ณด์ ๊ณ์ธต์ ์ถ๊ฐํ ๋ฒ์ ์ผ๋ก, ์ํธํ·์ธ์ฆ·๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ค.
- TCP Handshake๋ ์ฐ๊ฒฐ์ ์๋ฆฝํ๊ณ , TLS Handshake๋ ๊ทธ ์ฐ๊ฒฐ์ ์์ ํ๊ฒ ๋ง๋ ๋ค.
- HTTP๋ ํฌํธ 80, HTTPS๋ ํฌํธ 443์ ์ฌ์ฉํ๋ฉฐ, ํ๋ ์น์ ๊ธฐ๋ณธ ํต์ ์ ๋๋ถ๋ถ HTTPS๋ก ์ด๋ฃจ์ด์ง๋ค.
---
์ฉ์ด ์ ๋ฆฌ
| ์ฉ์ด | ์ค๋ช |
|---|---|
| HTTP | ์น์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํ ํ๋กํ ์ฝ |
| HTTPS | HTTP์ SSL/TLS๋ฅผ ๋ํ ์ํธํ๋ ํต์ ๋ฐฉ์ |
| TCP/IP | ์ธํฐ๋ท ํต์ ์ ๊ธฐ๋ณธ ๊ท์ฝ ๊ตฌ์กฐ |
| SYN (Synchronize) | TCP ์ฐ๊ฒฐ ์์ ์์ฒญ ์ ํธ |
| ACK (Acknowledge) | ์์ฒญ์ ์๋ฝํ๊ณ ์์ ์ ํ์ธํ๋ ์ ํธ |
| FIN (Finish) | TCP ์ฐ๊ฒฐ ์ข ๋ฃ ์์ฒญ ์ ํธ |
| Stateless | ์๋ฒ๊ฐ ์ด์ ์์ฒญ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ |
| TLS Handshake | HTTPS ํต์ ์์ ๋ณด์ ์ธ์ ์ ์๋ฆฝํ๋ ์ ์ฐจ |
| Header | ์์ฒญ ๋๋ ์๋ต์ ๋ถ๊ฐ์ ๋ณด |
| Body | ์ ์ก๋๋ ์ค์ ๋ฐ์ดํฐ |
| Status Code | ์์ฒญ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ซ์๋ก ํํํ ๊ฒ |
| Method | ์์ฒญ์ ์ข ๋ฅ(GET, POST, PUT, DELETE ๋ฑ) |
| SSL/TLS | ๋ฐ์ดํฐ ์ํธํ, ์ธ์ฆ, ๋ฌด๊ฒฐ์ฑ์ ๋ด๋นํ๋ ๋ณด์ ํ๋กํ ์ฝ |
| CA (Certificate Authority) | ์๋ฒ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋ ๊ณต์ธ ๊ธฐ๊ด |
---
๋ง๋ฌด๋ฆฌ
TCP Handshake๋ "๋ฌธ์ ์ฌ๋ ๊ณผ์ ", TLS Handshake๋ "๊ทธ ๋ฌธ์ ์๋ฌผ์ ๋ฅผ ๊ฑฐ๋ ๊ณผ์ "์ด๋ค.
HTTP๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ธ์ด์ด๋ฉฐ, HTTPS๋ ๊ทธ ์ธ์ด๋ฅผ ์์ ํ๊ฒ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ค๋๋ ์น์ ์ ๋ขฐ๋ ๋ฐ๋ก ์ด ์์ SYN๊ณผ ACK, ๊ทธ๋ฆฌ๊ณ TLS ์ํธํ์ ์
์์์ ์์๋๋ค.