๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Dev/์„ค๊ณ„

REST ์›์น™๊ณผ REST API ์„ค๊ณ„ ๋ฐฉ๋ฒ•

 

"๊ทธ๋Ÿฐ REST API๋กœ ๊ดœ์ฐฎ์€๊ฐ€"๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

 

 

REST๋ž€?

  • REpresentational State Transfer์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค.
  • ์›น ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ ์Šคํƒ€์ผ ์ค‘ ํ•˜๋‚˜๋กœ, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ์ธํ„ฐ๋„ท์—์„œ ์–ด๋–ป๊ฒŒ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ํ•ด๋‹ต์œผ๋กœ 1991๋…„ ์›น(Web)์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. 
  • ์›น์€ HTML์ด๋ผ๋Š” ํ˜•์‹์œผ๋กœ ์ •๋ณด๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , ์ •๋ณด๋“ค์— ๋Œ€ํ•œ ์‹๋ณ„์ž๋กœ URI๋ฅผ ์„ ํƒํ•˜๊ณ , HTTP๋ผ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์ •๋ณด๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  • 2000๋…„ Roy T. Fielding์€ ๊ธฐ์กด์˜ ์›น์„ ๋ง๊ฐ€ํŠธ๋ฆฌ์ง€ ์•Š๊ณ  HTTP๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•œ ๋…ผ๋ฌธ์„ ๋ฐœํ‘œํ–ˆ๊ณ , ์ด๊ฒƒ์ด REST ์˜€์Šต๋‹ˆ๋‹ค.

REST API๋ž€?

  • REST API๋Š” REST ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅด๋Š” API๋กœ, RESTful API๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•œ๋งˆ๋””๋กœ ์„œ๋ฒ„์˜ ์ž์›์„ ์ •์˜ํ•˜๊ณ  ์ž์›์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ์—„๋ฐ€ํžˆ ๋งํ•˜์ž๋ฉด, Roy T. Fielding์ด ์ •์˜ํ•œ REST ์„ค๊ณ„ ์›์น™์„ ๋ชจ๋‘ ์ง€์ผœ์•ผ๋งŒ REST๋ฅผ ๋”ฐ๋ฅธ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

REST ์„ค๊ณ„ ์›์น™ 6๊ฐ€์ง€

1. Client-Server

  • ๋„คํŠธ์›Œํฌ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์„œ๋กœ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ ๋ฆฌ์†Œ์Šค์˜ URI๋งŒ ์•Œ๋ฉด ๋˜๊ณ , ์„œ๋ฒ„๋Š” HTTP๋ฅผ ํ†ตํ•ด ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋‹ฌ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋Š” REST๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

2. Stateless

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉฐ ์„œ๋กœ์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ์š”์ฒญ์€ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์„œ๋ฒ„๋Š” ์ด์ „ ์š”์ฒญ์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. Cacheability

  • ์„œ๋ฒ„ ์‘๋‹ต์€ ์บ์‹ฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ ํ•œ ์ด์ „ ์‘๋‹ต์„ ์ €์žฅํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์‹œ ํ•„์š”ํ•  ๋•Œ ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

4. Layered System

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์™ธ์—๋„ ์—ฌ๋Ÿฌ ์ค‘๊ฐœ์ž๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„๊ฐ€ ์ตœ์ข… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ†ต์‹ ํ•˜๋Š”์ง€ ์ค‘๊ฐœ์ž์™€ ํ†ต์‹ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5. Uniform Interface

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋กœ์จ ์ „์ฒด ์‹œ์Šคํ…œ์„ ๋ง๊ฐ€๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ๊ฐ ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Uniform Interface ์›์น™์€ Identification of resources, Manipulation of resources through representations, self-descriptive messages, Hypermedia as the engine of application state(HATEOAS)์˜ 4๊ฐ€์ง€ ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

6. Code-On-Demand(optional)

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ „์†กํ•˜์ง€๋งŒ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋กœ์ง์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
  • ์˜ˆ๋ฅผ ๋“ค๋ฉด, HTML <script> ํƒœ๊ทธ์—์„œ Javascript ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

Uniform Interface

REST API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๊ฐ€์žฅ ์›์น™๋Œ€๋กœ ์ง€์ผœ์ง€๊ธฐ ์–ด๋ ค์šด ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

Uniform Interface ์›์น™์—๋Š” 4๊ฐ€์ง€ ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

