5. HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ

2021. 1. 3. 14:04ใ†๐ŸŒ Web

 

๋ณธ ํฌ์ŠคํŒ…์€ ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค, ๊น€์˜ํ•œ ๋‹˜์˜ '๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹' ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ• ํ›„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

 

 

1. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก

-> ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹์€ ํฌ๊ฒŒ 2๊ฐ€์ง€:

  • ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก
  • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก

-> ๋ฐ์ดํ„ฐ ์ „์†ก ์ƒํ™ฉ์€ ํฌ๊ฒŒ 4๊ฐ€์ง€

  • ์ •์  ๋ฐ์ดํ„ฐ ์กฐํšŒ: ์ด๋ฏธ์ง€, ์ •์  ํ…์ŠคํŠธ ๋ฌธ์„œ
  • ๋™์  ๋ฐ์ดํ„ฐ ์กฐํšŒ: ์ฃผ๋กœ ๊ฒ€์ƒ‰, ๊ฒŒ์‹œํŒ ๋ชฉ๋ก์—์„œ ์ •๋ ฌ ํ•„ํ„ฐ(๊ฒ€์ƒ‰์–ด)
  • HTML Form ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก: ํšŒ์›๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
  • HTTP API ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก: ํšŒ์›๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ + ์„œ๋ฒ„to์„œ๋ฒ„, ์•ฑ ํด๋ผ์ด์–ธํŠธ, ์›น ํด๋ผ์ด์–ธํŠธ

2. ์ •์  ๋ฐ์ดํ„ฐ ์กฐํšŒ

-> ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฏธ์‚ฌ์šฉ ( ๊ทธ๋ ‡๋‹ค๊ณ  ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋„ ์•Š์•„ -> ์กฐํšŒ๋Š” GET ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ)

=> ๋‹จ์ˆœ URI(๊ฒฝ๋กœ) ๋งŒ์œผ๋กœ ์กฐํšŒ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์— ํ•ด๋‹น

 

3. ๋™์  ๋ฐ์ดํ„ฐ ์กฐํšŒ (GET๋ฉ”์„œ๋“œ ์‚ฌ์šฉ)

-> ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ. ์•„๋ž˜์™€ ๊ฐ™์€ URI๋ฅผ ํ†ตํ•ด ์ ‘์†: ์„œ๋ฒ„๋กœ HTTP message ๋˜์ง„๋‹ค.

 

-> ์ฃผ๋กœ ๊ฒ€์ƒ‰, ๊ฒŒ์‹œํŒ ๋ชฉ๋ก์—์„œ ์ •๋ ฌํ•„ํ„ฐ (๊ฒ€์ƒ‰์–ด)

-> ์กฐํšŒ ์กฐ๊ฑด์„ ์ค„์—ฌ์ฃผ๋Š” ํ•„ํ„ฐ, ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์ •๋ ฌ ์กฐ๊ฑด์— ์ฃผ๋กœ ์‚ฌ์šฉ

 

 

4. HTML Form ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก (POST ๋ฉ”์„œ๋“œ)

๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ํ†ตํ•ด ์ „์†ก

-> html form ํƒœ๊ทธ ๋‚ด๋ถ€์— ๊ฐ’์„ ์ž…๋ ฅํ•˜์—ฌ ์ €์žฅ๊นŒ์ง€ ํ•  ๊ฒฝ์šฐ: ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ์ „์†ก

-> POST ๋ฉ”์„œ๋“œ๋กœ ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’์„ ์„œ๋ฒ„์— ์ „์†กํ•œ๋‹ค. -> ์ด ๊ฒฝ์šฐ kim, 20๊ฐ’์€ ์„œ๋ฒ„์— ์ €์žฅ๋œ๋‹ค.

 

-> Content-Type: applications/x-www-form-urlencoded ์‚ฌ์šฉ

  • form์˜ ๋‚ด์šฉ์„ ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ์ „์†ก (์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹)
  • ์ „์†ก ๋ฐ์ดํ„ฐ๋ฅผ url encoding ์ฒ˜๋ฆฌ

5. HTML Form ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก (POST ๋ฉ”์„œ๋“œ) + multipart/form-data

  • ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒŒ์ผ ์—…๋กœ๋“œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, formํƒœ๊ทธ ๋‚ด๋ถ€์— ์„ ์–ธํ•ด์ค€๋‹ค.
