๐Ÿ’ป RESTful(feat. ๋งํ•˜๋ฉด์„œ ๋ฐฐ์›Œ์š”)

waterglassesยท2022๋…„ 4์›” 29์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
26/50
post-thumbnail

๋งํ•˜๋ฉด์„œ ๋ฐฐ์›Œ์š” ์Šคํ„ฐ๋””์—์„œ ๊ณต๋ถ€ํ•˜๋Š” ๋‚ด์šฉ์œผ๋กœ ์งˆ๋ฌธ๊ณผ ๋Œ€๋‹ต ์œ„์ฃผ์˜ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‚ด์šฉ์— ์˜ค๋ฅ˜๋‚˜ ์˜คํƒ€๊ฐ€ ์žˆ์„ ์‹œ ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. REST(REpresentationsal State Transfer)๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

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

2. REST์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์žฅ์ 

  • ํด๋ผ์ด์–ธํŠธ / ์„œ๋ฒ„ ๊ตฌ์กฐ : ๊ฐ๊ฐ์˜ ์—ญํ• ์ด ํ™•์‹คํ•˜๊ฒŒ ๊ตฌ๋ถ„๋˜๊ณ  ์ผ๊ด„์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๊ฐ„ ์˜์กด์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.
  • ๋ฌด์ƒํƒœ์„ฑ : ์„œ๋ฒ„์—์„œ ์–ด๋–ค ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ๋“ค์–ด์˜จ ์š”์ฒญ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌ๋งŒ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ์‰ฝ๊ณ  ๋‹จ์ˆœํ•ด์ง„๋‹ค.
  • ์บ์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ : ์บ์‹œ ์‚ฌ์šฉ์„ ํ†ตํ•ด ์‘๋‹ต์‹œ๊ฐ„์ด ๋นจ๋ผ์ง„๋‹ค.
  • ์ž์ฒด ํ‘œํ˜„์„ฑ : JSON์„ ์ด์šฉํ•œ ๋ฉ”์‹œ์ง€ ํฌ๋ฉง์„ ์ด์šฉํ•˜์—ฌ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ณ  REST API ๋ฉ”์‹œ์ง€ ๋งŒ์œผ๋กœ๋„ ์–ด๋–ค ํ–‰์œ„๋ฅผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ณ„์ธตํ™” ๊ตฌ์กฐ : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๊ฐ„์— ํ”„๋ก์‹œ ์„œ๋ฒ„, ์•”ํ˜ธํ™” ๊ฒŒ์ธต ๋“ฑ ์ค‘๊ฐ„ ๋งค์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • point-to-point ํ†ต์‹  ๋ชจ๋ธ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ๋งบ๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ์—๋Š” ์ ๋‹นํ•˜์ง€ ์•Š๋‹ค.
  • HTTP๋Š” URI, HTTP์— ๋Œ€ํ•œ ๋‚ด์šฉ๋งŒ์„ ๋‹ด๊ณ  ์žˆ์–ด์„œ ๋ณด์•ˆ๊ณผ ํ†ต์‹ ๊ทœ์•ฝ ์ •์ฑ… ๊ฐ™์€ ๊ฒƒ์€ ์ „ํ˜€ ๋‹ค๋ฃจ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์„œ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

3. ์™œ RESTful๋ผ๊ณ  ๋งํ•˜๋‚˜์š”?

  • ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ง€์›์— ์œ ์šฉํ•˜๊ณ  HTTP ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋ฏ€๋กœ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋Š” ์–ด๋˜ ์–ธ์–ด๋ฉด ๋ชจ๋‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

4. REST API์˜ ์ผ๋ฐ˜์ ์ธ ์„ค๊ณ„ ๊ทœ์น™์— ๋Œ€ํ•ด์„œ ๋งํ•ด์ฃผ์„ธ์š”.

  • URI๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ๋ฆฌ์†Œ์Šค๋Š” ๋™์‚ฌ๊ฐ€ ์•„๋‹Œ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • ๋ฆฌ์†Œ์Šค๋Š” Collection๊ณผ Document๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.(Collection์€ ๋ณต์ˆ˜)
  • ๊ทธ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP์˜ method๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ ์™ธ ์„ธ๋ถ€ ๊ทœ์น™

    • ์Šฌ๋ž˜์‹œ ๊ตฌ๋ถ„์ž ( / )๋Š” ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
    • URI ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋กœ ์Šฌ๋ž˜์‹œ ( / )๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ•˜์ดํ”ˆ ( - )์€ URI ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

5. graphQL์„ ์ด์šฉํ•œ API ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•˜์—ฌ REST API๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • GraphQL API๋Š” ์ฃผ๋กœ ์ „์ฒด API๋ฅผ ์œ„ํ•ด์„œ ํ•˜๋‚˜์˜ endpoint๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ RestAPI๋Š” ๋ฆฌ์†Œ์Šค๋งˆ๋‹ค ํ•˜๋‚˜์˜ endpoint๋ฅผ ๊ฐ€์ง€๊ณ  ๊ทธ endpoint์—์„œ ๊ทธ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • GraphQL์€ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•œ Query๋ฌธ์— ๋”ฐ๋ผ ์‘๋‹ต์˜ ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
  • GraphQL์€ ์›ํ•˜๋Š” ์ •๋ณด๋Œ€๋กœ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ REST API๋Š” ์‘๋‹ต์˜ ํ˜•ํƒœ๊ฐ€ ์ •ํ•ด์ ธ์žˆ๊ณ , ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ํž˜๋“ญ๋‹ˆ๋‹ค.

Ref

Restful์ด๋ž€
REST API URI ๊ทœ์น™
REST API vs GraphQL ์ฐจ์ด์  ์•Œ์•„๋ณด๊ธฐ

profile
๋งค ์ˆœ๊ฐ„ ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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