1. Identification of resources

  • ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๋Š” URI๋กœ ์‹๋ณ„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์ €์žฅ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด URI์— HTTP GET ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Manipulation of resources through representations

  • ์ „์†กํ•œ ํ‘œํ˜„์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE)๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์กฐ์ž‘ํ•  ๊ฒƒ์ธ์ง€ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. Self-descriptive messages

  • ๊ฐ ๋ฉ”์‹œ์ง€๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ๋ฐ ์‘๋‹ต์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ HTTP ์‘๋‹ต์€ ์ ์ ˆํ•œ HTTP ๋ฉ”์„œ๋“œ, ์ƒํƒœ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๊ณ , Content-Type ํ—ค๋”๋ฅผ ํฌํ•จํ•˜์—ฌ JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
HTTP/1.1 201 Created
Host: www.example.com
Content-Type: application/json

{
    "id": 123,
    "username": "johndoe",
    "email": "johndoe@example.com",
    "created_at": "2023-08-02T12:34:56Z"
}

4. Hypermedia as the engine of application state (HATEOAS)

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ•˜์ดํผ๋งํฌ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ์ „์ดํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ฐ€๋Šฅํ•œ ๋‹ค์Œ ์ž‘์—…์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹œ์Šคํ…œ์„ ํƒ์ƒ‰ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ HTTP ์‘๋‹ต์€ Link ํ—ค๋”๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์˜ ๋งํฌ๋ฅผ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
HTTP/1.1 200 OK
Content-Type: application/json
Link: </articles/1>; rel="previous", </articles/2>; rel="next";

{
  "title": "์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๊ธ€",
  "content": "๋ณธ๋ฌธ"
}

 

์™œ Uniform Interface๋ฅผ ์ง€์ผœ์•ผ ํ• ๊นŒ?

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๋…๋ฆฝ์  ์ง„ํ™”, ์ฆ‰ ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
  • REST๋ฅผ ์ง€ํ‚จ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€๊ฐ€ ์›น์ž…๋‹ˆ๋‹ค.
    • ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๋Š” ์—†๊ณ , ๋ฐ˜๋Œ€๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
    • HTML, HTTP ๋ช…์„ธ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์›น์€ ์ž˜ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

๋ชจ๋“  ์ œ์•ฝ ์กฐ๊ฑด์„ ์ง€์ผœ์„œ REST API๋ฅผ ์„ค๊ณ„ํ•ด์•ผ ํ• ๊นŒ?

 

  • Roy T. Fielding์€ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํ†ต์ œํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ๋…๋ฆฝ์  ์ง„ํ™”(= ์„œ๋กœ์˜ ๋ณ€๊ฒฝ์ด ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ)์— ๊ด€์‹ฌ์ด ์—†๋‹ค๋ฉด REST์— ๋”ฐ์ง€๋А๋ผ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ๋ง๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (๋Œ€์‹  ๊ทธ๋Ÿฌ๋ฉด ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด REST๋Š” ์•„๋‹ˆ๋ผ๊ณ  ํ•˜๋„ค์š” ๐Ÿ˜…)
  • ์ •๋ฆฌํ•˜์ž๋ฉด, REST๋ฅผ ์›์น™๋Œ€๋กœ ๋”ฐ๋ฅผ ๊ฒƒ์ธ์ง€๋Š” API๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์Šค์Šค๋กœ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ผ๋ฐ˜์ ์ธ REST API ์„ค๊ณ„ ๋ฐฉ๋ฒ•

Roy T. Fielding์ด ๋งํ•˜๋Š” ์›์น™๋Œ€๋กœ์˜ REST API๋Š” ์•„๋‹ˆ๊ฒ ์ง€๋งŒ, REST API ์„ค๊ณ„์˜ Best Practice๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ์€ HTTP ๋ฉ”์„œ๋“œ์™€ URI๋ฅผ ์กฐํ•ฉํ•ด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ์ผ๊ด€๋œ ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

1. HTTP ๋ฉ”์†Œ๋“œ

์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์–ด๋–ค ๋™์ž‘์„ ํ–‰ํ•˜๋Š”์ง€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

GET

  • ์„œ๋ฒ„์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๋™์ž‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์ฒญ ๋ณธ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , Path Variable ์ด๋‚˜ Query String ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋ช…์„ธ์— GET ์š”์ฒญ์˜ ๋ณธ๋ฌธ์„ ๋‹ด์œผ๋ฉด ์•ˆ ๋œ๋‹ค๊ณ  ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, HTTP Client ๊ตฌํ˜„์ฒด์— ๋”ฐ๋ผ ์ „์†ก์ด ์•ˆ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. [์ฐธ๊ณ ]
    • Path Variable vs Query String
      • ์–ด๋–ค ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” Path Variable์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
        GET /expenses/3427
      • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰, ์ •๋ ฌ, ํ•„ํ„ฐ๋ง, ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” Query String์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
        GET /expenses?start-date=2024-08-01&end-date=2024-08-03

