[HTTP] HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ

2022. 3. 13. 17:21ยทWEB

๐Ÿ“Œ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก

โœ… ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹

๐Ÿ”ป ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก

  • GET
  • ์ฃผ๋กœ ์ •๋ ฌ ํ•„ํ„ฐ์— ์‚ฌ์šฉ(e.g. ๊ฒ€์ƒ‰์–ด, ๊ฒŒ์‹œํŒ ์ •๋ ฌ ์กฐ๊ฑด)

๐Ÿ”ป ๋ฉ”์„ธ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก

  • POST, PUT, PATCH
  • ํšŒ์› ๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ, ๋ฆฌ์†Œ์Šค ๋“ฑ๋ก, ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ

 

โœ… 4๊ฐ€์ง€ ์ƒํ™ฉ

๐Ÿ”ป ์ •์  ๋ฐ์ดํ„ฐ ์กฐํšŒ

  • ์ด๋ฏธ์ง€, ์ •์  ํ…์ŠคํŠธ ๋ฌธ์„œ
  • ์กฐํšŒ๋Š” GET ์‚ฌ์šฉ
  • ๋‹จ์ˆœํžˆ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋งŒ ์ง€์ •ํ•ด์ฃผ๋ฉด ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ด์คŒ
  • ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
  • ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์Œ

 

๐Ÿ”ป ๋™์  ๋ฐ์ดํ„ฐ ์กฐํšŒ

  • ๊ฒ€์ƒ‰์–ด์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•จ
  • ์ฃผ๋กœ ๊ฒ€์ƒ‰, ๊ฒŒ์‹œํŒ ๋ชฉ๋ก์—์„œ ์ •๋ ฌ ํ•„ํ„ฐ(๊ฒ€์ƒ‰์–ด)
  • ์กฐํšŒ ์กฐ๊ฑด์„ ์ค„์—ฌ์ฃผ๋Š” ํ•„ํ„ฐ, ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์ •๋ ฌ ์กฐ๊ฑด์— ์ฃผ๋กœ ์‚ฌ์šฉ
  • ์กฐํšŒ๋Š” GET ์‚ฌ์šฉ
  • GET์€ ์ฟผ๋ฆฌ ํŒŒ๋ฆฌ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ

 

๐Ÿ”ป HTML Form ๋ฐ์ดํ„ฐ ์ „์†ก

  • POST ์ „์†ก

  • submit ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž‘์„ฑ๋œ form ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ http ๋ฉ”์„ธ์ง€๋ฅผ ์ƒ์„ฑํ•ด์คŒ
  • http ๋ฉ”์„ธ์ง€๋Š” ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๊ฑฐ์˜ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋จ
  • ์ด๋Ÿฌํ•œ content-type์€ ์•ฝ์†๋˜์–ด ์žˆ์Œ
  • e.g. ํšŒ์› ๊ฐ€์ž…, ์ƒํ’ˆ ์ฃผ๋ฌธ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ, ...

 

  • Content-type: application/x-www-form-urlencoded
    • form์˜ ๋‚ด์šฉ์„ ๋ฉ”์„ธ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ์ „์†ก (key=value ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹)
    • ์ „์†ก ๋ฐ์ดํ„ฐ๋ฅผ url encoding ์ฒ˜๋ฆฌ e.g. abc๊น€ -> abc%EA%B9%80
  • Content-type: multipart/form-data
    • form์˜ enctype์„ multipart/form-data๋กœ ์ง€์ •
    • enctype์€ ๋ฉ”์„ธ์ง€ ๋ฐ”๋””์— ๋“ค์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์„ ์ง€์ •ํ•จ
    • byte๋กœ ๋˜์–ด์žˆ๋Š” ํŒŒ์ผ๊นŒ์ง€ ํ•จ๊ป˜ ์ „์†ก
    • ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์—ฌ๋Ÿฌ ํŒŒ์ผ๊ณผ ํผ์˜ ๋‚ด์šฉ์„ ํ•จ๊ป˜ ์ „์†กํ•  ์ˆ˜ ์ž‡์Œ

 

  • GET ์ „์†ก

 

  • ๋ฉ”์„ธ์ง€ ๋ฐ”๋””๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ์ „์†กํ•จ
  • GET์€ ์กฐํšŒํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋ฏ€๋กœ ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ณณ(ํšŒ์› ๊ฐ€์ž…)์—๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ
  • ํšŒ์› ์กฐํšŒ ์‹œ ์‚ฌ์šฉ

 

โ€ป์ฐธ๊ณ โ€ป : HTML Form ์ „์†ก์€ GET, POST๋งŒ ์ง€์›

 

๐Ÿ”ป HTTP API ๋ฐ์ดํ„ฐ ์ „์†ก

HTML ํผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์ƒํ™ฉ์— ์‚ฌ์šฉ

  • ์„œ๋ฒ„๋ผ๋ฆฌ ํ†ต์‹ ์‹œ : html์ด ์—†์œผ๋‹ˆ๊นŒ API๋ฅผ ํ†ตํ•ด ์ „์†ก
  • ์•ฑ ํด๋ผ์ด์–ธํŠธ : ์•„์ดํฐ, ์•ˆ๋“œ๋กœ์ด๋“œ
  • ์›น ํด๋ผ์ด์–ธํŠธ : HTML์˜ form ์ „์†ก ๋Œ€์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•œ ํ†ต์‹ ์— ์‚ฌ์šฉ(AJAX)
  • e.g. React, VueJs ๊ฐ™์€ ์›น ํด๋ผ์ด์–ธํŠธ์™€ API ํ†ต์‹ 
  • POST, PUT, PATCH ๋ชจ๋‘ ํ™œ์šฉ ๊ฐ€๋Šฅ : ๋ฉ”์„ธ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ „์†ก
  • GET : ์กฐํšŒ, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ
  • Content-Type : ์ฃผ๋กœ application/json ์‚ฌ์šฉ (xml๋ณด๋‹ค ์ฝ๊ธฐ ์‰ฝ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘์œผ๋ฏ€๋กœ ์ง€๊ธˆ์€ ๊ฑฐ์˜ json์„ ๋งŽ์ด ์‚ฌ์šฉํ•จ )

 

