03. HTTP ๋ฉ”์„œ๋“œ

HTTP ๋ฉ”์‹œ์ง€์˜ ์‹œ์ž‘ ๋ผ์ธ์— ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ํ–‰์œ„๋ฅผ ๋ช…์‹œํ•˜์—ฌ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์„ HTTP ๋ฉ”์„œ๋“œ ๋ผ๊ณ  ํ•œ๋‹ค. GET, POST, PUT, PATCH, DELETE ๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ์ด์œ ๋Š” ํšจ์œจ์ ์œผ๋กœ URI๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•จ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. URI ์—๋Š” ์ ‘๊ทผํ•˜๋ ค๋Š” ์ž์›์˜ ์ •๋ณด (ํšŒ์›, ๊ฒŒ์‹œํŒ ๋“ฑ ๋ฆฌ์†Œ์Šค)๋งŒ ๋ช…์‹œํ•˜๊ณ , ๊ทธ ์ž์›์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ํ–‰์œ„๋Š” ๋ฉ”์„œ๋“œ์—์„œ ์ •์˜ํ•˜๋ฉด ๊น”๋”ํ•œ URI ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

๐Ÿ“ง ย  01. HTTP ๋ฉ”์‹œ์ง€

  • ๋ฉ”์„œ๋“œ๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์ „์—, HTTP ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด์ž.

์ถœ์ฒ˜: ๊น€์˜ํ•œ์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP (์ธํ”„๋Ÿฐ)

๊ตฌ์กฐ๊ตฌ์„ฑ
start-lineHTTP ๋ฉ”์„œ๋“œ, ์š”์ฒญ ๋Œ€์ƒ, HTTP ๋ฒ„์ „
headerfield-name, content-type, content-length ๋“ฑ
empty line๋ฌด์กฐ๊ฑด ํ•œ ์ค„์„ ๋„์šด๋‹ค.
message body์‹ค์ œ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋‹ค.
  • start-line : ์„œ๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋™์ž‘์„ ์ง€์ •ํ•˜๊ณ , ์š”์ฒญ ๋Œ€์ƒ(๊ฒฝ๋กœ)์„ ์ง€์ •ํ•œ๋‹ค. ์‘๋‹ต ์‹œ์—๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์„ฑ๊ณต, ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ์ƒํƒœ ์ฝ”๋“œ (200, 400, 500) ๋กœ ๋‹ด์•„์„œ ๋ณด๋‚ธ๋‹ค.
  • header : HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ ๋ณด๋‚ธ๋‹ค. ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ํƒ€์ž…(ํ…์ŠคํŠธ์ธ์ง€ json์ธ์ง€), ํฌ๊ธฐ, ์ธ์ฆ, ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด, ์บ์‹œ ๊ด€๋ฆฌ ์ •๋ณด ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

๐Ÿ“ง ย  02. GET

GET /search?q=hello&hl=ko
  • ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  • ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋Š” ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌํ•œ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌํ•ด๋„ ๋˜์ง€๋งŒ, ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ณณ์ด ๋งŽ์•„์„œ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“ง ย  03. POST

POST /members HTTP/1.1
Content-Type: application/json

{
   "username" : "young",
   "age" : 20
}
  • ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ์ƒˆ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋“ฑ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐Ÿ“ง ย  04. PUT

PUT /members/100 HTTP/1.1
Content-type: application/json

{
    "username" : "old",
    "age" : 50
}
  • ๋ฆฌ์†Œ์Šค๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ์‚ญ์ œ ํ›„ ๋“ฑ๋กํ•˜๊ณ , ์—†์œผ๋ฉด ์ƒ์„ฑํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•œ๋‹ค. ์œ„ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ members ์˜ 100๋ฒˆ์งธ ์œ ์ €๋ฅผ ์•Œ์•„์•ผ ํ•ด๋‹น ์œ ์ €๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งŒ์•ฝ ์š”์ฒญ ๋ฐ์ดํ„ฐ๊ฐ€ age๋งŒ ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ๋ฆฌ์†Œ์Šค๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜๊ธฐ ๋•Œ๋ฌธ์— 100๋ฒˆ์งธ ์œ ์ €์˜ ์ •๋ณด๋Š” username ์€ ์‚ฌ๋ผ์ง€๊ณ  age ๋งŒ ๋“ฑ๋ก(๋Œ€์ฒด)๋  ๊ฒƒ์ด๋‹ค.

๐Ÿ“ง ย  05. PATCH

PATCH /members/100 HTTP/1.1
Content-Type: application-json

{
   "age" : 50
}
  • ๋ฆฌ์†Œ์Šค๋ฅผ ๋ถ€๋ถ„ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • ๋ฆฌ์†Œ์Šค๋ฅผ ์™„์ „ ๋Œ€์ฒดํ•ด๋ฒ„๋ฆฌ๋Š” PUT ๊ธฐ๋Šฅ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ๊ทผ ๋“ฑ์žฅํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค.

๐Ÿ“ง ย  06. DELETE

DELETE /members/100 HTTP/1.1
Host: localhost:8080
  • ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

๐Ÿ“ง ย  07. ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ

  • ์œ„ ๋ฉ”์„œ๋“œ๋“ค์€ ๊ฐœ๋ณ„ ์†์„ฑ์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • ์ฃผ์š”ํ•œ ์ฐจ์ด์ ์€ ์•„๋ž˜ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
๋ฉ”์„œ๋“œ์•ˆ์ „๋ฉฑ๋“ฑ์บ์‹œ๊ฐ€๋Šฅ
GETโญ•๏ธโญ•๏ธโญ•๏ธ
POSTโŒโŒโญ•๏ธ
PUTโŒโญ•๏ธโŒ
PATCHโŒโŒโญ•๏ธ
DELETEโŒโญ•๏ธโŒ
  • ์•ˆ์ „ : ํ˜ธ์ถœํ•ด๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ฉฑ๋“ฑ : ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœํ•ด๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.
  • ์บ์‹œ๊ฐ€๋Šฅ : ์‘๋‹ต ๊ฒฐ๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ์บ์‹œํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๊ฐ€.