๐ŸŒ ์›น ๊ฐœ๋ฐœ ํ•„์ˆ˜ ์ง€์‹! HTTP์™€ REST API ๊ฐœ๋… ์ •๋ฆฌ

Sueยท2025๋…„ 6์›” 30์ผ
post-thumbnail

๐ŸŒ ์›น ๊ฐœ๋ฐœ ํ•„์ˆ˜ ์ง€์‹! HTTP์™€ REST API ๊ฐœ๋… ์ •๋ฆฌ

์›น ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋จผ์ € ์ดํ•ดํ•ด์•ผ ํ•  ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ”๋กœ HTTP์™€ REST API์ž…๋‹ˆ๋‹ค.
์ฒ˜์Œ ์ ‘ํ•˜๋ฉด ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ๊ธ€์„ ํ†ตํ•ด ๊ธฐ์ดˆ๋ถ€ํ„ฐ ํ™•์‹คํžˆ ์ •๋ฆฌํ•ด๋ด…์‹œ๋‹ค!


๐Ÿ“ก HTTP๋ž€?

HTTP (Hypertext Transfer Protocol) ๋Š”
์›น์—์„œ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์™€ ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๊ทœ์น™(ํ”„๋กœํ† ์ฝœ)์ž…๋‹ˆ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด, ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— "์ด๊ฑฐ ์ฃผ์„ธ์š”!" ํ•˜๊ณ  ์š”์ฒญ(Request)์„ ๋ณด๋‚ด๋ฉด,
์„œ๋ฒ„๊ฐ€ "์—ฌ๊ธฐ ์žˆ์–ด์š”!" ํ•˜๊ณ  ์‘๋‹ต(Response)ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ ํŠน์ง•

  • Stateless(์ƒํƒœ ์—†์Œ): ๊ฐ ์š”์ฒญ์€ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
    ๐Ÿ‘‰ ์ด์ „ ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ํฌํŠธ: 80๋ฒˆ
  • ์ „์†ก ๋ฐฉ์‹: ์ฃผ๋กœ TCP/IP ์œ„์—์„œ ์ž‘๋™

๐ŸŒ URL์ด๋ž€?

URL (Uniform Resource Locator) ์€ ์ธํ„ฐ๋„ท ์ƒ์˜ ์ž์›์˜ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

์˜ˆ:

https://www.example.com/user/1

URL ์„ค๊ณ„์— ์›์น™์ด ์žˆ๋‹ค.

  • ๋ช…์‚ฌ ์‚ฌ์šฉ: URL์€ ์ž์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ช…์‚ฌ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์˜ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๊ฒฝ์šฐ movies์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค. ๋™์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ณ„์ธต ๊ตฌ์กฐ: ์ž์›์˜ ๊ณ„์ธต์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชจ๋“  ์˜ํ™”๋Š” api/v1/movies๋กœ ํŠน์ • ID๋ฅผ ๊ฐ€์ง„ ์˜ํ™”๋Š” /api/v1/movies/ ๋’ค์— ID๋ฅผ ๋ถ™์—ฌ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • ๋ฒ„์ „ ๊ด€๋ฆฌ: API ๋ฒ„์ „์„ URL์— ํฌํ•จํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. (์˜ˆ: /api/**v1**/movies). ์ด๋Š” ํ–ฅํ›„ API ๋ณ€๊ฒฝ ์‹œ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.
  • HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ: ๊ฐ HTTP ๋ฉ”์„œ๋“œ๋Š” ์ž์›์— ๋Œ€ํ•œ ํŠน์ • ์ž‘์—…์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด API ํ˜ธ์ถœ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ํ•œ๋‹ค.
  • GET: ์ž์›์„ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ
    • GET /api/v1/movies: ๋ชจ๋“  ์˜ํ™” ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    • GET /api/v1/movies/{id}: ํŠน์ • ID์˜ ์˜ํ™”๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • POST: ์ƒˆ๋กœ์šด ์ž์›์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • POST /api/v1/movies: ์ƒˆ๋กœ์šด ์˜ํ™”๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • PUT: ๊ธฐ์กด ์ž์›์„ ์ „์ฒด ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • DELETE: ์ž์›์„ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํ˜•์‹: API ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด JSON ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” REST API๋ž€?

REST (Representational State Transfer) ๋Š”
HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์›์„ CRUD(Create, Read, Update, Delete) ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ž…๋‹ˆ๋‹ค.

