[HTTP] 5.HTTP ๋ฉ์๋ ํ์ฉ
1. ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์ก
[๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์์ ํฌ๊ฒ 2๊ฐ์ง]
1) ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- GET
- ์ฃผ๋ก ์ ๋ ฌ ํํฐ (๊ฒ์์ด)
2) ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- POST, PUT, PATCH
- ํ์ ๊ฐ์ , ์ํ ์ฃผ๋ฌธ, ๋ฆฌ์์ค ๋ฑ๋ก, ๋ฆฌ์์ค ๋ณ๊ฒฝ
[4๊ฐ์ง ์ํฉ]
1) ์ ์ ๋ฐ์ดํฐ ์กฐํ (์ด๋ฏธ์ง, ์ ์ ํ ์คํธ ๋ฌธ์)
2) ๋์ ๋ฐ์ดํฐ ์กฐํ (์ฃผ๋ก ๊ฒ์, ๊ฒ์ํ ๋ชฉ๋ก์์ ์ ๋ ฌ ํํฐ-๊ฒ์์ด)
3) HTML Form์ ํตํ ๋ฐ์ดํฐ ์ ์ก (ํ์ ๊ฐ์ , ์ํ ์ฃผ๋ฌธ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ)
4) HTTP API๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก (ํ์ ๊ฐ์ , ์ํ ์ฃผ๋ฌธ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ + ์๋ฒ to ์๋ฒ, ์ฑ ํด๋ผ์ด์ธํธ, ์น ํด๋ผ์ด์ธํธ(Ajax)
1) ์ ์ ๋ฐ์ดํฐ ์กฐํ
<์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ๋ฏธ์ฌ์ฉ>
- GET ๊ฒฝ๋ก static/star.jpg ๋ค์ด๊ฐ๋ฉด ์๋ฒ์์ ์ด๋ฏธ์ง ์ฐพ์์ ํด๋ผ์ด์ธํธ์ ๋ด๋ ค์ค
- ์ด๋ฏธ์ง, ์ ์ ํ ์คํธ ๋ฌธ์
- ์กฐํ๋ GET ์ฌ์ฉ
- ์ ์ ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์์ด ๋ฆฌ์์ค ๊ฒฝ๋ก๋ก ๋จ์ํ๊ฒ ์กฐํ ๊ฐ๋ฅ
2) ๋์ ๋ฐ์ดํฐ ์กฐํ
<์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ>
์ ๋ฆฌ)
- ์ฃผ๋ก ๊ฒ์, ๊ฒ์ํ ๋ชฉ๋ก์์ ์ ๋ ฌ ํํฐ (๊ฒ์์ด)
- ์กฐํ ์กฐ๊ฑด์ ์ค์ฌ์ฃผ๋ ํํฐ, ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ์ ๋ ฌ ์กฐ๊ฑด์ ์ฃผ๋ก ์ฌ์ฉ
- ์กฐํ๋ GET ์ฌ์ฉ
- GET์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ
3) HTML Form ๋ฐ์ดํฐ ์ ์ก
<POST ์ ์ก - ์ ์ฅ>
* POST๋ฉด ๋ฉ์์ง ๋ฐ๋์ ์ฟผ๋ฆฌ ์ ๋ณด ์ ๋ฌ
* ๋ง์ฝ POST๊ฐ ์๋ GET์ผ๋ก ์ ๋ฌํ๋ค๋ฉด?
-> url ๊ฒฝ๋ก์ ๋ฃ์ด์ ์ฟผ๋ฆฌ๋ก ์ ๋ฌ
-> /save๋ POST ์ฌ์ฉํด์ผํจ
-> GET์ ๋จ์ ์กฐํ์๋ง!!
+ ํ์ผ ์ ์กํ ๋ (multipart/form-data)
์ฌ๋ฌ type ๋ฐ์ดํฐ (text, file) ์ ์ ์กํ ๋ ์ฌ์ฉ
์ฃผ๋ก ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ์ ์กํ ๋ ์ฌ์ฉ
์ ๋ฆฌ)
HTML Form submit์ POST ์ ์ก
์) ํ์ ๊ฐ์
, ์ํ ์ฃผ๋ฌธ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ
Content-Type: application/x-www-form-urlencoded ์ฌ์ฉ - form์ ๋ด์ฉ์ ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด์ ์ ์ก(key=value, ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์)
- ์ ์ก ๋ฐ์ดํฐ๋ฅผ url encoding ์ฒ๋ฆฌ
์) abc๊น -> abc%EA%B9%80 HTML Form์ GET ์ ์ก๋ ๊ฐ๋ฅ
Content-Type: multipart/form-data - ํ์ผ ์
๋ก๋ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ์ ์ก์ ์ฌ์ฉ
- ๋ค๋ฅธ ์ข ๋ฅ์ ์ฌ๋ฌ ํ์ผ๊ณผ ํผ์ ๋ด์ฉ ํจ๊ป ์ ์ก ๊ฐ๋ฅ(๊ทธ๋์ ์ด๋ฆ์ด multipart) ์ฐธ๊ณ : HTML Form ์ ์ก์ GET, POST๋ง ์ง์ |
4) HTTP API๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก (ํ์ ๊ฐ์ , ์ํ ์ฃผ๋ฌธ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ + ์๋ฒ to ์๋ฒ, ์ฑ ํด๋ผ์ด์ธํธ, ์น ํด๋ผ์ด์ธํธ(Ajax)
<POST ์ ์ก - ์ ์ฅ>
์ ๋ฆฌ)
์๋ฒ to ์๋ฒ
- ๋ฐฑ์๋ ์์คํ
ํต์
์ฑ ํด๋ผ์ด์ธํธ - ์์ดํฐ, ์๋๋ก์ด๋
์น ํด๋ผ์ด์ธํธ - HTML์์ Form ์ ์ก ๋์ ์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ํตํ ํต์ ์ ์ฌ์ฉ(AJAX)
์) React, VueJs ๊ฐ์ ์น ํด๋ผ์ด์ธํธ์ API ํต์ POST, PUT, PATCH: ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ์ก GET: ์กฐํ, ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ดํฐ ์ ๋ฌ Content-Type: application/json์ ์ฃผ๋ก ์ฌ์ฉ (์ฌ์ค์ ํ์ค) - TEXT, XML, JSON ๋ฑ๋ฑ
|
2. HTTP API ์ค๊ณ ์์
1) HTTP API - ์ปฌ๋ ์
- POST ๊ธฐ๋ฐ ๋ฑ๋ก
- ex) ํ์ ๊ด๋ฆฌ API ์ ๊ณต
2) HTTP API - ์คํ ์ด
- PUT ๊ธฐ๋ฐ ๋ฑ๋ก
- ex) ์ ์ ์ปจํ ์ธ ๊ด๋ฆฌ, ์๊ฒฉ ํ์ผ ๊ด๋ฆฌ
3) HTML FORM ์ฌ์ฉ
- ์น ํ์ด์ง ํ์ ๊ด๋ฆฌ
- GET, POST๋ง ์ง์
[ํ์ ๊ด๋ฆฌ ์์คํ ]
1) API ์ค๊ณ - POST ๊ธฐ๋ฐ ๋ฑ๋ก
ํ์ ๋ชฉ๋ก /members -> GET ํ์ ๋ฑ๋ก /members -> POST ํ์ ์กฐํ /members/{id} -> GET ํ์ ์์ /members/{id} -> PATCH > PUT > POST * ๊ฒ์๊ธ ์์ ํ ๋ PUT์ด ์ข์ ์๋ ํ์ ์ญ์ /members/{id} -> DELETE |
POST (์ ๊ท ์์ ๋ฑ๋ก ํน์ง)
- ํด๋ผ์ด์ธํธ๋ ๋ฑ๋ก๋ ๋ฆฌ์์ค์ URI๋ฅผ ๋ชจ๋ฆ
ํ์๋ฑ๋ก /members -> POST
POST/members
- ์๋ฒ๊ฐ ์๋ก ๋ฑ๋ก๋ ๋ฆฌ์์ค URI๋ฅผ ์์ฑํด์ค
HTTP/1.1 201 Created Location: /members/100
- ์ปฌ๋ ์ (Collections)
์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋๋ ํ ๋ฆฌ
์๋ฒ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ
์ฌ๊ธฐ์ ์ปฌ๋ ์ ์ /members
2) API ์ค๊ณ - PUT ๊ธฐ๋ฐ ๋ฑ๋ก
ํ์ผ ๋ชฉ๋ก /files -> GET ํ์ผ ์กฐํ /files/{filename} -> GET ํ์ผ ๋ฑ๋ก /files/{filename} -> PUT ํ์ผ ์ญ์ /files/{filename} -> DELETE ํ์ผ ๋๋ ๋ฑ๋ก /files -> POST |
PUT (์ ๊ท ์์ ๋ฑ๋ก ํน์ง)
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค URI๋ฅผ ์๊ณ ์์ด์ผ ํจ
ํ์ผ ๋ฑ๋ก / files/{filename} -> PUT
PUT /files/star.jpg
- ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ๋ฆฌ์์ค์ URI๋ฅผ ์ง์
- ์คํ ์ด (store)
ํด๋ผ์ด์ธํธ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ์ ์ฅ์
ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์๊ณ ๊ด๋ฆฌ
์ฌ๊ธฐ์ ์คํ ์ด๋ /files
* ๋๋ถ๋ถ POST๊ธฐ๋ฐ / PUT ๋น์ค ๋ฎ์
3) HTML FORM ์ฌ์ฉ
- HTML FORM์ GET, POST๋ง ์ง์
- AJAX๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํด์ ํด๊ฒฐ ๊ฐ๋ฅ -> ํ์ API ์ฐธ๊ณ
- ์ฌ๊ธฐ์๋ ์์ HTML, HTML FORM
- GET, POST๋ง ์ง์ํ๋ฏ๋ก ์ ์ฝ์์
API ์ค๊ณ - HTML FORM
ํ์ ๋ชฉ๋ก /members -> GET ํ์ ๋ฑ๋ก ํผ /members/new -> GET ํ์ ๋ฑ๋ก /members/new, /members -> POST ํ์ ์กฐํ /members/{id} -> GET ํ์ ์์ ํผ /members/{id]/edit -> GET ํ์ ์์ /members/{id}/edit, /members/{id} -> POST ํ์ ์ญ์ /members/{id}/delete -> POST |
* ๋ฑ๋ก ํผ๊ณผ ๋ฑ๋ก ๊ฐ์ด /new๋ก ํ๋ ์ด์ -> ๋ฌธ์ ๊ฐ ์์ด์ POST ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ํ์๊ฒฐ๊ณผ ํผ์ผ๋ก ๋ค์ ๋ณด๋ด์ผํ๋ ๊ฒฝ์ฐ ๊ฒฝ๋ก๊ฐ ๊ฐ์ผ๋ฉด ๋ค์ ํผ์ผ๋ก ๋์๊ฐ ์ ์์
- GET, POST๋ง ์ง์
- ์ปจํธ๋กค URI
GET, POST๋ง ์ฌ์ฉ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ ์ฝ์ด ์์
์ด๋ฐ ์ ์ฝ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ฌ๋ก ๋ ๋ฆฌ์์ค ๊ฒฝ๋ก ์ฌ์ฉ
POST์ /new, /edit, /delete๊ฐ ์ปจํธ๋กค URI
HTTP ๋ฉ์๋๋ก ํด๊ฒฐํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ ์ฌ์ฉ (HTTP API ํฌํจ)
[์ฐธ๊ณ ํ๋ฉด ์ข์ URI ์ค๊ณ ๊ฐ๋ ] : https://restfulapi.net/resource-naming
1) ๋ฌธ์(document) ๋จ์ผ ๊ฐ๋ (ํ์ผ ํ๋, ๊ฐ์ฒด ์ธ์คํด์ค, ๋ฐ์ดํฐ๋ฒ ์ด์ค row) ์) /members/100, /files/star.jpg 2) ์ปฌ๋ ์ (collection) ์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋๋ ํฐ๋ฆฌ ์๋ฒ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ ์) /members 3) ์คํ ์ด(store) ํด๋ผ์ด์ธํธ๊ฐ ๊ด๋ฆฌํ๋ ์์ ์ ์ฅ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์๊ณ ๊ด๋ฆฌ ์) /files 4) ์ปจํธ๋กค๋ฌ(controller), ์ปจํธ๋กค URI ๋ฌธ์, ์ปฌ๋ ์ , ์คํ ์ด๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ์ถ๊ฐ ํ๋ก์ธ์ค ์คํ ๋์ฌ๋ฅผ ์ง์ ์ฌ์ฉ ์) /members/{id}/delete |
'๐จโ๐ป Web Development > HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTTP] 7.HTTP ํค๋1 - ์ผ๋ฐํค๋ (0) | 2023.03.03 |
---|---|
[HTTP] 6.HTTP ์ํ์ฝ๋ (0) | 2023.03.03 |
[HTTP] 4.HTTP ๋ฉ์๋ (0) | 2023.03.02 |
[HTTP] 3.HTTP ๊ธฐ๋ณธ (0) | 2023.03.02 |
[HTTP] 2.URI์ ์น๋ธ๋ผ์ฐ์ ์์ฒญ ํ๋ฆ (0) | 2023.03.02 |
์ต๊ทผ๋๊ธ