Express
Express๋
Node.js์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์๋ฒ ํ๋ ์์ํฌ
ts-node
Typescript REPL
ํ์ ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์ปดํ์ผ ๊ณผ์ ์์ด ๋ฐ๋ก ์คํํด์ฃผ๋ ๋๊ตฌ
nodemon
์๋ฒ ์ธก ์ฝ๋ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ธฐ๋ฉด ์๋์ผ๋ก ์๋ฒ๋ฅผ ์ฌ์คํ ํด์ฃผ๋ ๋๊ตฌ
nodemon๋ฅผ ์ฌ์ฉํ๋ ์ด์
์๋ฒ๋ ์คํ ์์ ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ค์๊ฐ ์ฝ๋ ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ฉ๋์ง ์๋๋ค.
๋ณ๊ฒฝ์ฌํญ์ ์ ์ฉํ๋ ค๋ฉด ์๋ฒ๋ฅผ ์ฌ์คํ ํด์ผํจ
์ด๋ฐ ๊ท์ฐฎ์ ์์
์ nodemon
์ด ํด๊ฒฐํด์ค๋ค.
ts-node
์ ์์กด์ฑ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ผญ ๊ฐ์ด ์ค์น๊ฐ ๋์์ด์ผ ํ๋ค.
res.send
ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ก
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ๋ฃ์ผ๋ฉด ์๋์ผ๋ก JSON ๊ฐ์ฒด๋ก ๋ณํ๋๋ค.
์ ์ก๋ ๋ฐ์ดํฐ ํ์ธํ๋ ๋ฐฉ๋ฒ
๋ธ๋ผ์ฐ์ ๋ก ์ง์ url์ ์ ๋ ฅํด์ ํ์ธ
ํฐ๋ฏธ๋ ์์์ ํ์ธ (curl, http)
curl๋ก ํ์ธ
HTTP ๋ช ์ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ ์์ธํ๊ฒ ํ์ธํ ์ ์๋ค.
REST API
"์ด๋ป๊ฒ ํ๋ฉด ๊ธฐ์กด์ HTTP๋ก ๊ตฌ์ถ๋์ด ์๋ ์น๋ค๊ณผ ํธํ์ฑ์ ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์๊ฒ ๊ฐ๋ฐํ ์ ์์๊น"
- Roy T. fielding
REpresentational State Transfer, ์น ๊ธฐ๋ฐ ์์คํ ์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ํต์ ์ ์ํ ์ํคํ ์ฒ ์คํ์ผ
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ๋จ์ํ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค๋ฉฐ, ๋ค์ํ ํ๋ซํผ๊ณผ ์ธ์ด์ ํธํ๋๋ ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์น API๋ฅผ ์ ๊ณตํ๋ค.
REST API ํน์ง
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ํต์ ์ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉ
์์์ URI๋ก ํํ
HTTP Method๋ฅผ ํตํด ์์์ ์ฒ๋ฆฌ
Roy T. fielding์ด ์ ์ํ REST API ์ ์ฝ ์กฐ๊ฑด 4๊ฐ์ง
RESTful API -> REST ์ํคํ ์ณ ์คํ์ผ์ ๋ฐ๋ฅด๋ API
๋ฆฌ์์ค ์๋ณ: ๋ฆฌ์์ค๊ฐ URI๋ก ์๋ณ๋์ผ ํจ
ํํ์ ํตํ ๋ฆฌ์์ค ์ ์ด: ํํ์ ํตํด์ ์์์ ์กฐ์ํด์ผ ํ๋ค.
์ ํ ์ค๋ช ๋ฉ์์ง: ์ค์ค๋ก ์ค๋ช ํ๋ ๋ฉ์์ง๊ฐ ๋์ด์ผ ํ๋ค.
HATEOAS: ์ ํ๋ฆฌ์ผ์ด์ ์ํ๊ฐ ํ์ดํผ๋ฏธ๋์ด๋ฅผ ํตํด ์ ์ด๋์ด์ผ ํ๋ค.
๋ณดํต REST API์์๋ ์๋ํฌ์ธํธ(URI)๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ , HTTP Verb(Method)๋ฅผ ๋์ ํ์ฌ ์์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง๋ฅผ ์ ํ๋ค.
HTTP Verb(Method)
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ์์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง ๋ํ๋ด๋ ๋ฐฉ๋ฒ
๋ฆฌ์์ค URL: /products
Read (Collection) -> GET /products * Read๋ Collection๊ณผ Item(Element)๋ก ๋๋จ
Read (Item) -> GET /products/{id}
Create (Collection Pattern ํ์ฉ) -> POST /products
Update (Item) -> PUT ๋๋ PATCH /products/{id}
Delete (Item) =-> DELETE /products/{id}
Last updated