์ž์› ์ค‘์‹ฌ ์‚ฌ๊ณ (Resource-centric thinking): REST API ์„ค๊ณ„์˜ ํ•ต์‹ฌ์€ "๋ฌด์—‡"์„ ๋‹ค๋ฃฐ ๊ฒƒ์ธ์ง€, ์ฆ‰ ์ž์›(Resource)์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋™์‚ฌ๋ณด๋‹ค๋Š” ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์›์„ ๋‚˜ํƒ€๋‚ด๊ณ , ์ด ์ž์›์— ๋Œ€ํ•œ CRUD์˜ ์ž‘์—…์„ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•œ๋‹ค.

REST์˜ ๊ตฌ์„ฑ ์š”์†Œ

  • ์ž์›(Resource): URL๋กœ ํ‘œํ˜„ โ†’ /user/1
  • ํ–‰์œ„(Method): HTTP ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ โ†’ GET, POST, PUT, DELETE

๐Ÿ‘‰ ์ด๋Ÿฐ REST ์›์น™์„ ์ž˜ ์ง€์ผœ์„œ ๋งŒ๋“  API๋ฅผ RESTful API๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.


โš™๏ธ HTTP ๋ฉ”์„œ๋“œ ์ •๋ฆฌ

๋ฉ”์„œ๋“œ์šฉ๋„์˜ˆ์‹œ
GET์ž์› ์กฐํšŒGET /user/1
POST์ž์› ์ƒ์„ฑPOST /user
Body: { "name": "John" }
PUT์ž์› ์ˆ˜์ •(์ „์ฒด ๋ฎ์–ด์“ฐ๊ธฐ)PUT /user/1
Body: { "name": "Jane" }
DELETE์ž์› ์‚ญ์ œDELETE /user/1

๐Ÿ“Š HTTP ์ƒํƒœ ์ฝ”๋“œ (Status Code)

์„œ๋ฒ„๋Š” ์‘๋‹ตํ•  ๋•Œ ๊ฒฐ๊ณผ ์ƒํƒœ๋ฅผ ์ˆซ์ž๋กœ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ HTTP ์ƒํƒœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ฒ”์œ„์˜๋ฏธ
1xx์ •๋ณด (์ฒ˜๋ฆฌ ์ค‘)
2xx์„ฑ๊ณต (์š”์ฒญ ์ฒ˜๋ฆฌ ์™„๋ฃŒ)
3xx๋ฆฌ๋‹ค์ด๋ ‰์…˜ (๋‹ค๋ฅธ ์œ„์น˜๋กœ ์ด๋™ ํ•„์š”)
4xxํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜ (์ž˜๋ชป๋œ ์š”์ฒญ)
5xx์„œ๋ฒ„ ์˜ค๋ฅ˜ (์„œ๋ฒ„ ์ฒ˜๋ฆฌ ์‹คํŒจ)

์ž์ฃผ ๋ณด๋Š” ์ƒํƒœ ์ฝ”๋“œ

  • 200 OK: ์ •์ƒ ์ฒ˜๋ฆฌ
  • 201 Created: ์ž์› ์ƒ์„ฑ ์„ฑ๊ณต
  • 400 Bad Request: ์ž˜๋ชป๋œ ์š”์ฒญ
  • 401 Unauthorized: ์ธ์ฆ ํ•„์š”
  • 404 Not Found: ํ•ด๋‹น ์ž์› ์—†์Œ
  • 500 Internal Server Error: ์„œ๋ฒ„ ๋‚ด๋ถ€ ์—๋Ÿฌ

๐Ÿ’ฌ ๋งˆ๋ฌด๋ฆฌ

๐Ÿ‘‡ ์ถ”์ฒœ ๊ฐ•์˜
๋‹ˆ๊ผฌ ์„ ์ƒ๋‹˜์˜ 5๋ถ„ REST API ์„ค๊ณ„ ๊ฐ•์˜


โœ๏ธ "ํ•œ ๋ฒˆ์ฏค ์›น ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ํ•ด๋ดค์ง€๋งŒ, ๊ธฐ์ดˆ๋Š” ์ œ๋Œ€๋กœ ๋ชฐ๋ž๋˜ ๊ฒƒ ๊ฐ™๋‹คโ€ฆ"
์ด๋Ÿฐ ๋ถ„๋“ค์„ ์œ„ํ•ด ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์ด ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ๊ณต์œ ๋„ ๋ถ€ํƒ๋“œ๋ ค์š” ๐Ÿ˜Š

profile
AI/ML Engineer

0๊ฐœ์˜ ๋Œ“๊ธ€