๐HTTP (Hyper Text Transfer Protocol)
HTTP ๋์ ๋ฐฉ์

- ํด๋ผ์ด์ธํธ: ์๋ฒ์ ์์์ ์์ฒญ(Request)
- ์๋ฒ: ์์ฒญ์ ์ฒ๋ฆฌ ํ ๊ฒฐ๊ณผ๋ฅผ ์๋ต(Response)
์ฃผ์ ํน์ง
๐ ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ
- ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ์๋ก ๋
๋ฆฝ์ ์ผ๋ก ๋์
- ์๋ฒ๋ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํตํด ํ๋ฉด์ ๊ตฌ์ฑ
๐ ๋น์ฐ๊ฒฐ(Connection-less)
: ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์์ฒญ-์๋ต ํ ์ฐ๊ฒฐ์ ์ ์งํ์ง ์์. ๋งค ์์ฒญ๋ง๋ค ์๋ก์ด ์ฐ๊ฒฐ ์ค์ ํ์.
- ์๋ฒ๋ ์ฐ๊ฒฐ ์ค์ ์ ํ์ํ ์์ ์๋ชจ ํด๊ฒฐ
- ์์ฒญ๋ง๋ค ์ฐ๊ฒฐ ์ค์ (3-way Handshaking) ํด์ผํ๋ฏ๋ก ์๋ต ์๊ฐ ์ฆ๊ฐ
- ์บ์, ๋ธ๋ผ์ฐ์ ์บ์ฑ๋ก ํด๊ฒฐ
- ํ์ฌ๋ HTTP ์ง์์ฐ๊ฒฐ(Persistent Connections) ์ผ๋ก ํด๊ฒฐ
- ํ๋์ ์์ฒญ์ ํ์ํ ์์ฒญ๋ค์ด ๋ชจ๋ ์๋ต๋ ๋ ๊น์ง ์ฐ๊ฒฐ์ ์ ์ง
๐ ๋ฌด์ํ(State-less)
: ์๋ฒ๋ ์ด์ ์์ฒญ์ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์์
- Cookie, Session, Token ๋ฑ์ ํ์ฉํ์ฌ ๋ณด์
HTTP ๋ฉ์๋
- POST : ๋ฆฌ์์ค ์์ฑ
- Message Body๋ฅผ ํตํด ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ
- GET : ๋ฆฌ์์ค ์กฐํ
- ์ฟผ๋ฆฌ ์คํธ๋ง ํฌํจ O / X ๊ฒฝ์ฐ
- PUT : ๋ฆฌ์์ค ๋ฎ์ด์ฐ๊ธฐ
- POST์๋ ๋ค๋ฅด๊ฒ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ์ฌ URI๋ฅผ ์ง์
- ๊ธฐ์กด ๋ฆฌ์์ค ์กด์ฌํ๋ ๊ฒฝ์ฐ: ์ ์ฒด ์์ (๋์ฒด๋ ๋ฆฌ์์ค)
- ๊ธฐ์กด ๋ฆฌ์์ค ์กด์ฌ, ์ผ๋ถ ์์ ํ๋ ๊ฒฝ์ฐ: ๋ฎ์ด์ฐ๊ธฐ (๋์ฒด๋ ๋ฆฌ์์ค)
- ๊ธฐ์กด ๋ฆฌ์์ค X : ์๋ก ์์ฑ
- PATCH : ๋ฆฌ์์ค ๋ถ๋ถ ์์ (๋ถ๋ถ ์์ ๋ ๋ฆฌ์์ค)
- DELETE : ๋ฆฌ์์ค ์ญ์
๐ก PUT vs PATCH
PUT: ์ ์ฒด ์์ (๋ฆฌ์์ค๋ฅผ ์์ ํ ๋ฎ์ด์)
PATCH: ๋ถ๋ถ ์์ (์ผ๋ถ ํ๋๋ง ๋ณ๊ฒฝ)
HTTP ๋ฉ์๋์ ์์ฑ
1. ์์ ์ฑ(Safe)
- ์์ : GET (์กฐํ)
- ์์ X: POST, PUT, DELETE, PATCH โ> ๋ฐ์ดํฐ ์์ /์ญ์ ๊ฐ ์ผ์ด๋๋ ์์ฒญ
2. ๋ฉฑ๋ฑ์ฑ(Idempotent)
- ๊ฐ์ ์ฐ์ฐ ์ฌ๋ฌ๋ฒ ํด๋ ๊ฒฐ๊ณผ ๋ณํ์ง์์
- POST: ๋ฉฑ๋ฑ์ฑ ๋ณด์ฅX
- GET, PUT, DELETE: ๋ฉฑ๋ฑ์ฑ O
- ์ฌ์ฉ์์ ์ค์๋ก ์ธํ ์ค๋ณต ์์ฒญ์ ๋ง๊ธฐ ์ํ ๋ฐฉ๋ฒ
- ์๋์ ์ธ ๋์ผ ์์ฒญ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ์๋ (ex. A์์ B๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋์์ผ๋ ๋ค์ A๋ก ๋์๊ฐ ์์ฒญ ๋ณด๋)
- ์ด ๊ฒฝ์ฐ ํ ํฐ ์ฌ์ฉ, ์๋ฒ์์ ๋์ผ ์์ฒญ ์ ์ถ ์ฐจ๋จ ๋ฑ์ ์ถ๊ฐ์ ์ธ ์กฐ์น๊ฐ ํ์
- ์ฌ์์ฒญ ์ค์ ๋ฆฌ์์ค ๋ณ๊ฒฝ๋๋ ๊ฑด ๋ฉฑ๋ฑ์ฑ ์๋ฐ์ผ๋ก ๊ณ ๋ ค X
- ์์ฒญ์ด ์คํจํ ๊ฒฝ์ฐ ์ฌ์๋ ํ๊ธฐ์ํด ํ์ํ๋ค.
1. ํญ์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค๋ฉด ๋ง์๊ป ์ฌ์๋ ํด๋๋๋ค.
2. ๋ง์ฝ ๋ฉฑ๋ฑํ์ง ์๋ค๋ฉด, ์ค๋ณต ์์ฒญ์ ๋ณด๋ด์๋ ์๋๋ค.
3. ๋ฉฑ๋ฑ์ฑ์ ๋ณต๊ตฌ ๋งค์ปค๋์ฆ์ ์ฌ์ฉํ๋ค.
- ex) ์์ฒญ ์คํจ์ ์๋ฒ์์ ์๋์ผ๋ก ์ฌ์๋ํ๋๋ก ์ฒ๋ฆฌ
3. ์บ์๊ฐ๋ฅ์ฑ(Cacheable)
- ์ฌ์ฌ์ฉ์ ์ํด ์์ฒญ์ ๋ํ ์๋ต์ ์ ์ฅํด๋ ๋๋๊ฐ?
- ๊ฐ๋ฅ: GET, HEAD, POST
- ์ฃผ๋ก GET, HEAD ์ ๋๋ง ์บ์๋ก ์ฌ์ฉ
- ์ ์ ์์(HTML, CSS โฆ) ์์ฃผ๋ก ์บ์ฑ
HTTP ์ํ ์ฝ๋
: ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์๋ตํ๋ ์ฝ๋. ๋ฐ์ดํฐ์ ํจ๊ป ๋ฐํ๋๋ค.
๐น ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ํ์ง ๋ชปํ๋ ์ํ ์ฝ๋๋ฅผ ์๋ฒ๊ฐ ๋ฐํํด๋, ํด๋ผ์ด์ธํธ๋ ์์ ์ํ ์ฝ๋(1xx, 2xx ๋ฑ)๋ก ํด์ํ์ฌ ์ฒ๋ฆฌ
๐น ์์ ์ํ ์ฝ๋: 1xx, 2xx, 3xx, 4xx, 5xx
-
1xx : ์ ๋ณด
- ์์ฒญ ์์ ํ ์ฒ๋ฆฌ์ค์ธ ์ํ, ์ ์ฌ์ฉํ์ง ์์
-
2xx : ์ฑ๊ณต
- 200 OK
- 201 Created
- 202 Accepted : ์์ฒญ ์์ ์๋ฃ, ์ฒ๋ฆฌ๋ ์๋ฃX
- 204 No Content : ์์ฒญ ์ฑ๊ณต, ์๋ต ๋ฐ์ดํฐ๋ ๋ฐ๋ก ์์.
-
3xx : ๋ฆฌ๋ค์ด๋ ์
-
4xx : ํด๋ผ์ด์ธํธ ์๋ฌ
- 400 Bad Request : ์๋ชป๋ ์์ฒญ(ex. ์์ฒญ ๋ฉ์๋, ํ๋ผ๋ฏธํฐ ๊ฐ์ด API ์คํ๊ณผ ๋ง์ง ์์)
- 401 Unauthorized : ์ธ์ฆ ํ์
- 403 Forbidden : ์์ฒญ ๋ฐ์์ง๋ง ์น์ธ ๊ฑฐ๋ถ (์ฃผ๋ก ์ธ๊ฐ authorized ๋ฌธ์ )
- 404 Not Found : ์์ฒญํ ๋ฆฌ์์ค๊ฐ ์๋ฒ์ ์์ (ํน์ ์๋์ฒ)
-
5xx : ์๋ฒ ์๋ฌ
- 500 Internal Server Error : ์๋ฒ ๋ด๋ถ ๋ฌธ์ , ์ฃผ๋ก ์ด๊ฑฐ ์ฌ์ฉ
- 503 Service Unavailable : ์๋น์ค ์ด์ฉ ๋ถ๊ฐ
PRG ํจํด(Post/Redirect/Get)
: ์ฌ์ฉ์๊ฐ POST ์์ฒญ์ ๋ณด๋ธ ํ, ๊ณง๋ฐ๋ก GET ์์ฒญ์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธํ๋ ๋ฐฉ์
๐ POST โก๏ธ Redirect(3xx) โก๏ธ GET
- Post ์์ฒญ์ ๋ํ ์๋ต์ด ๋ ๋ค๋ฅธ URL๋ก์ GET ์์ฒญ์ ์ํ ๋ฆฌ๋ค์ด๋ ํธ(์๋ต ์ฝ๋๊ฐ 3XX)์ฌ์ผ ํ๋ค๋ ๊ฒ
ํ์์ฑ
โ
๋ฉฑ๋ฑ์ฑ ๋ณด์ฅ
- POST ์์ฒญ์ ๋ฉฑ๋ฑ์ฑ์ด ์์ผ๋ฏ๋ก ์๋ก๊ณ ์นจ ๋ฑ์ผ๋ก ์ฌ๋ฌ ๋ฒ ์คํ ์ ์ค๋ณต ๋ฐ์ดํฐ ์์ฑ ๊ฐ๋ฅ
- ๋ฆฌ๋ค์ด๋ ํธ ํ GET ์์ฒญ์ ์ํํ๋ฉด ๋ฐ์ดํฐ ์์ ์์ด ์์ ํ ์์ฒญ์ด ๊ฐ๋ฅ
โ
์ค๋ณต ์์ฒญ ๋ฐฉ์ง
- POST ์์ฒญ ํ ์ฌ์ฉ์๊ฐ ์๋ก๊ณ ์นจ ์ ๋์ผํ ์์ฒญ(POST) ๋ฐ๋ณต๋ ์ ์์
- PRG ํจํด ์ ์ฉ ํ, ์๋ก๊ณ ์นจ์ ํด๋ GET ์์ฒญ๋ง ํ๋ฏ๋ก ๋ฐ์ดํฐ ์ค๋ณต ์์ฑ๋๋ ๋ฌธ์ ๋ฐฉ์ง
๐ช์ฟ ํค&์บ์
: HTTP๋ ๋ฌด์ํ(Stateless) ํน์ฑ์ ๊ฐ์ง๋ฏ๋ก, ์๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ํ(๋ก๊ทธ์ธ ์ ๋ณด, ๋ฐฉ๋ฌธ ๊ธฐ๋ก ๋ฑ)๋ฅผ ๊ธฐ์ตํ์ง ์์
โก๏ธ ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ์ฟ ํค์ ์บ์๋ฅผ ํ์ฉ
์ฟ ํค
: ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ ์ฅ๋๋ ์์ ๋ฐ์ดํฐ๋ก, ํด๋ผ์ด์ธํธ๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์์ฒญ๋ง๋ค ์ํ๋ฅผ ํจ๊ป ์ ๋ฌํ๋ค.
โ๏ธ ์ฃผ๋ก ์ฌ์ฉ์ ์ธ์ฆ(๋ก๊ทธ์ธ ์ ๋ณด), ์ธ์
์ ์ง, ๊ฐ์ธํ๋ ์ค์ ์ ์ฅ ๋ฑ์ ์ฌ์ฉ
์บ์
: ์๋ฒ๋ก ๋ฐ์ ๋ฐ์ดํฐ ์ค ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด๋์ด ๋น ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ.
โ๏ธ ์ ์ ์์(HTML, CSS, JS ๋ฑ)์ ์ ์ฅํ์ฌ ํ์ด์ง ๋ก๋ฉ ์๋ ํฅ์
โ๏ธ ์๋ฒ ์๋ต์ ์บ์๋ก ์ ์ฅํ์ฌ ์๋ฒ์ ๋ถํ๋ฅผ ๊ฐ์์ํด