POST

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

PUT

  • ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ์กด์— ์—†์œผ๋ฉด ์ƒ์„ฑํ•˜๊ณ , ์žˆ์œผ๋ฉด ์น˜ํ™˜ํ•˜๋Š” ๋™์ž‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. (๋ฎ์–ด์“ฐ๊ธฐ ๊ฐœ๋…)
  • ์š”์ฒญ ๋ณธ๋ฌธ์— ์น˜ํ™˜ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ ๋ฒˆ ์š”์ฒญ์„ ๋ณด๋‚ด๋„ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค.

PATCH

  • ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค์˜ ์ผ๋ถ€๋งŒ ์ˆ˜์ •ํ•˜๋Š” ๋™์ž‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์ฒญ ๋ณธ๋ฌธ์— ์น˜ํ™˜ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์š”์ฒญ์€ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค์— ๊ฐ๊ฐ ๋‹ค๋ฅธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ PATCH๋ฅผ PUT๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค๋ฉด ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. [์ฐธ๊ณ ]

DELETE

  • ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋™์ž‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • GET๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์š”์ฒญ์˜ ๋ณธ๋ฌธ์„ ๋‹ด์œผ๋ฉด ์•ˆ ๋œ๋‹ค๊ณ  ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, HTTP Client ๊ตฌํ˜„์ฒด์— ๋”ฐ๋ผ ์ „์†ก์ด ์•ˆ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. ๋ฆฌ์†Œ์Šค

๋™์‚ฌ ๋ณด๋‹ค ๋ช…์‚ฌ

  • URI์—๋Š” ๋ช…์‚ฌํ˜•์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํฌํ•จํ•˜๊ณ  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋ฅผ ํ‘œํ˜„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ HTTP ๋ฉ”์„œ๋“œ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”!

๋‹จ์ˆ˜ ๋ณด๋‹ค ๋ณต์ˆ˜

  • ๊ฐœ๋ณ„ ๋ฆฌ์†Œ์Šค์™€ ๋ฆฌ์†Œ์Šค์˜ ์ง‘ํ•ฉ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ณต์ˆ˜ํ˜•์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐ‘์ค„(_)๋ณด๋‹ค๋Š” ํ•˜์ดํ”ˆ(-)

  • ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋ฐ‘์ค„ ๋ณด๋‹ค๋Š” ํ•˜์ดํ”ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” ์Šฌ๋ž˜์‹œ(/)

  • ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์˜ ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    GET /users/123/playlists

 

3. ๊ฒ€์ƒ‰ / ์ •๋ ฌ / ํ•„ํ„ฐ๋ง / ํŽ˜์ด์ง€๋„ค์ด์…˜

๋ณดํ†ต GET ๋ฉ”์„œ๋“œ URI์— Query String์„ ์‚ฌ์šฉํ•ด ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒ€์ƒ‰ : GET /expenses?search=์‡ผํ•‘
  • ์ •๋ ฌ : GET /expenses?sort=amount_asc
  • ํ•„ํ„ฐ๋ง : GET /expenses?category=food&start_date=2024-08-01&end_date=2024-08-03
  • ํŽ˜์ด์ง€๋„ค์ด์…˜ : GET /expenses?page=1&limit=10

 

๋‚˜์˜ ์ƒ๊ฐ

REST ์›์น™ ์ค‘ Uniform Interface๋ฅผ ์•„์ฃผ ์ฒ ์ €ํžˆ ์ง€์ผœ์„œ ์„ค๊ณ„ํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค๊ณ  ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๋ชจ๋“  ์›์น™์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒŒ ๊ณผ์—ฐ ์‹ค์šฉ์ ์ผ๊นŒ ์‹ถ๊ธฐ๋„ ํ•˜๊ณ ์š”.

์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๋ ค์ง„ REST API ๋””์ž์ธ ๊ฐ€์ด๋“œ์กฐ์ฐจ๋„ ์ง€ํ‚ค๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๋„ ์ข…์ข… ๋ณด์ž…๋‹ˆ๋‹ค.

Kakao Developer API ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ๋‹ค์ค‘ ์‚ญ์ œ๋ฅผ ์œ„ํ•ด POST๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  URI์— delete ๋™์‚ฌ๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

 

๊ฒฐ๊ตญ์€ ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ ค๋Š” ๋…ธ๋ ฅ๊ณผ ๋™์‹œ์—, ํ˜‘์˜๋ฅผ ํ†ตํ•ด ์ผ๊ด€๋˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. [์ฐธ๊ณ ]

 

 

์ฐธ๊ณ