๐Ÿ“‹Restful API & package.json

์ด์ง„ํฌยท2022๋…„ 5์›” 29์ผ
0

๊ฐœ๋…์ •๋ฆฌ

๋ชฉ๋ก ๋ณด๊ธฐ
5/10

๐Ÿ“Restful API

โœ”๏ธRESTful ์ด๋ž€

HTTP์™€ URI ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” HTTP ๋ฉ”์†Œ๋“œ์™€ URI ๋งŒ์œผ๋กœ ์ธํ„ฐ๋„ท์— ์ž๋ฃŒ๋ฅผ CRUD ํ•  ์ˆ˜ ์žˆ๋‹ค.

'REST API'๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ 'RESTful' ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

RESTful์€ REST๋ฅผ REST ๋‹ต๊ฒŒ ์“ฐ๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ๋ฐœํ‘œํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.


๐Ÿ“RESTful API ๊ฐœ๋ฐœ ์›์น™

1. ์ž์›์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • URL๋งŒ์œผ๋กœ ๋‚ด๊ฐ€ ์–ด๋–ค ์ž์›์„ ์ œ์–ดํ•˜๋ ค๊ณ  ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.(์ž์›์˜ ์ข…๋ฅ˜๊นŒ์ง€!)
  • Server๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด๋Š” JSON์ด๋‚˜ XMLํ˜•ํƒœ๋กœ HTTP body์— ํฌํ•จ๋˜์–ด ์ „์†ก์‹œํ‚จ๋‹ค.

2. ํ–‰์œ„๋Š” ๋ช…์‹œ์ ์ด์–ด์•ผ ํ•œ๋‹ค.

  • REST๋Š” ์•„ํ‚คํ…์ณ ํ˜น์€ ๋ฐฉ๋ฒ•๋ก ๊ณผ ๋น„์Šทํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ•์ œ์ ์ด์ง€ ์•Š๋‹ค. ๊ธฐ์กด์˜ ์›น ์„œ๋น„์Šค์ฒ˜๋Ÿผ, GET์„ ์ด์šฉํ•ด์„œ UPDATE์™€ DELETE๋ฅผ ํ•ด๋„ ๋œ๋‹ค.
  • ๋‹ค๋งŒ REST ์•„ํ‚คํ…์ณ์—๋Š” ๋ถ€ํ•ฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ REST๋ฅผ ๋”ฐ๋ฅธ๋‹ค๊ณ  ํ•  ์ˆ˜๋Š” ์—†๋‹ค.(RESTfulํ•˜์ง€ ์•Š๋‹ค.)

3. ์ž๊ธฐ์„œ์ˆ ์ ์ด์–ด์•ผ ํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€์ •๋ณด๋งŒ ๊ฐ€์ง€๊ณ ๋„ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ์ธ์ง€, ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•ด์„œ ์–ด๋–ค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.
  • ์ฆ‰, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ, ๋ฐ์ดํ„ฐ ์›๋ณธ์„ ์ฝ์–ด์•ผ ํ•œ๋‹ค๋ฉด ์ž๊ธฐ ์„œ์ˆ ์ ์ด์ง€ ๋ชปํ•˜๋‹ค.

4. HATEOS(Hypermedia as the Engine of Application State)

  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ต์„ ํ•  ๋•Œ, ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋งํฌ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • REST๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์†์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ๋„ ์‚ฌ์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์œ ์—ฐํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„ , ๋Š์Šจํ•œ ์—ฐ๊ฑธ์„ ๋งŒ๋“ค์–ด์ค„ ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.(๋งํฌ์‚ฌ์šฉ)
  • ํด๋ผ์ด์–ธํŠธ๋Š” ํ•˜์ดํผ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ์ „์ฒด ๋„คํŠธ์›Œํฌ์™€ ์—ฐ๊ฒฐ๋˜๋ฉฐ HATEOAS๋Š” ์„œ๋ฒ„๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋ฒ„์™€ ์„œ๋ฒ„, ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

๐Ÿ“Representational State Transfer

  • ์ž์›(resource)์„ ์ด๋ฆ„(์ž์›์˜ ํ‘œํ˜„: representation)์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ

  • ์›”๋“œ ์™€์ด๋“œ ์›น(www)๊ณผ ๊ฐ™์€ ๋ถ„์‚ฐ ํ•˜์ดํผ๋ฏธ๋””์–ด ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ ํ˜•์‹์ด๋‹ค.

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


