BackEnd
HTTP ๋ฉ์๋
mokhs
2021. 5. 28. 23:03
๊น์ํ๋์ ๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์ ๊ฐ์๋ฅผ ์๊ฐํ๋ฉฐ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
GET
- ๋ฆฌ์์ค ์กฐํ
- ์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ query(์ฟผ๋ฆฌ ํ๋ง๋ฆฌํฐ, ์ฟผ๋ฆฌ ์คํธ๋ง)์ ํตํด์ ์ ๋ฌ
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ง๋ง, ์ง์ํ์ง ์๋ ๊ณณ์ด ๋ง์์ ๊ถ์ฅํ์ง ์์
GET /boards?title=hello HTTP/1.1
Host: localhost:8080
POST
- ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ์๋ฒ๋ก ์์ฒญ ๋ฐ์ดํฐ ์ ๋ฌ
- ์๋ฒ๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํ
- ์ฃผ๋ก ์ ๊ท ๋ฆฌ์์ค ๋ฑ๋ก, ํ๋ก์ธ์ค ์ฒ๋ฆฌ ๋ฑ์ ์ฌ์ฉ
์คํ ์์ POST
POST ๋ฉ์๋๋ ๋์ ๋ฆฌ์์ค๊ฐ ๋ฆฌ์์ค์ ๊ณ ์ ํ ์๋ฏธ ์ฒด๊ณ์ ๋ฐ๋ผ ์์ฒญ์ ํฌํจ๋ ํํ์ ์ฒ๋ฆฌํ๋๋ก ์์ฒญํฉ๋๋ค.
์ ๋ด์ฉ์ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์
- ์ด ๋ฆฌ์์ค URI์ POST์์ฒญ์ด ์ค๋ฉด ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ์ ํด์ง ๊ฒ์ด ์์
- ์ฆ. ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๋ฆฌ์์ค๋ง๋ค ๋ฐ๋ก ์ ํด์ผํ๊ณ ์ด๊ฑด ๊ฐ๋ฐ์ ์์
- ์ ๋ฆฌ์์ค ์์ฑ
- ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ(๋ด๋ถ ๋ก์ง)
- ๋ค๋ฅธ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ
POST /boards HTTP/1.1
Content-Type: application/json
{
"title": "hello",
"content": "hi!"
}
PUT
- ์ฝ๊ฒ ๋งํด์ ๋ฎ์ด์ฐ๊ธฐ
- ๋ฆฌ์์ค๋ฅผ ์์ ํ ๋์ฒดํจ
- ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ๋์ฒด
- ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ
- ์ค์! ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค๋ฅผ ์๋ณ
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค ์์น๋ฅผ ์๊ณ URI ์ง์
- ์ฆ. boards/10 ๊ฐ์ด 10๋ฒ ๊ฒ์๊ธ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ด์ผํจ.
- ๋ฆฌ์์ค ์์น๋ฅผ ์๊ณ ์์ด์ผ ํ๋ค๋ ์ ์์ POST์ ์ฐจ์ด์ ์ด ์์
๋ฆฌ์์ค๋ฅผ ์์ ํ ๋์ฒด
๊ธฐ์กด์ 10๋ฒ ๊ฒ์๊ธ์ด ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์๋ค๊ณ ํด๋ณด์
{
"title" : "hello",
"content" : "hi"
}
์ด ์ํฉ์์ ๋ค์๊ณผ ๊ฐ์ด PUT ์์ฒญ์ ํ๋ฉด
PUT /boards/10 HTTP/1.1
Content-Type: application/json
{
"title": "hello",
}
10๋ฒ ๊ฒ์๊ธ์ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ ๋์ฒด๋๋ค
{
"title" : "hello",
}
PATCH
- ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
- PUT๊ณผ ๋ฌ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ถ ๋ณ๊ฒฝํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค
- ์๋ ์์ ์ฒ๋ผ ์์ฒญ์ ๋ณด๋ด๋ฉด ๊ธฐ์กด ๋ฐ์ดํฐ ์ค title๋ง "hi"๋ก ๋ณ๊ฒฝํ๋ค.
- ์ฃผ์! PATCH๊ฐ ์ง์ ์๋๋ ์๋ฒ๊ฐ ์์ ์ ์์ → POST๋ก ํด๊ฒฐ
PATCH /boards/10 HTTP/1.1
Content-Type: application/json
{
"title": "hi",
}
DELETE
- ๋ฆฌ์์ค ์ญ์
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค ์์น๋ฅผ ์๊ณ ์์ด์ผํจ
DELETE /boards/10 HTTP/1.1
Host: localhost:8080
{
"title": "hi",
}
๊ธฐํ ๋ฉ์๋
- HEAD: GET๊ณผ ๋์ผํ์ง๋ง ๋ฉ์์ง ๋ถ๋ถ์ ์ ์ธํ๊ณ , ์ํ ์ค๊ณผ ํค๋๋ง ๋ฐํ
- OPTIONS: ๋์ ๋ฆฌ์์ค์ ๋ํ ํต์ ๊ธฐ๋ฅ ์ต์ (๋ฉ์๋)์ ์ค๋ช (์ฃผ๋ก CORS์์ ์ฌ์ฉ)
- CONNECT: ๋์ ์์์ผ๋ก ์๋ณ๋๋ ์๋ฒ์ ๋ํ ํฐ๋์ ์ค์
- TRACE: ๋์ ๋ฆฌ์์ค์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ฉ์์ง ๋ฃจํ๋ฐฑ ํ ์คํธ๋ฅผ ์ํ
HTTP ๋ฉ์๋์ ์์ฑ
- ์์ (Safe Methods)
- ๋ฉฑ๋ฑ(Idenpotent Methods)
- ์บ์๊ฐ๋ฅ(Cacheable Methods)
๊ฐ ๋ฉ์๋๊ฐ ๊ฐ์ง๋ ์์ฑ๋ค
https://ko.wikipedia.org/wiki/HTTP
์์ (Safe)
- ํธ์ถํด๋ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค.
๋ฉฑ๋ฑ(Idenpotent)
- f(f(x)) = f(x)
- ํ ๋ฒ ํธ์ถํ๋ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ ๊ฒฐ๊ณผ๋ ๊ฐ์์ผํจ.
- ๊ฐ์ ์์ฒญ์ ๋ํด์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
- ๋ฉฑ๋ฑ ๋ฉ์๋
- GET: ์ฌ๋ฌ๋ฒ ์กฐํํด๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์กฐํ๋๋ค.
- PUT: ๊ฒฐ๊ณผ๋ฅผ ๋์ฒด. ๋ฐ๋ผ์ ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ํด๋ ์ต์ข ๊ฒฐ๊ณผ๋ ๊ฐ์
- DELETE: ๊ฒฐ๊ณผ๋ฅผ ์ญ์ . ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ํด๋ ์ญ์ ๋ ๊ฒฐ๊ณผ๋ ๊ฐ์
- POST: ๋ฉฑ๋ฑ์ด ์๋. ๋ ๋ฒ ํธ์ถํ๋ฉด ๊ฐ์ ๊ฒฐ์ ๊ฐ ์ค๋ณตํด์ ๋ฐ์ํ ์ ์์
- GET์ ๋ํด์
์ค๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ฉด ๋ฉฑ๋ฑ์ด ์๋์ง ์๋?
๋ผ๋ ์๋ฌธ์ ์ด ์๊ธฐ์ง๋ง - ๋ฉฑ๋ฑ์ ์ธ๋ถ ์์ธ์ ์ํด์ ์ค๊ฐ์ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ๊น์ง ๊ณ ๋ คํ์ง ์๋๋ค.
- ๋ฐ๋ผ์ GET์ ๋ฉฑ๋ฑ์ด๋ผ๊ณ ํํํ ์ ์๋ค.
์บ์ ๊ฐ๋ฅ(Cacheable)
- ์๋ต ๊ฒฐ๊ณผ ๋ฆฌ์์ค๋ฅผ ์บ์ํด์ ์ฌ์ฉํด๋ ๋๋๊ฐ?
- GET, HEAD, POST, PATCH ์บ์๊ฐ๋ฅ
- ์ค์ ๋ก๋ GET, HEAD ์ ๋๋ง ์บ์๋ก ์ฌ์ฉํจ
- POST, PATCH๋ ๋ณธ๋ฌธ ๋ด์ฉ๊น์ง ์บ์ ํค๋ก ๊ณ ๋ คํด์ผํ๋๋ฐ ๊ตฌํ์ด ์ฝ์ง ์์.
๋ฐ์ํ