๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Dev Blog
CS/Network

[HTTP] - HTTP ๋ฉ”์„œ๋“œ

by ์œ ์ง„์˜ 2022. 8. 4.
์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ค‘ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹์ด๋ผ๋Š” ๊ฐ•์˜์— ๋Œ€ํ•œ TIL์ž…๋‹ˆ๋‹ค.

 

HTTP ๋ฉ”์„œ๋“œ

  • GET
  • POST
  • DELETE
  • HTTP ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ
โ€ป 42seoul ๊ณผ์ œ์ธ webserv์—์„œ GET, POST, DELETE๋ฅผ ๊ตฌํ˜„ํ•˜๋ผ ํ–ˆ์œผ๋ฏ€๋กœ ์œ„์˜ ์„ธ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋งŒ ์ •๋ฆฌํ–ˆ๋‹ค.

 

1. GET

์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. Request ๋ฉ”์‹œ์ง€์˜ request-target ๋ถ€๋ถ„์˜ query๋ฅผ ํ†ตํ•ด์„œ ์–ด๋–ค ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•˜๊ณ  ์‹ถ์€ ์ง€ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •์ƒ์ ์œผ๋กœ ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜๋ฉด ์„œ๋ฒ„๋Š” ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ Response ๋ฉ”์‹œ์ง€์˜ ๋ฐ”๋”” ๋ถ€๋ถ„์— ๋„ฃ์–ด์„œ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•œ๋‹ค.

 

2. POST

Request ๋ฉ”์‹œ์ง€์˜ ๋ฐ”๋”” ๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•ด๋‹ฌ๋ผ๋Š” ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ž์„ธํ•œ ์‚ฌ์šฉ ์˜ˆ์‹œ๋Š” ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

- HTML FORM์— ์ž…๋ ฅํ•œ ์ •๋ณด๋กœ ํšŒ์› ๊ฐ€์ž…, ์ฃผ๋ฌธ ๋“ฑ์—์„œ ์‚ฌ์šฉ
- ๊ฒŒ์‹œํŒ ๊ธ€์“ฐ๊ธฐ, ๋Œ“๊ธ€ ๋‹ฌ๊ธฐ
- ์„œ๋ฒ„๊ฐ€ ์•„์ง ์‹๋ณ„ํ•˜์ง€ ์•Š์€ ์ƒˆ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ(๋“ฑ๋ก)
- ๊ธฐ์กด ๋ฆฌ์†Œ์Šค์— ๋‚ด์šฉ์„ ์ถ”๊ฐ€
- ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ, ๋ณ€๊ฒฝ์„ ๋„˜์–ด์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌ
   ex) ์ฃผ๋ฌธ์—์„œ ๊ฒฐ์ œ์™„๋ฃŒ -> ๋ฐฐ๋‹ฌ์‹œ์ž‘ -> ๋ฐฐ๋‹ฌ์™„๋ฃŒ ์ฒ˜๋Ÿผ ๊ฐ’ ๋ณ€๊ฒฝ์ด ์•„๋‹Œ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ

 

์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์—์„œ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ฆฌ์†Œ์Šค URI์— POST ์š”์ฒญ์ด ์˜ค๋ฉด ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๋ฆฌ์†Œ์Šค๋งˆ๋‹ค ๋”ฐ๋กœ ์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋”ฑํžˆ ์ •ํ•ด์ง„ ๋™์ž‘์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ์œผ๋กœ Request ๋ฉ”์‹œ์ง€์˜ ๋ฐ”๋””์— ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ HTTP ๋ฉ”์„œ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์• ๋งคํ•˜๋‹ค๋ฉด POST ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

์ถ”๊ฐ€์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด, PUT ๋ฉ”์„œ๋“œ์™€ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ฑ๋ก

(์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด PUT์€ ๋Œ€์ฒด์ด์ง€๋งŒ,,,)

ํ•œ๋‹ค๋Š” ์ ์—์„œ ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ผ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ POST๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค ์œ„์น˜๋ฅผ ๋ชจ๋ฅด์ง€๋งŒ, PUT์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค ์œ„์น˜๋ฅผ ์•Œ๊ณ  URI๋ฅผ ์ง€์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