<form enctype = 'multipart/form-data'>
...
</form>
  • ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์—ฌ๋Ÿฌ ํŒŒ์ผ๊ณผ ํผ์˜ ๋‚ด์šฉ์„ ํ•จ๊ป˜ ์ „์†ก ๊ฐ€๋Šฅ (multipart)

 

6. HTML Form ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก (GET ๋ฉ”์„œ๋“œ)

-> ๋‹จ์ˆœ ์กฐํšŒ์˜ ๊ฒฝ์šฐ, form ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅํ•œ ๊ฐ’์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

-> ๋‹จ, POST ๋ฉ”์„œ๋“œ ์ฒ˜๋Ÿผ ๊ฐ’์„ ์„œ๋ฒ„์— ์ €์žฅํ•  ์ˆœ ์—†๋‹ค (GET์€ ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ(์ƒ์„ฑ)์ด ๋ฐœ์ƒํ•˜๋Š” ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ)

 

7. ์ฆ‰, HTML form ์ „์†ก์€ GET, POST๋งŒ ์ง€์›

 

8. HTTP API ๋ฐ์ดํ„ฐ ์ „์†ก

 

 

HTTP API ์„ค๊ณ„ ์˜ˆ์‹œ

9. EX) ํšŒ์› ๊ด€๋ฆฌ ์‹œ์Šคํ…œ - POST ๊ธฐ๋ฐ˜ ๋“ฑ๋ก

  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋“ฑ๋ก๋  ๋ฆฌ์†Œ์Šค(ํšŒ์›)์˜ URI๋ฅผ ๋ชจ๋ฅธ๋‹ค.
  • ์ฆ‰, ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ ๋“ฑ๋ก๋œ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค. (ex /members/100 <- ์ด 100์ด๋ผ๋Š” ๋ฆฌ์†Œ์Šค๋Š” ์„œ๋ฒ„์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฒƒ)
  • ์ด๋ฅผ ์ปฌ๋ ‰์…˜์ด๋ผ ๋ถ€๋ฅด๋ฉฐ, ์„œ๋ฒ„๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋œปํ•œ๋‹ค. (์—ฌ๊ธฐ์„œ ์ปฌ๋ ‰์…˜์€ /members)

10. ex) ํŒŒ์ผ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ - PUT ๊ธฐ๋ฐ˜ ๋“ฑ๋ก

-> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค (POST์ฒ˜๋Ÿผ ์„œ๋ฒ„๊ฐ€ URI๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ URI ์ง€์ •).

  • ํŒŒ์ผ ๋“ฑ๋ก /files/{filename} -> PUT
  • PUT /files/jpa.jpg  (ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์ด๊ธฐ์— ๋‹น์—ฐํžˆ URI๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค)
  • ์ปฌ๋ ‰์…˜๊ณผ ๋Œ€์‘๋˜๋Š” ๊ฐœ๋…์œผ๋กœ ์Šคํ† ์–ด(store)๋ฅผ ์‚ฌ์šฉ -> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ €์žฅ์†Œ๋ฅผ ๋œปํ•œ๋‹ค

11. ex) HTML FORM ์‚ฌ์šฉ

-> GET, POST ๋ฉ”์†Œ๋“œ๋งŒ ์ง€์›ํ•œ๋‹ค 

-> GET, POST ๋ฉ”์†Œ๋“œ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ์— '์‚ญ์ œ'์˜ ๊ฒฝ์šฐ URI๋ฅผ /members/{id}/delete ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค (ํ•œ๊ณ„)

-> ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ปจํŠธ๋กค URI ๋„์ž…

 

12. ์ปจํŠธ๋กค URI

-> POST, GET์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ€๋ถ„์€ ๋™์‚ฌ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์—ฌ URI ์„ค๊ณ„

-> POST์˜ /new, /edit, /delete ๊ฐ€ ์ปจํŠธ๋กค URI์— ํ•ด๋‹น

 

13. ์ •๋ฆฌ

-> ๊ฐœ๋ฐœํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋Š” ์ปฌ๋ ‰์…˜ ๊ธฐ๋ฐ˜์˜ URI๋กœ ์„ค๊ณ„

-> ์•„๋ž˜ ์ฐธ๊ณ  ๋ฌธ์„œ์—์„œ ํ•ด๋‹น ๋‚ด์šฉ์„ ๋” ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฐธ๊ณ : restfulapi.net/resource-naming/