๐[Network] HTTP ํ๋กํ ์ฝ์ด๋ ๋ฌด์์ผ๊น์?
- HTTP(ํ์ดํผํ ์คํธ ์ ์ก ํ๋กํ ์ฝ, HyperText Transfer Protocol)๋ ์น์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๊ท์ฝ์ ๋๋ค.
- ์ธํฐ๋ท์์ ์น ํ์ด์ง, ์ด๋ฏธ์ง, ๋์์ ๋ฑ ๋ค์ํ ๋ฆฌ์์ค๋ฅผ ์ ์กํ๋ ํ์ค ํต์ ํ๋กํ ์ฝ๋ก, ์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ๊ฐ์ ํต์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
๐โโ๏ธ ํ๋กํ ์ฝ(Protocol)์ด๋ ๋ฌด์์ผ๊น์?
1๏ธโฃ HTTP์ ๊ธฐ๋ณธ ๊ฐ๋ .
1๏ธโฃ ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ.
- HTTP๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์์ฒญ-์๋ต ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๋ต์ผ๋ก ๋๋ ค์ค๋๋ค.
- ํด๋ผ์ด์ธํธ : ์น ๋ธ๋ผ์ฐ์ , ๋ชจ๋ฐ์ผ ์ฑ ๋ฑ ์ฌ์ฉ์ ์ธก์์ ์์ฒญ์ ๋ณด๋ด๋ ์ชฝ์ ๋๋ค.
- ์๋ฒ : ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ณด๋ด๋ ์ชฝ์ผ๋ก, ์น ์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๊ฐ ๋ํ์ ์ ๋๋ค.
2๏ธโฃ ๋ฌด์ํ์ฑ(Stateless).
- HTTP๋ ๋ฌด์ํ์ฑ ํ๋กํ ์ฝ์
๋๋ค.
- ์ฆ, ๊ฐ ์์ฒญ์ ๋
๋ฆฝ์ ์ด๋ฉฐ, ์ด์ ์์ฒญ์ด๋ ์๋ต์ ์์กดํ์ง ์์ต๋๋ค.
- ์๋ฒ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์์ผ๋ฉฐ, ๋ชจ๋ ์์ฒญ์ ์๋ก์ด ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์ฆ, ๊ฐ ์์ฒญ์ ๋
๋ฆฝ์ ์ด๋ฉฐ, ์ด์ ์์ฒญ์ด๋ ์๋ต์ ์์กดํ์ง ์์ต๋๋ค.
- ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด, ์ฟ ํค๋ ์ธ์ ์ ํตํด ํด๋ผ์ด์ธํธ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค.
3๏ธโฃ URI(Uniform Resource Identifier)
- HTTP๋ URI(ํตํฉ ์ง์ ์๋ณ์)๋ฅผ ์ฌ์ฉํ์ฌ ์น์์ ํน์ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก๋ URI๋ ์น ์ฃผ์(๋๋ URL)๋ก ํํ๋๋ฉฐ, ์๋ฒ์์ ์ํ๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ์:
https://www.example.com/index.html
-
https://
: HTTP ํ๋กํ ์ฝ(HTTPS) -
www.example.com
: ์๋ฒ ๋๋ฉ์ธ ์ด๋ฆ -
/index.html
: ์๋ฒ ๋ด์์ ์์ฒญํ ๋ฆฌ์์ค์ ๊ฒฝ๋ก
-
4๏ธโฃ HTTP ๋ฉ์๋(HTTP Methods)
- HTTP๋ ๋ฆฌ์์ค์ ๋ํ ์์ฒญ์ ์๋๋ฅผ ๋ช
ํํ ํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ฉ์๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ด๋ค ์์ ์ ์์ฒญํ๋์ง๋ฅผ ์ ์ํฉ๋๋ค.
- ์ฃผ์ HTTP ๋ฉ์๋
- GET : ๋ฆฌ์์ค๋ฅผ ์กฐํํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.(๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ฐ์ ธ์ด)
- POST : ์๋ฒ์ ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.
- PUT : ์๋ฒ์ ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.
- DELETE : ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.
- HEAD : GET ์์ฒญ๊ณผ ์ ์ฌํ์ง๋ง, ์๋ต ๋ณธ๋ฌธ ์์ด ํค๋๋ง์ ๋ฐํํฉ๋๋ค.
5๏ธโฃ HTTP ์ํ ์ฝ๋(HTTP Status Codes)
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํด ์ํ ์ฝ๋๋ฅผ ํตํด ์๋ต์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํฉ๋๋ค.
- ์ํ ์ฝ๋๋ ์์ฒญ์ด ์ฑ๊ณตํ๋์ง, ์คํจํ๋์ง, ๋๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ฌ, 3์๋ฆฌ ์ซ์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์ฃผ์ ์ํ ์ฝ๋
- 200 OK : ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋จ.
- 201 Created : ๋ฆฌ์์ค๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋จ.
- 400 Bad Request : ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์๋ชป๋จ.
- 401 Unauthorized : ์ธ์ฆ์ด ํ์ํจ.
- 403 Forbidden : ๊ถํ์ด ์์ด์ ์์ฒญ์ด ๊ฑฐ๋ถ๋จ.
- 404 Not Found : ์์ฒญํ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์.
- 500 Internal Server Error : ์๋ฒ ๋ด๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํจ.
6๏ธโฃ ํค๋(Headers)
- HTTP ์์ฒญ๊ณผ ์๋ต์๋ ํค๋๊ฐ ํฌํจ๋ฉ๋๋ค.
- ํค๋๋ ์์ฒญ์ด๋ ์๋ต์ ๋ํ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ๋ฐฉ์์ ์ ์ดํฉ๋๋ค.
- ์ฃผ์ ํค๋ ์
-
Content-Type : ์์ฒญ ๋๋ ์๋ต ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ ํ์์ ์ง์ ํฉ๋๋ค.
- ์:
application/json
,text/html
- ์:
- User-Agent : ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ (์: ๋ธ๋ผ์ฐ์ )์ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ๋ฌํฉ๋๋ค.
- Authorization : ์ธ์ฆ์ ํ์ํ ์ ๋ณด(ํ ํฐ ๋ฑ)๋ฅผ ํฌํจํ์ฌ ์๋ฒ์ ์ ๋ฌํฉ๋๋ค.
-
Content-Type : ์์ฒญ ๋๋ ์๋ต ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ ํ์์ ์ง์ ํฉ๋๋ค.
7๏ธโฃ HTTP ๋ฒ์ .
- HTTP๋ ์ฌ๋ฌ ๋ฒ์ ์ด ์กด์ฌํ๋ฉฐ, ๊ฐ ๋ฒ์ ์ ์ฑ๋ฅ ๋ฐ ๊ธฐ๋ฅ์ ๊ฐ์ ํด์์ต๋๋ค.
- HTTP/1.0 : ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ฉฐ, ํ ๋ฒ์ ํ๋์ ์์ฒญ๋ง ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
-
HTTP/1.1 : ์ฐ๊ฒฐ ์ฌ์ฌ์ฉ(Persistent Connection)์ ์ง์ํ์ฌ ์ฌ๋ฌ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ฌ์ ํ ์น์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฒ์ ์ ๋๋ค.
-
HTTP/2 : ์ฑ๋ฅ ํฅ์์ ์ํด ์์ฒญ๊ณผ ์๋ต์ ๋ค์คํํ์ฌ, ๋์์ ์ฌ๋ฌ ์์ฒญ์ ๋ณด๋ด๊ณ ๋ฐ์ ์ ์๊ฒ ์ค๊ณ๋์์ต๋๋ค.
- ์น ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ํฌ๊ฒ ๊ฐ์ ํฉ๋๋ค.
- HTTP/3 : ์ต์ ๋ฒ์ ์ผ๋ก, QUIC ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ฑ๋ฅ๊ณผ ๋ณด์์ฑ์ ํฌ๊ฒ ๊ฐ์ ํ์ต๋๋ค.
๐ QUIC(Quick UDP Internet Connections) ํ๋กํ ์ฝ.
QUIC(Quick UDP Internet Connections)๋ ๊ตฌ๊ธ์ด ๊ฐ๋ฐํ ์ธํฐ๋ท ์ ์ก ๊ณ์ธต ํ๋กํ ์ฝ๋ก, TCP์ ๊ฐ์ ์ ๋ขฐ์ฑ์๋ ๋ฐ์ดํฐ ์ ์ก์ ์ ๊ณตํ๋ฉด์๋ UDP(User Datagram Protocol)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ๋ ๋น ๋ฅธ ์ฐ๊ฒฐ ์๋ฆฝ๊ณผ ๋ ๋์ ์ฑ๋ฅ์ ๋ชฉํ๋ก ํฉ๋๋ค.
HTTP/3๋ QUIC ์์์ ๋์ํ๋ฉฐ, ์น์์์ ์ ์ง์ฐ๊ณผ ์์ ์ฑ์ ๊ฐ์ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
2๏ธโฃ HTTP ํต์ ๊ณผ์ .
- HTTP ํต์ ๊ณผ์ ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ(Request)์ ๋ณด๋ด๊ณ , ์๋ฒ๊ฐ ์๋ต(Response)์ ๋ฐํํ๋ ์์ฒญ-์๋ต ๋ชจ๋ธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
1๏ธโฃ ํด๋ผ์ด์ธํธ ์์ฒญ.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ฉด, HTTP ์์ฒญ์ ์๋ฒ๋ก ์ ์กํฉ๋๋ค.
- ์์ฒญ์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํฉ๋๋ค.
- ์์ฒญ ๋ฉ์๋(์: GET, POST)
- URI(์:
/index.html
) - ํค๋(์:
Content-Type
,User-Agent
) - ๋ณธ๋ฌธ(POST ์์ฒญ์ผ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์ ์์)
- ์์ฒญ์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํฉ๋๋ค.
๐ ์์: GET
์์ฒญ.
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
2๏ธโฃ ์๋ฒ ์๋ต.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ ํ, HTTP ์๋ต์ ํด๋ผ์ด์ธํธ์ ๋ฐํํฉ๋๋ค.
- ์๋ต์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํฉ๋๋ค.
- ์ํ ์ฝ๋ (์: 200 OK, 404 Not Found)
- ํค๋ (์:
Content-Type
,Cache-Control
) - ๋ณธ๋ฌธ (์: HTML, JSON ๋ฐ์ดํฐ)
- ์๋ต์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํฉ๋๋ค.
๐ ์์: 200 OK
์๋ต.
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1354
<html>
<head><title>Example</title></head>
<body>...</body>
</html>
3๏ธโฃ HTTP์ ์ฃผ์ ํน์ง.
1๏ธโฃ ๊ฐ๋จํจ.
- HTTP๋ ํ
์คํธ ๊ธฐ๋ฐ ํ๋กํ ์ฝ๋ก, ์ฌ๋์ด ์ดํดํ๊ธฐ ์ฌ์ด ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์์ต๋๋ค.
- ๊ฐ ์์ฒญ๊ณผ ์๋ต์ ๋ช ํํ ๊ตฌ์กฐ๋ก ๋์ด ์์ด, ์ฝ๊ฒ ํด์ํ ์ ์์ต๋๋ค.
2๏ธโฃ ํ์ฅ์ฑ.
- HTTP๋ ํ์ฅ ๊ฐ๋ฅํ ํ๋กํ ์ฝ์
๋๋ค.
- ํค๋๋ฅผ ํตํ ๋ค์ํ ์ ๋ณด(์ธ์ฆ ์ ๋ณด, ์บ์ฑ ์ ๋ณด, ๋ฐ์ดํฐ ํ์ ๋ฑ)๋ฅผ ์ ์กํ ์ ์์ผ๋ฉฐ, ์๋ก์ด ๊ธฐ๋ฅ๋ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค.
3๏ธโฃ ์ ์ฐ์ฑ.
- HTTP๋ ๋ค์ํ ๋ฐ์ดํฐ ํ์์ ์ ์กํ ์ ์์ต๋๋ค.
- ํ ์คํธ, ์ด๋ฏธ์ง, ๋์์ ๋ฑ ๋ค์ํ ์ฝํ ์ธ ํ์ ์ ์ง์ํ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค.
4๏ธโฃ ๋ฌด์ํ์ฑ.
- ๊ฐ HTTP ์์ฒญ์ ๋
๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์๋ฒ๋ ์์ฒญ ๊ฐ์ ์ํ๋ฅผ ์ ์งํ์ง ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด ์๋ฒ๋ ํ์ฅ์ฑ๊ณผ ๋จ์์ฑ์ ์ ์งํ ์ ์์ง๋ง, ์ฟ ํค๋ ์ธ์ ์ ํตํด ์ํ ์ ์ง๋ฅผ ๋ณด์ํ ์ ์์ต๋๋ค.
4๏ธโฃ HTTP์ HTTPS์ ์ฐจ์ด
-
HTTPS(HyperText Transfer Protocol Secure)๋ HTTP์ ๋ณด์ ๊ณ์ธต(SSL/TLS)์ด ์ถ๊ฐ๋ ๋ฒ์ ์
๋๋ค.
- HTTPS๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ ์กํ๋ฏ๋ก, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ๋ณดํธํ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ 3์์ ์ํด ๋์ฒญ, ๋ณ์กฐ, ์์กฐ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- HTTPS๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ ์กํ๋ฏ๋ก, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ๋ณดํธํ ์ ์์ต๋๋ค.
๐ ์ฃผ์ ์ฐจ์ด์ .
- HTTP : ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ง ์๊ณ ํ๋ฌธ์ผ๋ก ์ ์ก.
- HTTPS : SSL/TLS๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํธํํด ์ ์ก.
5๏ธโฃ ๊ฒฐ๋ก .
- HTTP๋ ์น์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ ํต์ฌ์ ์ธ ํต์ ํ๋กํ ์ฝ์ ๋๋ค.
- ์์ฒญ-์๋ต ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋ฆฌ์์ค ์ ๊ทผ, ๋ฐ์ดํฐ ์ ์ก, ์น ํ์ด์ง ๋ก๋ฉ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
- HTTP๋ ๊ฐ๋จํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ํ๋ ์น์ ๊ธฐ๋ฐ์ ์ด๋ฃจ๋ ์ค์ํ ํ๋กํ ์ฝ์ ๋๋ค.