POST ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ request-line

 

POST๋Š” ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ๋ฆฌ์†Œ์Šค ์‹๋ณ„์ž๋ฅผ ๋ชจ๋ฅด๋Š” ์ƒํƒœ๋กœ ๋ณด๋‚ธ๋‹ค. ์„œ๋ฒ„์—์„œ ์ •์ƒ์ ์œผ๋กœ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์˜ ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ๋ณด๋‚ธ๋‹ค.

 

PUT ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ request-line

 

๋ฐ˜๋ฉด์—, PUT์€ ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ๋ฆฌ์†Œ์Šค ์‹๋ณ„์ž๋ฅผ ์ง์ ‘ ๋„ฃ๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด, PUT์€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜์— ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ€์ฒด, ์—†์œผ๋ฉด ์ƒ์„ฑ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

3. DELETE

๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

4. HTTP ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ

 

์ถœ์ฒ˜) https://ko.wikipedia.org/wiki/HTTP

 

๐Ÿ’ก ์•ˆ์ „(Safe)

๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ์„ ํ•  ๋•Œ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์—ฌ๋ถ€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

๐Ÿ’ก ๋ฉฑ๋“ฑ(Idempotent)

๋ฉ”์„œ๋“œ๋ฅผ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๋“  100๋ฒˆ ํ˜ธ์ถœํ•˜๋“  ๊ฒฐ๊ณผ๊ฐ€ ๋˜‘๊ฐ™๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. GET๊ณผ DELETE๋Š” ๋ช‡ ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๋“  ์กฐํšŒ, ์‚ญ์ œ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™๋‹ค๋Š” ์ ์—์„œ ๋ฉฑ๋“ฑ ๋ฉ”์„œ๋“œ์ด๋‹ค. ๋งŒ์•ฝ, ์ค‘๊ฐ„์— ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์„œ GET ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ”๋€๋‹ค๋ฉด ๋ฉฑ๋“ฑ์ด ์•„๋‹Œ๊ฒŒ ์•„๋‹๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉฑ๋“ฑ์€ ์™ธ๋ถ€ ์š”์ธ์— ์˜ํ•ด์„œ ์ค‘๊ฐ„์— ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ๊นŒ์ง€๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๋ฐ˜๋ฉด์—, POST๋Š” ๋ฉฑ๋“ฑ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ๊ฒฐ์ œ์— ๋Œ€ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” POST ๋ฉ”์„œ๋“œ๋ผ๋ฉด ์ค‘๋ณต ๊ฒฐ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฉฑ๋“ฑ์ด๋ผ๋Š” ๊ฐœ๋…์€ ์–ด๋””์„œ ํ™œ์šฉ๋˜๋Š” ๊ฒƒ์ธ๊ฐ€ ํ•˜๋Š” ๊ถ๊ธˆ์ฆ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๋ฉฑ๋“ฑ์€ ์ž๋™ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„๊ฐ€ TIMEOUT ๋“ฑ์œผ๋กœ ์ •์ƒ ์‘๋‹ต์„ ๋ชป์ฃผ์—ˆ์„ ๋•Œ, ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ๊ฐ™์€ ์š”์ฒญ์„ ๋ฐ˜๋ณตํ•ด๋„ ๋˜๋Š”๊ฐ€์— ๋Œ€ํ•œ ํŒ๋‹จ ๊ทผ๊ฑฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ก ์บ์‹œ๊ฐ€๋Šฅ(Cacheable)

์‘๋‹ต ๊ฒฐ๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ์บ์‹œํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๊ฐ€์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ด๋‹ค. GET, POST๋Š” ์บ์‹œํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. ํ•˜์ง€๋งŒ, POST๋Š” ๋ณธ๋ฌธ ๋‚ด์šฉ๊นŒ์ง€ ์บ์‹œ ํ‚ค๋กœ ๊ณ ๋ คํ•ด์•ผํ•˜๋Š”๋ฐ, ๊ตฌํ˜„์ด ์‰ฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ๋Š” GET ์ •๋„๋งŒ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋Œ“๊ธ€