๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ช๋ฐ๋ธŒ์ฝ”์Šค

[TIL]HTTP ๊ธฐ๋ณธ ์ •๋ฆฌ & REST API

by megan07 2024. 3. 17.

๋ฐฐ์šด ๋‚ด์šฉ๊ณผ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

HTTP

HTML ๋ฌธ์„œ์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋“ค์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ”„๋กœํ† ์ฝœ

์›น์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ตํ™˜์˜ ๊ธฐ์ดˆ์ด๋ฉฐ, ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 

HTTP๋Š” TCP๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋†’์€ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค..

๊ฐ„๋žตํ•œ TCP ํŠน์ง•

  1. ์˜ค๋ฅ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก
  2. ์ˆœ์„œ์— ๋งž๋Š” ์ „๋‹ฌ(๋ณด๋‚ธ ์ˆœ์„œ๋Œ€๋กœ ๋„์ฐฉ)
  3. ์กฐ๊ฐ๋‚˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ 

 

Method

์„œ๋ฒ„์—๊ฒŒ ์–ด๋–ค ๋™์ž‘์ด ์ทจํ•ด์ ธ์•ผ ํ•˜๋Š”์ง€ ๋งํ•ด์ฃผ๋Š” ์—ญํ• 

๋ชจ๋“  HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋Š” ํ•œ ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง.

 

  • GET: ์„œ๋ฒ„์—์„œ ์–ด๋–ค ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค
  • POST: ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • PUT: ์„œ๋ฒ„๊ฐ€ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค(์ „์ฒด ์ˆ˜์ •)
  • PATCH: PUT์ฒ˜๋Ÿผ ์ˆ˜์ •ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ง€๋งŒ, ์ผ๋ถ€๋งŒ ์ˆ˜์ •ํ•œ๋‹ค
  • DELETE: ์„œ๋ฒ„์—๊ฒŒ ๋ฆฌ์†Œ์Šค ์‚ญ์ œ๋ฅผ ์š”์ฒญํ•œ๋‹ค

 

์‘๋‹ต ์ƒํƒœ์ฝ”๋“œ

์„œ๋ฒ„๊ฐ€ ๋ฐ›์€ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ ์ƒํƒœ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ

  • 1xx : ์ •๋ณด
  • 2xx: ์š”์ฒญ ์ฒ˜๋ฆฌ ์„ฑ๊ณต
  • 3xx: ๋ฆฌ๋‹ค์ด๋ ‰์…˜
  • 4xx: ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ -> ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ
    ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์„œ๋ฒ„์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ผ ๋•Œ ๋ฐœ์ƒ
    401(Unauthorized): ๊ถŒํ•œ ์—†์Œ(์ธ์ฆ ์‹คํŒจ), 403(Forbidden): ์š”์ฒญ์ด ์„œ๋ฒ„์— ์˜ํ•ด ๊ฑฐ๋ถ€๋จ, 404: ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
  • 5xx: ์„œ๋ฒ„ ์—๋Ÿฌ -> ์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ

 

HTTP ๋ฉ”์‹œ์ง€

์š”์ฒญ๊ณผ ์‘๋‹ต 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ์‹œ์ž‘์ค„: ์–ด๋–ค ๋ฉ”์‹œ์ง€์ธ์ง€ ์„œ์ˆ ํ•œ๋‹ค.
  • ํ—ค๋”: ์†์„ฑ์„ ๋‹ด๊ณ  ์žˆ๋‹ค.
  • ๋ฐ”๋””: ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. 

 

HTTP ์ปค๋„ฅ์…˜

๋ณดํ†ต ํ•˜๋‚˜์˜ ์›นํŽ˜์ด์ง€์—๋Š” ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต ์—ฌ๋Ÿฌ ๋ฒˆ์˜ HTTP ์š”์ฒญ์ด ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค.

TCP ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์ธ HTTP๋Š” ์„œ๋ฒ„์™€ 3-way handshake๋ฅผ ํ†ตํ•ด ์ปค๋„ฅ์…˜์„ ๋งบ๋Š”๋‹ค.

 

 

 

HTTP/1.0

์‚ฌ์ง„์˜ ์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ HTTP ํŠธ๋ž™์žญ์…˜(์š”์ฒญ-์‘๋‹ต)๋งˆ๋‹ค ์ปค๋„ฅ์…˜์„ ๋งบ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ๋” ์†Œ์š”๋œ๋‹ค.

