์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Security
- ์ฑ๊ฐ๋ฐ
- MVC
- springboot
- BBangting
- ์์ฒญ
- log
- Logging
- kotlin
- Spring
- docker
- Inflearn
- HTTP
- Firebase
- ๊น์ํ
- JPA
- Community-App
- Mapping
- PROJECT
- MySQL
- API
- BPM
- Today
- Total
yeon's blog
[HTTP ์น ๊ธฐ๋ณธ ์ง์] HTTP ๋ฉ์๋ - ๋ฉ์๋ ์ข ๋ฅ (GET, POST, PUT, PATCH, DELETE) ๋ณธ๋ฌธ
[HTTP ์น ๊ธฐ๋ณธ ์ง์] HTTP ๋ฉ์๋ - ๋ฉ์๋ ์ข ๋ฅ (GET, POST, PUT, PATCH, DELETE)
yeonii 2023. 12. 3. 14:46๐ฑ HTTP Method - ๋ฉ์๋ ์ข ๋ฅ
HTTP ์ฃผ์ ๋ฉ์๋ ์ข ๋ฅ
- GET : ๋ฆฌ์์ค๋ฅผ ์กฐํ
- POST : ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ์ฒ๋ฆฌ
- PUT : ๋ฆฌ์์ค๋ฅผ ๋์ฒด, ํด๋น ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ
- PATCH : ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
- DELETE : ๋ฆฌ์์ค ์ญ์
HTTP ๊ธฐํ ๋ฉ์๋ ์ข ๋ฅ
- HEAD : GET๊ณผ ๋์ผํ์ง๋ง ๋ฉ์์ง ๋ถ๋ถ์ ์ ์ธํ๊ณ ์ํ ์ค๊ณผ ํค๋๋ง ๋ฐํ
- OPTIONS : ๋์ ๋ฆฌ์์ค์ ๋ํ ํต์ ๊ฐ๋ฅ ์ต์ (๋ฉ์๋)๋ฅผ ์ค๋ช (์ฃผ๋ก CORS์์ ์ฌ์ฉ)
- CONNECT: ๋์ ์์์ผ๋ก ์๋ณ๋๋ ์๋ฒ์ ๋ํ ํฐ๋ ์ค์
- TRACE : ๋์ ๋ฆฌ์์ค์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ฉ์์ง ๋ฃจํ๋ฐฑ ํ ์คํธ๋ฅผ ์ํ
- * CONNECT, TRACE๋ ๊ฑฐ์ ์ฌ์ฉํ์ง X
1. GET: ๋ฆฌ์์ค ์กฐํ
- ํน์ ํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์์ฒญํ๋ค.
- GET ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ง ์ฌ์ฉํด์ผ ํ๋ค.
- ์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ query string์ ํตํด ์ ๋ฌ
- GET ์์ฒญ์ ๋ฉ์์ง ๋ฐ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์๋ ์์ง๋ง ์ด๋ ๊ถ์ฅํ์ง ์์ผ๋ฏ๋ก ์ฌ์ฉํ์ง ๋ง์.
- ์บ์๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋ฉฑ๋ฑํ๋ค.
2. POST: ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ๋ก ๋ฑ๋ก์ ์ฌ์ฉ
- ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ค.
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ๋ฌํ๋ค.
- ์๋ฒ๋ ๋์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.(๋ฐ๋๋ฅผ ํตํด ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ธฐ๋ฅ ์ํ)
- ๋ฉ์์ง ๋ฐ๋ ํ์ (html, json..)์ Content-Type์ ๋ํ๋ธ๋ค.
- ๋ฉฑ๋ฑ ์๋๋ค.
- ๊ฒฐ์ ๋ฅผ ์๊ฐํด๋ณด๋ฉด ํ๋ฒ ํธ์ถํ๊ณ ๋๋ฒ ํธ์ถํ๋ ๊ฒ์ ๋ค๋ฅด๋ค.
- ์ฃผ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ก ์ ๊ท ๋ฆฌ์์ค ๋ฑ๋กํ๊ฑฐ๋ ๋ณ๊ฒฝ๋ ํ๋ก์ธ์ค๋ฅผ ๋ฐ๊ฟ ๋ ๋ง์ด ์ด์ฉํ๋ค.
POST ๊ธฐ๋ฅ
- ์ ๋ฆฌ์์ค ์์ฑ(๋ฑ๋ก)
- POST๋ ๋ฆฌ์์ค์ URI๋ฅผ ๋ชจ๋ฅด์ง๋ง ์๋ฒ๊ฐ ์๋ก ๋ฑ๋ก๋ ๋ฆฌ์์ค URI๋ฅผ ์์ฑํด์ค๋ค.
- ์ด๋ ๊ฒ ์๋ฒ๊ฐ ๋ฆฌ์์ค URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ปฌ๋ ์ (Collection)์ด๋ผ๊ณ ํ๋ฉฐ, ์ปฌ๋ ์ ์ /members๋ฅผ ๋งํ๋ค.
- ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌโจ
- ํ๋ก์ธ์ค์ ์ํ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ -> ์) ๊ฒฐ์ ์๋ฃ -> ๋ฐฐ๋ฌ์์ -> ๋ฐฐ๋ฌ์๋ฃ
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์์ค๋ง ๊ฐ์ง๊ณ URI๋ฅผ ์ค๊ณํ๋ ๊ฒ์ด ์ด์ฑ์ ์ด์ง๋ง, ์ด์ฉ ์ ์๋ ๊ฒฝ์ฐ ์ปจํธ๋กค URI๋ก ์ค๊ณ (์ด์ฉ ์ ์์ด ๋์ฌ๊ฐ ๋ค์ด๊ฐ ์๋ ์์)
- ์) POST/orders/{orderId}/start-delivery (์ปจํธ๋กค URI)
- ๋ค๋ฅธ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ
- ajax๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ๋ฉ์์ง ๋ฐ๋์ ๋ด๊ณ ์ถ์ด์ POST๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
- ํ์ง๋ง ์กฐํํ ๋๋ ์ ๋งํ๋ฉด GET์ ์ฌ์ฉํ์.
- ๊ทธ ์ด์ ๋ ์บ์ฑ!
3. PUT: ๋ฆฌ์์ค ๋์ฒด, ํด๋น ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ
1. ๋ฆฌ์์ค๊ฐ ์์ ๊ฒฝ์ฐ -> ๋ฎ์ด์
2. ๋ฆฌ์์ค๊ฐ ์์ ๊ฒฝ์ฐ -> ์์ฑ
- ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ , ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ๋ฆฌ์์ค๋ฅผ ์์ ํ ๋์ฒดํ๋ค. (๋ฎ์ด๋ฒ๋ฆฐ๋ค.)
- POST์์ ์ ์ผํ ์ฐจ์ด์ ์ PUT์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ ์์น๋ฅผ ์๊ณ URI๋ฅผ ๋ฑ ์ง์ ํ๋ค. ex) /members/100
- ์ด์ฒ๋ผ ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค URI๋ฅผ ์๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ ์คํ ์ด(Store)๋ผ๊ณ ํ๋ฉฐ, ์คํ ์ด๋ /members๊ฐ ๋๋ค.
- ํ์ง๋ง POST๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ ์์น๋ฅผ ์์ง ๋ชปํ๊ณ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค. ex) /members
- ๋ฉฑ๋ฑํ๋ค.
PUT /members/100 HTTP/1.1
Host: example.com
Content-type: application/json
{
"name": "minsu",
"age": 20
}
โ ์ ๊น !
๋ฆฌ์์ค๋ฅผ ์์ ํ ๋์ฒดํ๋ค๋๊ฒ ๋ฌด์จ ๋ง์ผ๊น?
๋ง์ฝ ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ์๋์ ๊ฐ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
{
"name": "minsu",
"age": 20
}
์ฌ๊ธฐ์ PUT ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ age๋ง 30์ผ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๊น?
PUT /members/100 HTTP/1.1
Host: example.com
Content-type: application/json
{
"age": 30
}
→ age๋ง ์์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ json ๋ฐ์ดํฐ๋ age๋ง ๋๊ฒจ์ 30์ผ๋ก ๋ณ๊ฒฝํ๋ค.
๊ทธ๋ฌ๋ฉด PUT์ ์์ ํ ๋์ฒด๋๋ค๋ ํน์ง ๋๋ฌธ์ name์ด๋ผ๋ ํ๋๋ ์์ด์ง๊ณ age๋ง ๋จ๊ฒ๋๋ค.
๋ง์ฝ ๋ด๊ฐ ํ์๊ฐ์ ์ ํ๊ณ ํ์์์ ์ ๋์ด๋ง ์์ ํ๊ณ ์ถ์๋ฐ PUT ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋์ ์์ด๋, ๋น๋ฐ๋ฒํธ, ์ด๋ฉ์ผ... ์ด๋ฌํ ์ค์ํ ์ ๋ณด๋ค์ ๋ชจ๋ ์์ ์ ์๋ค. ๐จ
4. PATCH: ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
๋ด๊ฐ ์๋ํ๋๋ก ๋ฆฌ์์ค์ ๋ถ๋ถ๋ง ์์ ๋๊ฒ ํ๋ ค๋ฉด ๋ฐ๋ก PATCH๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
PATCH /members/100 HTTP/1.1
Host: example.com
Content-type: application/json
{
"age": 30
}
๊ทธ๋ฌ๋ฉด ์์ ๊ฐ์ด age๋ง 30์ผ๋ก ๋ณ๊ฒฝํด๋ ๋ฐ์ดํฐ๋ name๊ณผ age ๋ชจ๋ ๊ทธ๋๋ก ๋จ๊ฒ๋๋ค.
- PATCH๋ ๋ฉฑ๋ฑ์ด ๋๋๋ก ํ ์ ์๊ณ , ๋ฉฑ๋ฑ์ด ์๋๊ฒ ํ ์๋ ์๋ค.
- ์๋ฅผ ๋ค์ด๋ณด์.
- ์ฐธ๊ณ : https://www.inflearn.com/questions/110644
{
"age": 22
}
์ด๊ฒ์ ๋ฉฑ๋ฑ์ด๋ค.
ํ์ง๋ง ์๋๋ ๋ฉฑ๋ฑ์ด ์๋๋ค.
{
"age": 22,
"calc": add,
"plusNumber": 1
}
์ด๊ฒ์ ๊ณ์ ๋ฉ์๋๋ฅผ ์ํํ ๋๋ง๋ค +1 ๋ํ๋ ์ํ์ ํ๋ค๊ณ ํ์ ๋ age์ ๊ฐ์ด ๋ณํ๋ค.
5. DELETE: ๋ฆฌ์์ค ์ญ์
- ์ง์ ํ ๋ฆฌ์์ค๋ฅผ ์ญ์
- ๋ฉฑ๋ฑํ๋ค.
DELETE /members/100 HTTP/1.1
Host: example.com
์ ๋ฆฌ (POST, PUT, PATCH)
- POST๋ ๋ฆฌ์์ค์ ์์น๋ฅผ ์์ง ๋ชปํด๋ ์๋์ผ๋ก ์์ฑํด์ค๋ค.
- PUT์ ๋ฆฌ์์ค์ ์์น๋ฅผ ์๊ณ ์๊ณ , ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ณ ์์ ํ ๋์ฒดํ๊ธฐ ๋๋ฌธ์ ์ค์ํ ๋ฐ์ดํฐ๋ PUT์ ์ฌ์ฉํ๋ฉด ์๋๋ค.
- ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ถ ์์ ํ๋ ค๋ฉด PATCH๋ฅผ ์ฌ์ฉํ๋ค.
โ Question
1. ๋ฐฐ๋ฌ ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋ PATCH๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ์ด ์๋๊ฐ?
๋ฐฐ๋ฌ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค๋ ๊ฒ์ ๋จ์ํ ํด๋น ๋ฆฌ์์ค์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ์ ๋๋ก ๋๋๋๊ฒ, ์๋๋ผ ๋ด๋ถ์์ ๋งค์ฐ ํฐ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ค.
์ด๋ ๊ฒ ํด๋น ๋ฆฌ์์ค๋ง ๋ณ๊ฒฝํ๋๊ฒ ์๋๋ผ ๋ด๋ถ ํ๋ก์ธ์ค๋ฅผ ์คํํด์ผ ํ ๋๋ PATCH ๋ณด๋ค๋ POST๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋จ์ํ ํ์ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ฒ๋ผ ํน์ ๋ฆฌ์์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ๋ PATCH๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ถ๊ฐ๋ก,
POST /orders/{orderId}/delivery/{๋ฐฐ๋ฌ ์ํ๊ฐ} ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ค๊ณํ๊ธฐ๊ฐ ์ข ์ ๋งคํ ์ ์ด ์ค๋ฌด์์๋ ๋ฐฐ๋ฌ ์ํ๊ฐ์ ๋จ์ํ ๋ฐ๊พธ๋๊ฒ ์๋๋ผ ๋ฐฐ๋ฌ ์ํ์ ๋ฐ๋ฅธ ์ ๋ฌ ๋ฐ์ดํฐ๊ฐ ๊ฐ๊ฐ ๋ค๋ฅผ ํ์จ์ด ๋งค์ฐ ๋๋ค.
์๋ฅผ ๋ค์ด์ ๋ฐฐ๋ฌ์์ ์ ๋ฌํ๋ ๋ฐ์ดํฐ์ ์ทจ์์์ ์ ๋ฌํ๋ ๋ฐ์ดํฐ๊ฐ ๋งค์ฐ ๋ค๋ฅผ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ค๋ฅด๊ฒ ์ ์๋๋๊ฒ ๋ ๋์ ์ค๊ณ์ผ ์ ์๋ค.
POST /orders/{orderId}/delivery/๋ฐฐ๋ฌ
{๋ฐ์ดํฐA, ๋ฐ์ดํฐB, ๋ฐ์ดํฐC}
POST /orders/{orderId}/delivery/์ทจ์
{๋ฐ์ดํฐD,๋ฐ์ดํฐE}
2. /{id}๊ฐ ์๋ฏธํ๋ ๊ฒ์?
https://www.inflearn.com/questions/517777/id-%EA%B0%80-%EB%AD%98%EA%B9%8C%EC%9A%94
path (/members/1)์ query (/members?name='david')๋ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ํจ๊ป ์ฐ์ธ๋ค.
path๋ ์ฃผ๋ก ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ , query๋ ์ฃผ๋ก ๋น๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
https://velog.io/@jcinsh/Query-string-path-variable
์์ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ๋ฐ๋ฅธ URL ์ค๊ณ์ ๋ํด ์์๋ณด์.
3. ํ์ ์ ๋ณด๋ฅผ ์์ ํ ๋, PATCH๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๊ฒฝ๋๋ ํ๋๊ฐ ๋ฌด์์ด๋์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๋ค ๋ฐ๋ก ์์ฑํด์ผํ๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋๋ ์ฝ๋๊ฐ ๋ง์์ง๋ค. ๊ทธ๋์ PUT์ผ๋ก ์ ์ฒด๋ฅผ ๋ฎ์ด์ฐ๊ฒ๋ ํ๋๋ ํ๋์ ์ ๋ณด๋ง ๋ณ๊ฒฝํด๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ผํ๋ ๋นํจ์จ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ๋ง์ฝ์ PATCH๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์ด๋ค ์์ผ๋ก ๊ตฌํํด์ผ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์งค ์ ์์๊น?
update ์ฟผ๋ฆฌ๋ฅผ ๋์ ์ฟผ๋ฆฌ๊ฐ ๋๋๋ก ๊ตฌ์ฑํ์๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด ํด๋ผ์ด์ธํธ์์๋ ๋ณ๊ฒฝ๋ ๊ฐ๋ง ์๋ฒ์ ๋๊ธฐ๊ณ , ์๋ฒ์์๋ ํ๋์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ update set ์กฐ๊ฑด์ผ๋ก ์ถ๊ฐํ๊ณ , ๊ฐ์ด null์ธ ๊ฒฝ์ฐ์๋ update set ์กฐ๊ฑด์์ ์ ์ธํ๋ ์์ผ๋ก ๋ง๋ค๋ฉด ๋๋ค.
(๋์ ์ฟผ๋ฆฌ์ ๋ํด ๊ณต๋ถํด๋ณด์!!!)
4. POST, PUT ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์์ฑํ ์ ์๋๋ฐ ๋์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ?
https://www.inflearn.com/questions/525579/post%EC%99%80-put
POST๋ ๋ฆฌ์์ค์ ์์ฑ์, PUT์ ๋ฆฌ์์ค์ ๋์ฒด(replace)๋ฅผ ์๋ฏธํ๋ค.
๊ฐ๋ น, POST๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ๋๋ง๋ค ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ์์ฑํ ๋ฆฌ์์ค์ ์์ด๋๋ฅผ ๋ฐํํ๋ค. ๊ทธ๋์ ๊ฐ์ ์์ฒญ์ ๋ฐ๋ณตํ๋ฉด ๋ฆฌ์์ค ์์ด๋๊ฐ ์๋กญ๊ฒ ๋ฐ๋๋๋ค.
๋ฐ๋ฉด PUT์ ๋ฆฌ์์ค์ ๋์ฒด์ด๊ธฐ์, ์ฒ์ ๋ฆฌ์์ค๊ฐ ์๋ค๋ฉด ์๋ก ์์ฑํ ๋ฆฌ์์ค ์์ด๋๋ฅผ ๋ฐํํ๊ณ , ์ดํ์ ๊ณ์ ๊ฐ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ฒ์ ์์ฑํ๋ ๋ฆฌ์์ค์ ์์ด๋๋ง ๋ฐํํฉ๋๋ค.