โ Node.js์ ๐Expressํ๋ ์ ์ํฌ๋ฅผ ์จ๋ณด๋ฉฐ http์ ๋ฌด์์ด ๋ค๋ฅธ์ง ์ด๋ค ์ฅ์ ์ด์๋์ง ์ง์ ๋๊ปด๋ณด์.
- Node.js๋ ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋ฐํ์ ํ๊ฒฝ์ด๋ค.
- ๋ ธ๋์ ๋จ์ ์ด๋ผ๋ฉด ๋ชจ๋ ์ด๊ธฐ ์ค์ ์ ์ผ์ผ์ด ํด์ค์ผํ๋ค๋ ๊ฒ์ด๋ค. ์ด๊ธฐ์ node.js ์ค์น ๋ค npm init๋ฅผ ํด์ค์ผ node-modules๊ณผ package.json์ ๋ฐ์ ์ ์๋ค.
- ๋ฐ๋ฉด ์ฅ์ ์ ์ด๋ฌํ
Node.js
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ฒ๋ฅผ ๊ฐ๋ฐํ๋ฉด 1> ์์ ๋๊ฐ ๋๊ณ 2> ๋ฌดํํ ํ์ฅ ๊ฐ๋ฅ๊ฐ์ง ์ ์๋๋ฐ Server-side Framework๋ค์ด ๋ค์ํ๊ฒ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.- ๋ฐ๋ผ์, ๋ ธ๋ ๊ฐ๋ฐ์๋ npm์ ๋ฑ๋ก ๋์ด์๋ ๋ ธ๋ ํจํค์ง(๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ๋ ์์ํฌ)์ ๋ํ ๊ด์ฌ์ ๊ธฐ์ธ์ด์ผ ํ๊ณ ํ์ ์์ ์ด๋ค ํจํค์ง๋ค์ด ํ๋ฐํ ์ฌ์ฉ๋๋์ง ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ฉ๋๋์ง ๊ด์ฌ์ ๊ธฐ์ธ์ฌ์ผํ๋ค.
Express
๋ Node.js์ ํ๋ ์์ํฌ๋ก Node.js๊ฐ ์น์๋ฒ๋ฅผ ๊ตฌ์ถํ ๋ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋ค.Express
๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด 1> Node.js์ ๋ด์ฅ๋ชจ๋์ธ http๋ฅผ ์ฌ์ฉํด ์๋ฒ๋ฅผ ์์ฑํ๊ณ http ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํจ์๋ฅผ ๊ตฌํํ๋ค.
2> ๋ฐ๋ฉด ๋ ธ๋ ๊ธฐ๋ฐ JavaScript ํจํค์ง์ธ 2> Express ์ฌ์ฉํ๋ฉด ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋ค.
<script> const http = require("http"); // 1๋ฒ const server = http.createServer((request, response) => { // 2 console.log("request is received"); response.setHeader("Content-Types", "application/json"); // 3 response.end( // 4 JSON.stringify({ message: `this is minjae's first server`, }) ); }); server.listen(8000, () => { // 5 console.log("server is listening on PORT 8000"); }); </script>
- 1๋ฒ>
require
์ Node.js์ http ๋ด์ฅ๋ชจ๋์ ๋ถ๋ฌ์ importํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค.
import ๋ฌธ๋ฒ์ Bable์์ ์ฌ์ฉํ๋ ๊ฒ์ด๊ธฐ์ Node์์๋ ์๋์ผ๋ก import ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๋๊ตฌ๊ฐ ์๊ธฐ ๋๋ฌธ์(์ด๊ธฐ ์ธํ ์ ์ค์น๋์ด์์ง ์๊ธฐ์)require
๋ฌธ๋ฒ์ผ๋ก ๋ถ๋ฌ์์ผํ๋ค.- 2๋ฒ> http์ ํต์ฌ์ ์์ฒญ๊ณผ ์๋ต์ด๋ค. ์ฆ,
http์ createServer ๋ฉ์๋
๋ฅผ ํตํด ์๋ฒ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด HTTP ์๋ฒ๋ฅผ ๋ง๋ค๋ฉฐ createServer ๋ฉ์๋์ ์ธ์๋ก์์์ฒญ๊ณผ ์๋ต
์ ๋ฐ๋๋ค.- 3๋ฒ> ์๋ฒ๋
์์ฒญ
์ ๋ํ์๋ต
์ ํค๋๋ฅผ response์setHeader
๋ฉ์๋๋ฅผ ํตํด ์ค์ ํ ์ ์๊ณ- 4>๋ฒ
end
๋ฉ์๋๋ฅผ ํตํด์์ฒญ
์ ๋ํ์๋ต
์ ํด๋น๋๋ ๊ฐ์ ๋๊ธฐ๋๋ฐJSON.stringify() ๋ฉ์๋
๋ฅผ ํตํด JavaScript ๊ฐ์ด๋ ๊ฐ์ฒด ํํ๋ฅผ JSON ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋ด๋ณด๋ด์ค๋ค.- 5๋ฒ> ์์ฑํ ์๋ฒ์ธ server๋ ์ฒซ๋ฒ ์งธ ์ธ์๋ก PORT ๋ฒํธ๋ฅผ ๋ฐ๊ณ ๋๋ฒ ์งธ๋ก ์ฝ๋ฐฑํจ์๋ฅผ ๋ฐ๋๋ค.
PORT๋ ๋ฒก์๋์์ ์ง์ ํด์ฃผ์ด์ผ ํด๋ผ์ด์ธํธ์์ ๋ฒก์๋ ์๋ฒ๋ก ์ ์ํ ์์๋ค. ์ฝ๋ฐฑํจ์ ์์์ ํฌํธ ๋ฒํธ๋ก ์๋ฒ๋ฅผ ์ด์ด ์คํํ ๋์ ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ ์๋ฒ๊ฐ ์ผ์ ธ์๋ค๋ ๋ก๊ทธ ๋ฉ์ธ์ง๋ฅผ ๋จ๊ธฐ๋ ๊ฒ ์ผ๋ฐ์ ์ด๋ค.
๋ง์ฝ application์ ๊ท๋ชจ๊ฐ ์ปค์ ธ 1> ์ ์ ๋ฅผ ํ์๊ฐ์ ๋ ์์ผ์ผํ๊ณ , 2> ๋ก๊ทธ์ธ๋ ์ฒ๋ฆฌํด์ผ ํ๋ฉฐ, 3> ํ๋ก ํธ์๋ ์ธก์์ ์๊ตฌํ๋ ์ํ์ ๋ํ ์ ๋ณด๋ ์๋ต์ผ๋ก ๋ณด๋ด์ค์ผํ๋ ๋ง์ ์์ฒญ์ด ์๋ค๋ฉด ์ด๋จ๊น?
์ด๋ ๊ฒ ํด๋น ์์์ ๋ํด ๋ค๋ฅธ ํจ์(๋ก์ง)์ ์คํํ๋๋ก ํ๋ ๊ฒ์ ๋ผ์ฐํ
์ด๋ผ๊ณ ํฉ๋๋ค.
//- myServer.js <script> const http = require("http"); const { sendDB } = require("./sendDB"); const server = http.createServer((request, response) => { const { url, method } = request; response.setHeader("Content-Types", "application/json"); if (url === "/") return response.end(JSON.stringify({ message: `end point` })); if (url === "/node" && method === "GET") return response.end(JSON.stringify({ message: `node is great` })); if (url === "/node/express" && method === "GET") return response.end(JSON.stringify({ message: `express is more great` })); if (url === "/database" && method === "POST") return sendDB(response); response.end( JSON.stringify({ message: `this is minjae's first server`, }) ); }); server.listen(8000, () => { console.log("server is listening on PORT 8000"); }) </script>
- handler function sendDB.js
<script> const sendDB = (res) => { res.end( JSON.stringify({ data: [ { id: 1, name: "Mysql" }, { id: 2, name: "Oracle DB" }, { id: 3, name: "Mongo DB" }, ], }) ); }; module.exports = { sendDB }; </script>
- ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์
๋ผ์ฐํ
์ ์ง์ request ๊ฐ์ฒด์์ url๊ณผ method์ ๋ฐ๋ผ ์กฐ๊ฑด๋ฌธ์ผ๋ก ๋ถ๊ธฐํ์ฌ ์ฌ๋ฌ ๋ก์ง์ ์ฒ๋ฆฌํด ์ค์ผํ๋ค.- ์๋ฒ๋ฅผ ์คํํ๋ ํจ์ ์์ ๋ง์ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ง์ ๋ก์ง์ ๋ชจ๋ํ ํ๋๋ฐ ๋๋ฌด ๋ง์ ์๊ฐ์ด ๋ค์ด๊ฐ๋ค.
Express
์ด๋ค.Express
๊ฐ ํด์ฃผ๋ ์ญํ 2๊ฐ์ง1> url์ if ์กฐ๊ฑด๋ฌธ์ผ๋ก ๋งค์นญ์ ์ํด์ค๋๋๊ณ ๋ฆฌ์กํธ์์
๋ผ์ฐํ
ํ๋ฏ ์ฒซ๋ฒ ์งธ ์ธ์๋ก url์ ์จ์ฃผ๊ณ ๋๋ฒ ์งธ ์ธ์๋ก ์ด๋ค ํจ์๋ฅผ ํธ์ถํ ์ง๋ง ๋ฃ์ด์ค๋ค.
2> JSON.stringify ๋ฉ์๋๋ก ์ผ์ผ์ด ์ฒ๋ฆฌ ํด์ค์ผํ๋๋ฐ ๋ฒ๊ฑฐ๋ก์ด ๊ณผ์ ์ ์ํด์ค๋ ๋๋ค.
Express
๊ฐ JSON์ผ๋ก ์๋์ผ๋ก ๋ณํ์ ํด์ค ํธ๋ค๋ฌ ํจ์์ ๋ํด response ๊ฐ์ฒด์ json() ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ์ ๋ฌํด์ฃผ๋ฉด ๋๋ค.
<script> const http = require("http"); const express = require("express"); const { sendNode } = require("./sendNode"); const { sendExpress } = require("./sendExpress"); const { sendDB } = require("./sendDB"); const app = express(); app.get("/", (request, response) => { response.json({ message: `end point` }); }); app.get("/node", sendNode); app.get("/node/express", (req, res) => { sendExpress(req, res); }); app.get("/database", sendDB); app.post((request, response) => { response.json({ message: `this is minjae's first server`, }); }); const server = http.createServer(app); server.listen(8000, () => { console.log("server is listening on PORT 8000"); }); </script>
- Express ๋ชจ๋์ require๋ก ๋ถ๋ฌ์จ ํ ํจ์๋ฅผ ์คํํด์ app ๋ณ์์ ๋ด์์ฃผ๋ ๊ฒ์ด ์ปจ๋ฒค์ ์ด๋ค.
- ์ด๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ http server application์ ์๋ฏธํ๋ค.
- ์์ฒญ์ ๋ฐ์ http method ํจ์๋ฅผ app์ผ๋ก ๋ถ๋ฅธ
- ์์ฒญ์ ๋ฐ์ endpoint url์ string์ผ๋ก ์ฒซ๋ฒ์งธ ์ธ์์
- ์์ฒญ๊ณผ ์๋ต์ ์ธ์๋ก ๋ฐ๋ ์ฝ๋ฐฑํจ์๋ฅผ ๋๋ฒ ์งธ ์ธ ์๋ก ๋ฃ๋๋ค.
=> ์ด๋ ๊ฐ๊ฐ์ ๋ฉ์๋์ ์๋ํฌ์ธํธ์ ๋ํด ์ฒ๋ฆฌํ๋(ํธ๋ค๋ง) ํจ์์ด๋ค.**<script> // - sendNode.js const sendNode = (req, res) => { res.json({ message: "node is great", }); }; module.exports = { sendNode }; // - sendExpress.js const sendExpress = (req, res) => { res.json({ message: "Express is more great", }); }; module.exports = { sendExpress }; // - databale.js const sendDB = (req, res) => { res.json({ data: [ { id: 1, name: "Mysql" }, { id: 2, name: "Oracle DB" }, { id: 3, name: "Mongo DB" }, ], }); }; module.exports = { sendDB }; </script>
- http.createServer์ ์ ๋ฌ๋ ์๋ต์ ์ฝ๋ฐฑํจ์๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ(= API์ ์ ์ํด์ผ)์ด ๋ค์ด์์ผ ํธ์ถ๋๋ค.
- ์ฆ, ์์ฒญ์ด ๋ค์ด์์ผ ํจ์๊ฐ ํธ์ถ๋๊ณ ์ด๋ ์๋ฒ์ ์์ดํผ ์ฃผ์๋ก ํด๋ผ์ด์ธํธ๊ฐ ์ ์ ํ์์ ์๋ฏธํ๋ค.
- ํจ์๋ฅผ ๋ง๋ค ๋ ์ธ์๋ก res๋ฅผ ๋๊ฒจ์ค์ผํ๋ ์ด์ ๋ res์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ด์์ ๋ณด๋ด์ฃผ๊ธฐ ์ํด res ๊ฐ์ฒด์ ์๋ end ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์ฒญ์ ๋ํด์ ์ธ์๋ก ์ด๋ค ๊ฒ์ ๋ณด๋ด์ค ์ง ๋ฃ์ด์ค์ผํ๊ธฐ ๋๋ฌธ์ res๋ฅผ ์ฝ๋ฐฑํจ์๋ก ๋ฐ์์ผํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ก์ปฌํธ์คํธ 8000 ,8080๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ ์ฃผ์๋ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ํต์ ํ ๋ ์ฐ์ด๋ url ์ด๊ณ ์ค๋ณต๋์ ์ฌ์ฉํ๋ฉด ์๋๋ค.
- ์์ฑํ ์๋ฒ์ ์ฝ๋๋ฅผ ์์ ํ๋ค๋ฉด ์๋ฒ์์ ๋๊ฐ๋ค๊ฐ (์ปจํธ๋กค c) ๋ค์ ์ ์์ํด์ผ ์์ ์ด ์ ์ฉ๋๋ค.
- ๊ทธ๋ฌ๋ nodemon์ด๋ผ๋ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด ์ฆ์ ์์ ํ์ฌ ๋ฐ์๋์ด, ์๋ฒ๋ฅผ ๊ป๋ค ํฌ ํ์๊ฐ ์์ด ํธ๋ฆฌํ๋ค.
- Express๊ณผ http ๋ด์ฅ ๋ชจ๋๋ก ์๋ฒ๋ฅผ ์์ฑํ ๋ ๋ฌด์์ด ๋ค๋ฅด๋ฉฐ ์ด๋ค ์ฅ์ ์ ๊ฐ์ง๋ ์ง ์ ์์๋์ข
- ์์ฝ๋ ๋ฒก์๋ ์ํ๋์ ๋๋ฒ ์งธ ์ด๋ค ์น์ ๊ฐ์ ์ค