1. Express
1. Express
Node.js๋ฅผ ์ํ ๋น ๋ฅด๊ณ ๊ฐ๋ฐฉ์ ์ธ ๊ฐ๊ฒฐํ ์น ํ๋ ์์ํฌ Node.js ์ด๊ธฐ๋ถํฐ ์กด์ฌํ ์ค๋๋ ํ๋ ์์ํฌ โ ํ์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ , API ๊ฐ๋ฐ์ ์ํด ์ค๊ณ๋จ
ํ๋ก ํธ์๋๋ ๋ฐฑ์๋ ์ง์์ ์์์ผ ํ ๊น?
๋ฐฑ์๋ ์ง์ ์์ด ํ๋ก ํธ ์์ ์ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ
๐ฉ๐ปโ๐ป ๋ฐฑ์๋ ์ง์์ ์์์ผ ํ๋ ์ด์
๋ฐฑ์๋์ ํ์ ์ด์๊ฐ ๋ฐ์ํ์ ๋ ์ด๋์ชฝ์์ ๋ฐ์ํ๋์ง ํ์คํ ์ ์ ์์(์ต์ธํ ์ํฉ ๋ฐฉ์ง)
BFF(Backend For Frontend) API๋ฅผ ๋ค์ด๋ ํธ๋ก ์์กดํ ๋์ ์ด์๋ค์ ํด๊ฒฐํ๊ณ ์ BFF๊ฐ ๋ฑ์ฅ ํ๋ก ํธ์๋๋ฅผ ์ํ ์ค๊ฐ ์๋ฒ๋ฅผ ๊ตฌํํ๋ ๊ฒ
ํ ์คํธ์์์ ๋ชจํน
Nextjs ์ฌ์ฉ ์ API๋ฅผ ๋ฐ๋ก ์ก์์ค ๋
๊ฐ๋จํ ์๋ฒ ์ฑ npm ํจํค์ง ์ธํ
1. ์์
ํด๋ ์ค๋น
2. ํจํค์ง ์ด๊ธฐํ
3. gitignore ํ์ผ ์์ฑ
4. TypeScript
5. ts-node ์ค์น
์ปดํ์ผ ์์ด Node.js์์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ์คํํ ์ ์์(๊ฐ๋ฐ ํ๊ฒฝ์์ TS ์ฝ๋ ํ ์คํธ ๊ฐ๋ฅ)
6. ESLint
7. Express ์ค์น
Hello World ์์
1. TypeScript์ ๋ง์ถฐ์ app.ts ํ์ผ ์์ฑ
2. ts-node๋ก ์คํ
3. ์ฝ๋๋ฅผ ์์ ํ ๋๋ง๋ค ์๋ฒ๋ฅผ ์ฌ์คํํด์ผ ํ๋ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด nodemon ์ฌ์ฉ
โ ๏ธ ts-node์ ๋ํ ์์กด์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ts-node๋ฅผ ๊ผญ ์ค์นํด์ผ ํจ โ ๏ธ ์ค์ ์๋น์คํ๋ ์๋ฒ์์ ์ฌ์ฉํ๋ฉด ์ ๋จ
Monitor for any changes in your node.js application and automatically restart the server - perfect for development node.js ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ๊ณ ์๋ฒ๋ฅผ ์๋์ผ๋ก ๋ค์ ์์ํฉ๋๋ค. ๊ฐ๋ฐ์ ์ ํฉํฉ๋๋ค.
4. package.json ํ์ผ scripts ์ถ๊ฐ
2. URL ๊ตฌ์กฐ
๋๊ฐ๋ ํ๋ฉ ์ ์ฝ ์กฐ๊ฑด
4๊ฐ์ง๋ฅผ ๋ชจ๋ ๋ง์กฑํ์ง ์๊ณ , Resource์ HTTP Verb๋ง ๋์
ํ๋ ์์ค์ผ๋ก ์ฌ์ฉ
โ /write-post
โ /posts โ ๋ญ๊ฐ๋ฅผ ํ๋ค (CRUD)
ํ๋ฉ ์ ์ฝ ์กฐ๊ฑด
๋ค์ ์ ํ ์กฐ๊ฑด์ ์ค์ํ๋ ํ ๊ฐ๋ณ ์ปดํฌ๋ํธ๋ ์์ ๋กญ๊ฒ ๊ตฌํํ ์ ์์
์ธํฐํ์ด์ค ์ผ๊ด์ฑ : ์ผ๊ด์ ์ธ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค.
๋ฌด์ํ(Stateless) : ๊ฐ ์์ฒญ ๊ฐ ํด๋ผ์ด์ธํธ์ ์ฝํ ์คํธ๊ฐ ์๋ฒ์ ์ ์ฅ๋์ด์๋ ์ ๋๋ค.
์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ(Cacheable) : WWW์์์ ๊ฐ์ด ํด๋ผ์ด์ธํธ๋ ์๋ต์ ์บ์ฑํ ์ ์์ด์ผ ํ๋ค. ์ ๊ด๋ฆฌ๋๋ ์บ์ฑ์ ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ ์ํธ์์ฉ์ ๋ถ๋ถ์ ์ผ๋ก ๋๋ ์์ ํ๊ฒ ์ ๊ฑฐํ์ฌ scalability์ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
๊ณ์ธตํ(Layered System) : ํด๋ผ์ด์ธํธ๋ ๋ณดํต ๋์ ์๋ฒ์ ์ง์ ์ฐ๊ฒฐ๋์๋์ง, ๋๋ ์ค๊ฐ ์๋ฒ๋ฅผ ํตํด ์ฐ๊ฒฐ๋์๋์ง๋ฅผ ์ ์ ์๋ค. ์ค๊ฐ ์๋ฒ๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฅ์ด๋ ๊ณต์ ์บ์ ๊ธฐ๋ฅ์ ์ ๊ณตํจ์ผ๋ก์จ ์์คํ ๊ท๋ชจ ํ์ฅ์ฑ์ ํฅ์์ํค๋ ๋ฐ ์ ์ฉํ๋ค.
Code on demand (optional) : ์๋ฐ ์ ํ๋ฆฟ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ๊ณต์ ํตํด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์คํ์ํฌ ์ ์๋ ๋ก์ง์ ์ ์กํ์ฌ ๊ธฐ๋ฅ์ ํ์ฅ์ํฌ ์ ์๋ค.
ํด๋ผ์ด์ธํธ/์๋ฒ ๊ตฌ์กฐ : ์ํคํ ์ฒ๋ฅผ ๋จ์ํ์ํค๊ณ ์์ ๋จ์๋ก ๋ถ๋ฆฌ(decouple)ํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ-์๋ฒ์ ๊ฐ ํํธ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ์ ๋ ์ ์๋๋ก ํด์ค๋ค.
3. REST API
REST (Representational State Transfer)
๋ก์ด ํ๋ฉ(Roy Fielding)์ 2000๋ ๋ฐ์ฌํ์ ๋ ผ๋ฌธ์์ ์๊ฐ๋ ์ฉ์ด ํ๋ฉ์ HTTP์ ์ฃผ์ ์ ์ ์ค ํ ์ฌ๋ REST๋ ๋คํธ์ํฌ ์ํคํ ์ฒ ์๋ฆฌ์ ๋ชจ์์ด๋ฉฐ, ์์์ ์ ์ํ๊ณ ์์์ ๋ํ ์ฃผ์๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ ์ ๋ฐ์ ๊ฐ๋ฆฌํด ํ๋ฉ์ REST ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์คํ ์ RESTful ์ด๋ผ๋ ์ฉ์ด๋ก ๋ถ๋ฆผ
4. HTTP Method(CRUD)
๐ Create(์์ฑ), Read(์์ธ ์กฐํ), Update(์์ ), Delete(์ญ์ ) + ๋ชฉ๋ก ์กฐํ
๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ ํ๋์ ๊ธฐ๋ฅ์ ๋ง๋ค ๋ ์ต์ํ 5๊ฐ์ API๊ฐ ์์ด์ผ ํจ
CRUD์ ๋ํด HTTP Method๋ฅผ ๋์ Read๋ Collection(๋ณต์)๊ณผ Item(Element)(๋จ์)๋ก ๋๋จ
Read (Collection) โ
GET
/products โ ์ํ ๋ชฉ๋ก ํ์ธRead (Item) โ
GET
/products/{id} โ ํน์ ์ํ ์ ๋ณด ํ์ธCreate (Collection Pattern ํ์ฉ) โ
POST
/products โ ์ํ ์ถ๊ฐ (JSON ์ ๋ณด ํจ๊ป ์ ๋ฌ)Update (Item) โ
PUT(๋ฎ์ด์ฐ๊ธฐ) ๋๋ PATCH(์ผ๋ถ ๋ณ๊ฒฝ)
/products/{id} โ ํน์ ์ํ ์ ๋ณด ๋ณ๊ฒฝ (JSON ์ ๋ณด ํจ๊ป ์ ๋ฌ)Delete (Item) โ
DELETE
/products/{id} โ ํน์ ์ํ ์ญ์
PUT, PATCH, DELETE๋ fetch API๋ฅผ ํตํด AJAX ์์ฒญ์ผ๋ก๋ง ์ฒ๋ฆฌ ๊ฐ๋ฅ(๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ๋์์ด ์๋)
Thinking in React ์์
ํด๋ผ์ด์ธํธ ์์ค ์ฝ๋๋ฅผ ๋ฐฑ์๋์์ ์ ๊ณต๋ฐ๋๋ก ๊ตฌํ
๊ธฐ๋ณธ ๋ฆฌ์์ค URL: /products
ํ์ฉ ๋ฐฉ๋ฒ
res.send({ products });
: JSON์ผ๋ก ์๋ ๋ณํ
๋ฉํ ์ ๋ณด๋ฅผ ๊ฐ์ด ์ค ๋
๋ฐ๋ก ๋๊ฒจ์ค ๋
Last updated