์ฌํ๊น์ง๋ Node.js๋ฅผ ํตํด ์น ์๋ฒ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง, ๋ด๋ถ ๋ชจ๋์ ํ์ฉํด ์ด๋ป๊ฒ ์๋ฏธ ์๋ ์ฝํ ์ธ ๋ฅผ ๊ตฌ์ถํ๋์ง ๋ฐฐ์ ๋ค.
์ด์ ๋ ๋์ ์ฝํ ์ธ ์ ์น ํ๋ ์์ํฌ๋ฅผ ๊ฐ์ง๊ณ ์ข ๋ ๋ฐ์ ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ด ๋ ์ ์๋๋ก ํ๋ค.
๊ทธ๋์ ์ฌ๊ธฐ์ ํด๋ณธ ๊ฒ์ Express.js๋ฅผ ์ฌ์ฉํ ์น ๊ฐ๋ฐ์ด๋ค.
๋จผ์ , Express.js๊ฐ ๋ญ์ง ์ดํด๋ณด์๋ฉด
Express.js๋ ๊ฐ๋ฐ ์๋๋ฅผ ์ฌ๋ ค์ฃผ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ์์ ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค.
Express.js๋ ๋๋ถ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฆ์ ํ์ํ ์ค๋ฅ ์ฒ๋ฆฌ๋ ์ ์ ์์ ํธ๋ค๋ง๋ฑ์ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๋ค.
=> ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ๋์์ฃผ๊ณ , ๋์ ๋ฐ ์ ์ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ฌ์ฉ์ ํ๋์ ์ถ์ ํ๋ ๋ชจ๋๊ณผ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
Express.js์ ๊ฐ์ ์น ํ๋ ์์ํฌ๋ ๋ณดํต ๋ฏธ๋ค์จ์ด๋ก ์ด์๋๋ค.
ํ๋ ์์ํฌ์ ์์น๊ฐ ์น ์์ HTTP์ Node.js ํ๋ซํผ ์ฌ์ด์ด๊ธฐ ๋๋ฌธ.
๋ฏธ๋ค์จ์ด๋? ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง๊ณผ์ ๋ฐ์ดํฐ ๊ตํ ์ ์ ๋๊ธฐํ๊ณ , ๋ถ์ํ๊ณ , ํํฐ๋งํ๊ณ , HTTP ํต์ ์ ๋ค๋ฃจ๋ ์ฝ๋๋ฅผ ์ผ์ปซ๋ ์ผ๋ฐ ์ฉ์ด์ด๋ค.
Express.js๋ ์ธ๋ถ ํจํค์ง์ด๊ธฐ ๋๋ฌธ์ Node.js ์ค์น ์ ๊ฐ์ด ์ค์น๋์ง ์๋๋ค. ๊ทธ๋์ ๋ฐ๋ก ์ค์นํด์ผํ๋ค.
npm install express --save
๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
express ๋ณ์์ Express.js๋ฅผ ์์ฒญํ์ฌ ์์๋ก ์ ์ฅํ๋ค.
express ์น ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ app์ผ๋ก ์ฐธ์กฐ๋๋ ์์๋ก ์ ์ฅ๋๋ค.
์ฒซ๋ฒ์งธ ์บก์คํค ํ๋ก์ ํธ์์ ์ฒ๋ผ, Express.js๋ ๋ณ๋์ ๋ค๋ฅธ ๋ชจ๋์ ์ฐ์ง ์๊ณ GET๋ผ์ฐํธ ์ ์ ๋ฐฉ๋ฒ๊ณผ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๊ณตํ๋ค.
์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ผํ ๋ชจ๋์ send ๋ชจ๋์ด๋ค.
http์ write์ ๋น์ทํ ์ญํ ์ ํ๊ณ , ํ๋ ์ธ ํ ์คํธ ํํ๋ก ์๋ต์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌํ๋ค.
(write๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ฐ๋์ end๋ก ๋ง๋ฌด๋ฆฌ ํด์ผํ๋ค.)
๊ทธ๋์ ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด
"Hello Universe!"๊ฐ ๋ธ๋ผ์ฐ์ ์ ๋จ๊ฒ ๋๋ค.
Express.js๋ก ๋ผ์ฐํธ ๋ง๋ค๊ธฐ
Express.js์์๋ app ๊ฐ์ฒด๋ก ๋ผ์ฐํธ์ ์ ์๊ฐ ์์๋๋ฉฐ (์: app.post()),
์๋ฌธ์๋ก ๋ HTTP ๋ฉ์๋์ ๋ผ์ฐํธ ๋ฐ ์ฝ๋ฐฑ ํจ์ ๊ฐ์ ๋งค๊ฐ๋ณ์์ ์ํด ์ง์๋๋ค.
'/contact' url์ ๋ฐ๋ฅธ post ๋ฉ์๋๋ฅผ ์ด์ฉํ ์์ฒญ ์ฒ๋ฆฌ๋
์ด๋ ๊ฒ Express.js ์์ ์ ๊ณตํ๋ post ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
๋ Express.js๋ ๊ฒฝ๋ก์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
๋ผ์ฐํธ ๋งค๊ฐ๋ณ์๋ ์์ ์ฝ๋ก (:)์ด ๋ถ์ผ๋ฉฐ ๊ฒฝ๋ก ์ด๋์๋ผ๋ ์ฌ ์ ์๋ค.
์ฌ๊ธฐ์ ๊ฒฝ๋ก๊ฐ "items/lettuce"๋ก ์ ์ ๋๋ค๋ฉด, ์์ ํจ์๊ฐ ํธ๋ฆฌ๊ฑฐ ๋ ๊ฒ์ด๋ค.
๋ผ์ฐํธ ๋งค๊ฐ๋ณ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด ์ง์ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ํ์ ํ ๋ ๊ฐํธํ๋ค.
์ฌ์ฉ์ ๊ณ์ ๊ณผ ์ฝ์ค ๋ชฉ๋ก์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ค๊ณ ํ ๋
/users/:id์ /course/:type์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด์ ์ฝ์ค์ ์ข ๋ฅ๋ฅผ ์ก์ธ์ค ํ ๊ฒ์ด๋ค.
์ด ๊ตฌ์กฐ๋ REST ์ํคํ ์ฒ ๊ฐ๋ฐ์ ์ํด ํ์ํ๋ค.
์์ฒญ ๋ฐ์ดํฐ์ ๋ถ์
์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง์ด๋ค.
- POST ์์ฒญ์์ ์์ฒญ ๋ณธ๋ฌธ์ ํตํด
- URL์์์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ํตํด
http์ ์ ์ ๋ฐ์ดํฐ๋ ๋ฒํผ ์คํธ๋ฆผ ํํ์ฌ์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํํ๊ฐ ์๋๋ค.
๊ทธ๋์ ์ด๋ฅผ ๋ณํํ๊ธฐ ์ํด ๋ณ๋์ ํจํค์ง๋ฅผ ์ค์นํ๋ค.
npm install body-parser --save ๋ช ๋ น์ ์ ๋ ฅํ๋ค.
body-parser๋ ์ ์ ๋๋ ์์ฒญ ๋ณธ๋ฌธ์ ๋ถ์ํ๋ ๋ชจ๋์ด๋ค.
์ด ๋ชจ๋์ Express.js์ ํ๋ฆฌ ํจํค์ง ํํ๋ก ์ค์น๋๋ฉฐ ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์ ์์ฒญํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ app.use ๋ฅผ ํตํด URL ์ธ์ฝ๋ฉ์ ์ง์ ํ๊ณ , (26ํ ~ 30ํ)
JSON ์์์ผ๋ก ๋ ์ ์ ์์ฒญ์ ํ์ฑ์ ์ง์ ํ๋ค. (32ํ)
์ดํ ํฌ์คํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ํ ๋ผ์ฐํธ๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ body์ query๋ฅผ ์ถ๋ ฅํ๋ค.
์ด์ curl ๋ช ๋ น์ด๋ก
curl --data "firstname=Jon&lastname=Wexler" http://localhost:3000 ์ ์ ๋ ฅํด๋ณด๋ฉด
{firstname: 'Jon', lastname: 'Wexler'}๊ฐ ์ฝ์์ฐฝ์ ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
์ง๊ธ ํ ๊ฒ์ post ์์ฒญ์ ๋ณด๋ธ๊ฑด๋ฐ, url ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ๋ณด๋ด๋ณด์๋ค.
http://localhost:3000?cart=3&pagesVisited=4&utmcode=837623 ์ผ๋ก ํ ์คํธ๋ฅผ ํด๋ณด๋ฉด
์ฒซ๋ฒ์งธ ํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก
{cart: '3', pagesVisited: '4', utmcode: '837623'}์ด ์ ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
์๋๋ ๊ฒฐ๊ณผ ํ๋ฉด์ด๋ค.
MVC์ ์ฌ์ฉ
๋ฐ๋ฒ ํ ์์๊ฐ์ ์ด์ด ์ฌ๊ธฐ์์๋ ๋์ค๋ MVC ๊ตฌ์กฐ... ์น๊ฐ๋ฐ์์ ์ค์ํ๊ธด ํ๊ฐ๋ณด๋ค.
MVC ๊ตฌ์กฐ๋ ์ ์๊ณ ์๋ค ์ํผ Model, View, Controller๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ 3๊ฐ์ง ๋ฉ์ธ ๊ธฐ๋ฅ์ ํฌ์ปค์ค๋ฅผ ๋ง์ถฐ ๊ฐ๋ฐํ๋ ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค.
๊ทธ๋์ ๊ทธ ์ํคํ ์ณ์ ๋ง์ถฐ ์๋ ์๋ ํ๋ก์ ํธ๋ฅผ ๊ณ ์น๊ธฐ ์ํด ์๋์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณค๋ค.
- ํ๋ก์ ํธ ํด๋์ controllers ํด๋๋ฅผ ๋ง๋ ๋ค.
- controllers ํด๋ ์์ homeController.js ํ์ผ์ ์์ฑํ๋ค.
- main.js ํ์ผ์ ์ต์๋จ์ const homeController = require("./controllers/homeController") ์ฝ๋๋ฅผ ์ถ๊ฐํด ํ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ถ๋ฌ์จ๋ค.
- ๋ผ์ฐํธ ์ฝ๋ฐฑ ํจ์๋ฅผ ํ ์ปจํธ๋กค๋ฌ๋ก ์ฎ๊ฒจ ํด๋น ๋ชจ๋์ export ๊ฐ์ฒด์ ์ถ๊ฐํ๋ค.
homeController.js ํ์ผ์ ์ด๋ ๊ฒ ์ ์๋ฅผ ํ๊ณ ,
main.js์์ ์ด๋ ๊ฒ ๋ถ๋ฌ์์ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
'โ๏ธ 21-2 IPP > Node.js study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Node.js - 12 ์ค์ ๊ณผ ์๋ฌ์ฒ๋ฆฌ (0) | 2021.10.26 |
---|---|
Node.js - 11 ๋ทฐ์ ํ ํ๋ฆฟ, ๋ ์ด์์ (0) | 2021.10.25 |
Node.js - 9 ์บก์คํค ํ๋ก์ ํธ: ์ฒซ๋ฒ์งธ ์น (0) | 2021.10.21 |
Node.js - 8 ์์ , ๋ผ์ฐํธ exports (0) | 2021.10.15 |
Node.js - 7 ๋ผ์ฐํธ(2) (0) | 2021.10.15 |
๋๊ธ