๐Ÿ“Œ HTTP API ์„ค๊ณ„ ์˜ˆ์‹œ

โœ… HTTP API - ์ปฌ๋ ‰์…˜ (POST ๊ธฐ๋ฐ˜ ๋“ฑ๋ก)

e.g. ํšŒ์› ๊ด€๋ฆฌ API ์ œ๊ณต

 

๐Ÿ”ป POST ์‹ ๊ทœ ์ž์› ๋“ฑ๋ก ํŠน์ง•

  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋“ฑ๋ก๋  ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ๋ชจ๋ฆ„ (ํšŒ์› ๋“ฑ๋ก /members -> POST)
  • ๋ฐ์ดํ„ฐ ๋“ฑ๋ก ์‹œ ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” URI๋ฅผ ๋งŒ๋“ค์–ด์คŒ (Location: /members/100)
  • ์ด๋Ÿฌํ•œ ํ˜•์‹๋ฅผ '์ปฌ๋ ‰์…˜'์ด๋ผ๊ณ  ํ•จ
    • ์„œ๋ฒ„๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ
    • ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ
    • ์—ฌ๊ธฐ์„œ ์ปฌ๋ ‰์…˜์€ /members

 

โœ… HTTP API - ์Šคํ† ์–ด (PUT ๊ธฐ๋ฐ˜ ๋“ฑ๋ก)

e.g. ์ •์  ์ปจํ…์ธ  ๊ด€๋ฆฌ, ์›๊ฒฉ ํŒŒ์ผ ๊ด€๋ฆฌ

  • ํŒŒ์ผ ๋“ฑ๋ก ์‹œ ์‚ฌ์šฉ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•จ (/files/{filename} -> PUT)
  • ์ด๋Ÿฌํ•œ ํ˜•์‹์„ '์Šคํ† ์–ด'๋ผ๊ณ  ํ•จ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ €์žฅ์†Œ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์•Œ๊ณ  ๊ด€๋ฆฌํ•จ
    • ์—ฌ๊ธฐ์„œ ์Šคํ† ์–ด๋Š” /files
  • ๋Œ€๋ถ€๋ถ„ ์‹ค๋ฌด์—์„œ๋Š” POST๊ธฐ๋ฐ˜์˜ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•จ. PUT์€ ๊ฑฐ์˜ ์‚ฌ์šฉx

 

โœ… HTML FORM ์‚ฌ์šฉ

e.g. ์›น ํŽ˜์ด์ง€ ํšŒ์› ๊ด€๋ฆฌ

  • GET, POST๋งŒ ์ง€์›
  • DELETE๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— URI์— control URI๋ฅผ ํฌํ•จ
  • ํšŒ์› ๋“ฑ๋ก ํผ๊ณผ ๋“ฑ๋ก์˜ URI๋Š” ๊ฐ™๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
  • ์ปจํŠธ๋กค URI
    • GET, POST๋งŒ ์ง€์›ํ•˜๋ฏ€๋กœ ์ œ์•ฝ์ด ์žˆ์Œ
    • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋™์‚ฌ๋กœ๋œ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉ
    • POST์˜ /new, /edit, /delete๊ฐ€ control URI
    • ์ปฌ๋ ‰์…˜, ์Šคํ† ์–ด ๋“ฑ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ์ถ”๊ฐ€ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰
    • HTTP ๋ฉ”์„œ๋“œ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์• ๋งคํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ (HTTP API์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ)
    • ์‹ค๋ฌด์—์„œ๋Š” ๋งŽ์ด ์‚ฌ์šฉํ•จ (์ตœ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋กœ ์„ค๊ณ„ํ•˜๊ณ , ์•ˆ๋  ๋•Œ ๋Œ€์ฒด์žฌ๋กœ ์‚ฌ์šฉํ•˜์ž)

 

URI ์„ค๊ณ„ ๊ด€๋ จ ์ฐธ๊ณ ํ•ด๋ณด๋ฉด ์ข‹์„ ์‚ฌ์ดํŠธ : https://restfulapi.net/resource-naming


๊ฐ•์˜ ์ž๋ฃŒ

 

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์‹ค๋ฌด์— ๊ผญ ํ•„์š”ํ•œ HTTP ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ์˜ฌ๋ฐ”๋ฅธ HTTP API ์„ค๊ณ„ ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

 

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'WEB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[HTTP] HTTP ์ƒํƒœ์ฝ”๋“œ  (0) 2022.03.13
[HTTP] API URI ์„ค๊ณ„์™€ HTTP ๋ฉ”์„œ๋“œ  (0) 2022.03.13
[HTTP] HTTP ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ํŠน์ง•  (0) 2022.03.13
'WEB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [HTTP] HTTP ํ—ค๋” - (1) ์ผ๋ฐ˜ ํ—ค๋”
  • [HTTP] HTTP ์ƒํƒœ์ฝ”๋“œ
  • [HTTP] API URI ์„ค๊ณ„์™€ HTTP ๋ฉ”์„œ๋“œ
  • [HTTP] HTTP ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ํŠน์ง•
Sue
Sue
๊ฐœ๋ฐœ ๊ณต๋ถ€ ๋กœ๊ทธ
  • Sue
    Sue's devlog
    Sue
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Sue
[HTTP] HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”