๋”ฐ๋ผ์„œ connection: keep-alive ์†์„ฑ์„ ํ†ตํ•ด  ๊ฐ™์€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๊ฒฝ์šฐ ์ปค๋„ฅ์…˜์„ ์œ ์ง€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

HTTP/1.1

ํ˜„์žฌ ์“ฐ์ด๋Š” HTTP ํ‘œ์ค€

๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์† ์ปค๋„ฅ์…˜์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— TCP ํ•ธ๋“œ์‰์ดํฌ์— ๋“œ๋Š” ๋น„์šฉ์„ ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.

 

1.1์—์„œ๋Š” ์ง€์† ์ปค๋„ฅ์…˜์„ ํ†ตํ•ด ์š”์ฒญ์„ ํŒŒ์ดํ”„๋ผ์ด๋‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‘๋‹ต์ด ๋„์ฐฉํ•˜๊ธฐ ์ „์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์ฒญ์„ ํ์— ์Œ“์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„คํฌ์›Œํฌ ์™•๋ณต ์‹œ๊ฐ„์„ ์ค„์—ฌ์„œ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ, HTTP ํŒŒ์ดํ”„๋ผ์ด๋‹์€ ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด์žˆ์ง€ ์•Š๋‹ค.

๋˜ํ•œ POST์ฒ˜๋Ÿผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ์š”์ฒญ์€ ํŒŒ์ดํ”„๋ผ์ด๋‹ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

HTTP/2.0

ํ‘œ์ค€์€ ์•„๋‹ˆ์ง€๋งŒ ๋งŽ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

์—ฌ๋Ÿฌ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ด์ง„ ํ”„๋ ˆ์ž„๊ณผ ์ŠคํŠธ๋ฆผ์„ ์ง€์›ํ•˜๋Š” ์ด์ง„ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ์ง€์ •

๋กœ๋“œ ํ”„๋กœ์„ธ์Šค ์ค‘์— ์ฝ˜ํ…์ธ ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์›น ์„ฑ๋Šฅ์˜ ๋งฅ๋ฝ์—์„œ ์šฐ์„ ์ˆœ์œ„๋Š” ์ฝ˜ํ…์ธ ๊ฐ€ ๋กœ๋“œ๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค

 

ํ—ค๋” ์••์ถ•

ํ—ค๋”๋ฅผ ์••์ถ•ํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ „์†กํ•˜๋ฉฐ, ํ—ค๋” ํ•„๋“œ๋ฅผ ์ด์ „ ๋ฉ”์‹œ์ง€์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

๋‹ค์ค‘ํ™”(Multiplexing)

๋‹จ์ผ TCP ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋ณ‘๋ ฌ๋กœ ๋‹ค์ค‘ํ™”ํ•˜์—ฌ ์ „์†กํ•œ๋‹ค.

1.1์˜ ํŒŒ์ดํ”„๋ผ์ด๋‹๊ณผ ๋น„์Šทํ•ด๋ณด์ด์ง€๋งŒ ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

 

์„œ๋ฒ„ ํ‘ธ์‹œ

HTTP/2๋Š” ์„œ๋ฒ„ ํ‘ธ์‹œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์—†์ด๋„ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

REST API

REST๋Š” HTTP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ๊ทœ์ •ํ•œ ์•„ํ‚คํ…์ฒ˜

RESTful = REST์˜ ๊ธฐ๋ณธ ์›์น™์„ ์„ฑ์‹คํžˆ ์ง€ํ‚จ ์„œ๋น„์Šค ๋””์ž์ธ!

 

๊ตฌ์„ฑ

REST API๋Š” ์ž์›, ํ–‰์œ„, ํ‘œํ˜„ 3๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค

๊ตฌ์„ฑ ์š”์†Œ ๋‚ด์šฉ ํ‘œํ˜„ ๋ฐฉ๋ฒ•
์ž์› ์ž์› URI(์—”๋“œํฌ์ธํŠธ)
ํ–‰์œ„ ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„ HTTP ๋ฉ”์„œ๋“œ
ํ‘œํ˜„ ํ–‰์œ„์˜ ๊ตฌ์ฒด์  ๋‚ด์šฉ ํŽ˜์ด๋กœ๋“œ

 

์„ค๊ณ„ ์›์น™

1. URI๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์‚ฌ๊ฐ€ ์•„๋‹Œ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ!

2. ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•  ๊ฒƒ