์ ๋ฌ ๋ฐฉ์
๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์์ ํฌ๊ฒ 2๊ฐ์ง์ด๋ค.
1. ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- GET
- ์ฃผ๋ก ๊ฒ์์ด๋ฅผ ๋ฃ๊ฑฐ๋ ์ ๋ ฌ ์กฐ๊ฑด์ ๋ฃ์ ๋ ์ฌ์ฉํ๋ค.
2. ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- POST, PUT, PATCH
- ํ์ ๊ฐ์ , ์ฃผ๋ฌธ, ๋ฆฌ์์ค ๋ฑ๋ก, ๋ฆฌ์์ค ๋ณ๊ฒฝ์ ์ฌ์ฉํ๋ค.
ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์กํ๋ ์ํฉ์๋ 4๊ฐ์ง๊ฐ ์๋ค.
- ์ ์ ๋ฐ์ดํฐ ์กฐํ
- ๋์ ๋ฐ์ดํฐ ์กฐํ
- HTML Form์ ํตํ ๋ฐ์ดํฐ ์ ์ก
- HTTP API๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
1. ์ ์ ๋ฐ์ดํฐ ์กฐํ - ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ๋ฏธ์ฌ์ฉ
- ์ด๋ฏธ์ง, ์ ์ ํ ์คํธ ๋ฌธ์ ์ ๋ฌ
- GET ์ฌ์ฉ
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์์ด ๋ฆฌ์์ค ๊ฒฝ๋ก๋ก ๋จ์ํ๊ฒ ์กฐํ ๊ฐ๋ฅ
ํด๋ผ์ด์ธํธ์์ “๋ณ” ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ด๋ฉด ์ถ๊ฐ ๋ฐ์ดํฐ๊ฐ ํ์์๋ค. URI ๊ฒฝ๋ก๋ง ๋ฃ์ผ๋ฉด ๋๋ค.
์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฌ ์์ด ๊ฒฝ๋ก๋ง ๋ฃ์ผ๋ฉด ์ด๋ฏธ์ง ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์ด์ ๋ณด๋ด์ค๋ค.
2. ๋์ ๋ฐ์ดํฐ ์กฐํ - ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ
“?q=hello&hI=ko” ์ด ๋ถ๋ถ์ด ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ๋ถ๋ถ
- ์ฃผ๋ก ๊ฒ์, ๊ฒ์ํ ๋ชฉ๋ก ์ ๋ ฌ ํํฐ์์ ์ฌ์ฉํ๋ค. - ์กฐํ ์กฐ๊ฑด์ ์ค์ฌ์ฃผ๋ ํํฐ, ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ์ ๋ ฌ ์กฐ๊ฑด์ ์ฌ์ฉํ๋ค.
- ์กฐํ๋ GET์ ์ฌ์ฉํ๋ฉฐ, GET์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ ์ ๋ฌํ๋ค.
๊ฒฝ๋ก์ ๊ฒ์์ด๋ ์ถ๊ฐ ์กฐ๊ฑด์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ ๋ฃ์ด ๋ณด๋ด๊ณ , ์๋ฒ๋ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ key=value ๋ก ๊บผ๋ด์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ณด๋ธ๋ค.
3. HTML Form ๋ฐ์ดํฐ ์ ์ก
1)POST์ ์ก - ์ ์ฅ
form submit(์ ์ก) ๋ฒํผ์ ๋๋ฅด๋ฉด ํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ์ค๋ฅธ์ชฝ HTTP ๋ฉ์์ง๋ฅผ ์์ฑํด์ค๋ค.
Content-Type: application/x-www-form-urlencoded
username=Kim&age=20
์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ฒ๋ผ ์๊ธด ๋ชจ์ต์ผ๋ก http body์ ๋ฃ๋๋ค.
์ง๊ธ๊น์ง๋ GET์ url๋ก ์น๋๊ฒ๋ง ํ๋๋ฐ, html form ํ๊ทธ๋ก ๋ฃ์ ์๋ ์๋ค.
2)GET์ ์ก-์ ์ฅ
๋ง์ฝ GET์ผ๋ก ๋ฐ๊ฟ์ ํผ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค๋ฉด, GET์ message body๋ฅผ ์์ฐ๋๊น, ์น ๋ธ๋ผ์ฐ์ ๋ HTTP ๋ฉ์์ง๋ฅผ GET์ฒ๋ผ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ๋ง๋ ๋ค.
POST๋ฉด message body์ ๋ฃ๊ณ , GET์ด๋ฉด URL ๊ฒฝ๋ก์ ๋ฃ๋๋ค.
ํ์ง๋ง GET์ ์กฐํ์๋ง ์ฌ์ฉํ๋ฏ๋ก ์ ๋ ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ์๋๋ค. ์กฐํ์ฉ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด ๊ด์ฐฎ๋ค.
3)ํ์ผ ์ ์ก - multipart/form-data
Content-Type์ ๊ธฐ๋ณธ๊ฐ์ application/x-www-form-urlencoded-multipart/form-data๋ก ํ๋ฉด byte๋ก ๋์ด์๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๊ฐ์ด ๋ณด๋ผ ์ ์๋ค. ๊ทธ๋ผ boundary๊ฐ ์๋์ผ๋ก ๊ฒฝ๊ณ๋ฅผ ์๋ผ์ค๋ค.
์ ๋ฆฌ
- HTML FORM submit์ POST ์ ์ก์ ๊ฒฝ์ฐ
ex) ํ์ ๊ฐ์ , ์ํ ์ฃผ๋ฌธ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ
- Content-Type: application/x-www-form-urlencoded ์ฌ์ฉ
form์ ๋ด์ฉ์ ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด์ ์ ์ก(key=value, ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์)
์ ์ก ๋ฐ์ดํฐ๋ฅผ url encoding ์ฒ๋ฆฌ, ex) abc๊น -> abc%EA%B9%80
- HTML FORM์ GET ์ ์ก๋ ๊ฐ๋ฅํ๋ค. (์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์์ผ๋ก)
- Content-Type: multipart/form-data
ํ์ผ ์ ๋ก๋ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ์ ์ก์ ์ฌ์ฉํ๋ค.
๋ค๋ฅธ ์ข ๋ฅ์ ์ฌ๋ฌ ํ์ผ๊ณผ ํผ์ ๋ด์ฉ ํจ๊ป ์ ์ก ๊ฐ๋ฅํ๋ค.(๊ทธ๋์ ์ด๋ฆ์ด multipart)
HTML Form ์ ์ก์ GET, POST๋ง ์ง์ํ๋ค.
4. HTTP API ๋ฐ์ดํฐ ์ ์ก
์ ๋ฆฌํ์๋ฉด
- ์๋ฒ๋ผ๋ฆฌ ์๋ก ํต์ ํ ๋ ์ฌ์ฉํ๋ค. - html ๊ฐ์ ๊ฒ์ด ์ ํ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ๋ง ์ ์กํ๋ค.
- ์ฑ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉํ๋ค.
- ์น ํด๋ผ์ด์ธํธ์ ํต์ ํ ๋ ์ฌ์ฉํ๋ค.
- 1) html์ form ์ ์ก ๋์ , ์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ ์ก = AJAX ํต์
- 2) react, vue ๊ฐ์ ์น ํด๋ผ์ด์ธํธ์ API ํต์ - POST, PUT, PATCH ์ฌ์ฉ ์: ๋ฉ์์ง ๋ฐ๋๋ก ๋ฐ์ดํฐ ์ ์ก
- GET ์ฌ์ฉ ์: ์กฐํ,์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ดํฐ ์ ๋ฌ (๋ฉ์์ง ๋ฐ๋ ํฌํจํ ์๋ ์์ง๋ง ์ค์ง์ ์ผ๋ก ์ฌ์ฉ ์ํ๋ค.)
- Content-Type:application/json์ ์ฃผ๋ก ์ฌ์ฉํ๋ค. ํ์คTEXT, XML, JSON์ด ์๋๋ฐ ํ์ฌ๋ JSON์ด ๋๋ถ๋ถ ์ฌ์ฉ๋๋ค.
HTTP API ์ค๊ณ ์์
(1) HTTP API - ์ปฌ๋ ์
POST ๊ธฐ๋ฐ ๋ฑ๋ก ex) ํ์ ๊ด๋ฆฌ API
(2) HTTP API - ์คํ ์ด
PUT ๊ธฐ๋ฐ ๋ฑ๋ก ex) ์ ์ ์ปจํ ์ธ ๊ด๋ฆฌ, ์๊ฒฉ ํ์ผ ๊ด๋ฆฌ๋ฆฌ
(3) HTML FORM
์น ํ์ด์ง ํ์ ๊ด๋ฆฌ, GET, POST๋ง ์ง์
(1) HTTP API ์ปฌ๋ ์
ex) ํ์ ๊ด๋ฆฌ ์์คํ ์ POST ๊ธฐ๋ฐ์ผ๋ก ๋ฑ๋กํด๋ณด์
- ํ์ ๋ชฉ๋ก → /members → GET
- ํ์ ๋ฑ๋ก → /members → POST
- ํ์ ์กฐํ → /members/{id} → GET
- ํ์ ์์ → /members/{id} → PATCH,PUT,POST
- ํ์ ์ญ์ → /members/{id} → DELETE
API๋ ๋ฆฌ์์ค๋ง ๊ด๋ฆฌํด์ผ ํ๊ณ , ์ด๋ป๊ฒ ํ ์ง๋ HTTP ๋ฉ์๋๋ก ์๋ ค์ค๋ค.
์์ ์์ PUT์ ์์ ํ ๋ฎ์ด์ฐ๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก ๋ถ๋ถ ์ ๋ฐ์ดํธ๋ฅผ ํ๋ PATCH๋ฅผ ์ฐ๋ ๊ฒ ๊ฐ์ฅ ์ข๋ค.
๊ฒ์๊ธ์ ์์ ํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์์ ํ ๋ฎ์ด์ธ ์ ์์ผ๋ฏ๋ก PUT์ ์ฌ์ฉํ ์ ์๊ณ ,
์ด๊ฒ๋ ์ ๊ฒ๋ ์ ๋งคํ๋ค๋ฉด POST๋ฅผ ์ฌ์ฉํ๋ค.
POST๋ก ์ ๊ท ์์ ๋ฑ๋ก
- ํด๋ผ์ด์ธํธ๋ ๋ฑ๋ก๋ ๋ฆฌ์์ค์ URI๋ฅผ ๋ชจ๋ฅธ๋ค.
- ์๋ฒ๊ฐ ์๋ก ๋ฑ๋ก๋ ๋ฆฌ์์ค URI๋ฅผ ์์ฑํด์ค๋ค.
Location: /members/100
100 ์ด๋ผ๋ ์๋ณ์๊ฐ ์๋ฒ์์ ๋ง๋ค์ด์ง๋ค.
- ์ปฌ๋ ์
์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋๋ ํ ๋ฆฌ๋ก, ์๋ฒ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ฉฐ ์ฌ๊ธฐ์ ์ปฌ๋ ์ ์ /members ๋ฅผ ์๋ฏธํ๋ค.
(2) HTTP API ์คํ ์ด
PUT์ผ๋ก ์ ๊ท ์์ ๋ฑ๋ก
- ํ์ผ ๋ชฉ๋ก → /files → GET
- ํ์ผ ์กฐํ → /files/{filename} → GET
- ํ์ผ ๋ฑ๋ก → /files/{filename} → PUT
- ํ์ผ ์ญ์ → /files/{filename} → DELETE
- ํ์ผ ๋๋ ๋ฑ๋ก → /files → POST
ํ์ผ์ ์๋ก ์ ๋ก๋ ํ ๋๋ PUT์ด ์ ํฉํ๋ค. ๊ธฐ์กด ํ์ผ์ด ์์ผ๋ฉด ์ง์ฐ๊ณ ๋ค์ ์ฌ๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
PUT์ ์์ ๋ฑ๋ก์ผ๋ก ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ POST๋ฅผ ์์๋ก ์ ํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค URI๋ฅผ ์๊ณ ์์ด์ผ ํ๋ค.
files/{filename} → filename ์ด๋ผ๋ ์๋ณ์๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์๊ณ ์์ด์ผ ํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ๋ฆฌ์์ค์ URI๋ฅผ ์ง์ ํ๊ณ ๊ด๋ฆฌํ๋ค.
POST๋ก ์์ฑํ ๋๋ ๋ฐ์ดํฐ๋ง ๋๊ธฐ๋ฉด ์๋ฒ๊ฐ ์์์ ๋ง๋ค์ด ๋ด๋ ค์ค๋ค.
- ์คํ ์ด
ํด๋ผ์ด์ธํธ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ์ ์ฅ์๋ก ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์๊ณ ๊ด๋ฆฌํ๋ฉฐ ์ฌ๊ธฐ์ ์คํ ์ด๋ /files ๋ฅผ ์๋ฏธํ๋ค.
๋๋ถ๋ถ POST๋ก ์์ฑํ๋ฉฐ, ํ์ผ๊ณผ ๊ฐ์ ํน์ํ ๊ฒฝ์ฐ์๋ง PUT์ ์ฌ์ฉํ๋ค.
(3)HTML FORM ์ฌ์ฉ
์์ํ HTML FORM๋ง ์ฌ์ฉํ๋ค๋ฉด GET, POST๋ง ์ธ ์ ์๋ค.
- ํ์ ๋ชฉ๋ก → /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
๊ฐ์ URI๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฉ์๋๋ง ๋ค๋ฅด๊ฒ ํ๋ ๊ฒ์ ์ ํธํ๋ค.
/members ๋ณด๋ค๋ /members/new ๋ฅผ ์ ํธํ๋ค๋ ๊ฒ
๋ฐ์ดํฐ์ ๋ฌธ์ ๊ฐ ์์ด์ ์๋ฒ์ ๋ณด๋ธ ๊ฐ์ ๋ค์ ํผ์ ๋์ ธ์ผํ ๋๊ฐ ์๋ค. ์ด๋ URI๊ฐ ํต์ผ๋์ด ์์ผ๋ฉด ๊ฒฝ๋ก๋ฅผ ์์ ํ์ง ์๊ณ ๋ ๊น๋ํ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
์์ ํผ๋ ์ค์ ์์ ํ๋ ๊ฒ ์๋๋ผ ํผ์ ๋ถ๋ฌ์ค๊ธฐ๋ง ํ ๋ฟ์ด๋ฏ๋ก GET์ ์ฌ์ฉํ๋ค.
(+) ์ปจํธ๋กค URI
HTML FORM์ delete๋ฅผ ์ฐ์ง ๋ชปํ๋ฏ๋ก ์ญ์ ํ ๋๋ ์ด์ฉ ์ ์์ด /delete ๋ฅผ ๋ถ์ฌ์ ์ปจํธ๋กค URI๋ผ๋ ํํ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
- GET, POST๋ง ์ง์ํ๋ฏ๋ก ์ ์ฝ์ด ์๋ค.
- ์ด๋ฐ ์ ์ฝ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ฌ๋ก ๋ ๋ฆฌ์์ค ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ค.
- POST์ /new, /edit, /delete ๊ฐ ์ปจํธ๋กค URI๊ฐ ๋๋ค.
- HTTP ๋ฉ์๋๋ก ํด๊ฒฐํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ฉฐ ์ต๋ํ ๋ฆฌ์์ค ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์ค๊ณํ๊ณ , ์ ๋ง ์๋ ๋๋ง ์ฌ์ฉํ๋ค.
(#)์ฐธ๊ณ ํ๋ฉด ์ข์ URI ์ค๊ณ ๊ฐ๋
๋ฌธ์(document)
๋จ์ผ ๊ฐ๋ : ํ์ผ ํ๋, ๊ฐ์ฒด ์ธ์คํด์ค, ๋ฐ์ดํฐ๋ฒ ์ด์ค row ๋ฑ ex) /members/100, /files/star.jpg
์ปฌ๋ ์ (collection)
์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋๋ ํ ๋ฆฌ๋ก ์๋ฒ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ ex) /members
์คํ ์ด(store)
ํด๋ผ์ด์ธํธ๊ฐ ๊ด๋ฆฌํ๋ ์์ ์ ์ฅ์๋ก ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์๊ณ ๊ด๋ฆฌ ex) /files
์ปจํธ๋กค๋ฌ(controller) (= ์ปจํธ๋กค URI)
๋ฌธ์, ์ปฌ๋ ์ , ์คํ ์ด๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ์ถ๊ฐ ํ๋ก์ธ์ค ์คํํ๋ฉฐ ๋์ฌ๋ฅผ ์ง์ ์ฌ์ฉ ex) /members/{id}/delete
์ ๋ฆฌํ์๋ฉด
ํ์ ์ปฌ๋ ์ ์ด๋ฏ๋ก /members, ์ฃผ๋ฌธ์ด๋ฉด /orders
์์ธ์ ๋ณด๋ /orders์์ ์ฃผ๋ฌธ๋ฒํธ๋ก ํํํ๋ค.
์ด๊ฒ๋ง์ผ๋ก๋ ์๋๋ฉด ์ปจํธ๋กค URI ์ฌ์ฉํ๋ค.
์ฆ, ๋ฌธ์์ ์ปฌ๋ ์ ์ผ๋ก ์ต๋ํ ํด๊ฒฐํ๊ณ , ์๋๋ฉด ์ปจํธ๋กค URI๋ก ํด๊ฒฐ
'๐ผ๋ฐฑ์ค๋ > HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
7. HTTP ํค๋ - ์ผ๋ฐํค๋ (0) | 2024.01.09 |
---|---|
6. HTTP ์ํ ์ฝ๋ (1) | 2024.01.09 |
4. HTTP API ๋ฉ์๋ (2) | 2024.01.09 |
3. HTTP ๊ธฐ๋ณธ (0) | 2024.01.09 |
2. URI์ ์น ๋ธ๋ผ์ฐ์ ์์ฒญ ํ๋ฆ (0) | 2024.01.09 |