๐Ÿ“REST์˜ ๊ตฌ์ฒด์ ์ธ ๊ฐœ๋…

HTTP URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ ,

HTTP Method (POST, GET, PUT, DELETE)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD OPERATION์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์ฆ‰, REST๋Š” ์ž์› ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ (ROA: Resource Oriented Architecture) ์„ค๊ณ„์˜ ์ค‘์‹ฌ์— Resoure๊ฐ€ ์žˆ๊ณ  HTTP Method๋ฅผ ํ†ตํ•ด Resource๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ์•„ํ‚คํ…์ณ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์›น์˜ ๋ชจ๋“  ์ž์›์— ๊ณ ์œ ํ•œ ID์ธ HTTP URI ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.


๐Ÿ“REST์˜ ๊ตฌ์„ฑ

1. ์ž์›(Resource) - URL

  • ํ–‰์œ„(Verb) - Http Method

  • ํ‘œํ˜„(Representations)

  • ์ž์› (Resource) URL

๋ชจ๋“  ์ž์›์— ๊ณ ์œ ํ•œ ID๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด ์ž์›์€ Server์— ์กด์žฌํ•œ๋‹ค.

์ž์›์„ ๊ตฌ๋ณ„ํ•˜๋Š” ID๋Š” /orders/order_id/1 ์™€ ๊ฐ™์€ HTTP URI ์ด๋‹ค.

2. ํ–‰์œ„ (Verb) - Http Method

HTTP ํ”„๋กœํ† ์ฝœ์˜ Method๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

HTTP ํ”„๋กœํ† ์ฝœ์€ GET, POST, PUT, DELETE์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

3. ํ‘œํ˜„ (Representaion of Resource)

Client๊ฐ€ ์ž์›์˜ ์ƒํƒœ (์ •๋ณด)์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์š”์ฒญํ•˜๋ฉด Server๋Š” ์ด์— ์ ์ ˆํ•œ ์‘๋‹ต (Representation)์„ ๋ณด๋‚ธ๋‹ค

REST์—์„œ ํ•˜๋‚˜์˜ ์ž์›์€ JSON, XML, TEXT, RSS ๋“ฑ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ Representation์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

ํ˜„์žฌ๋Š” JSON์œผ๋กœ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„์ด๋‹ค.


๐Ÿ“package.json

ํ”„๋กœ์ ํŠธ์˜ ์ •๋ณด๋ฅผ ์ •์˜ํ•˜๊ณ , ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๋ช…์‹œํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•œ๋‹ค.

์ž‘์„ฑ๋˜๋Š” ์ •๋ณด๋ฅผ ํฌ๊ฒŒ 2๊ฐœ๋กœ ๋‚˜๋ˆ„๋ฉด ํ”„๋กœ์ ํŠธ ์ •๋ณด, ํŒจํ‚ค์ง€ ์ •๋ณด๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • ํ”„๋กœ์ ํŠธ์˜ ์ •๋ณด : name, version์˜ ์˜์—ญ
  • ํŒจํ‚ค์ง€ ๋ฒ„์ „ ์ •๋ณด: dependencies ๋˜๋Š” devDependencies ์˜์—ญ

๐Ÿ“ํ”„๋กœ์ ํŠธ ์ •๋ณด

package.json ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ name๊ณผ version ํ•ญ๋ชฉ์„ ํฌํ•จํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

name: ์†Œ๋ฌธ์ž ํ•œ ๋‹จ์–ด๋กœ ์ด๋ฃจ์–ด์ ธ์•ผํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•˜์ดํ”ˆ( - )๊ณผ ์–ธ๋”์Šค์ฝ”์–ด( _ )๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.

versoin: x.x.x ํ˜•์‹์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฉฐ, ์ž‘์„ฑ ๊ทœ์น™์„ ์‹œ๋งจํ‹ฑ ๋ฒ„์ €๋‹์ด๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ“ํŒจํ‚ค์ง€ ์ •๋ณด

ํŒจํ‚ค์ง€ ์ •๋ณด๋Š” dependencies ๋˜๋Š” devDependencies์— ์ž‘์„ฑ๋œ๋‹ค.

  • "dependencies": ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€.
  • "devDependencies": ๋กœ์ปฌ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ์—๋งŒ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€.

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