Section2 Unit10 [Web Server] ๊ธฐ์ด - Refactor Express
๐ Chapter2. Refactor Express
โญ๏ธ ๊ณผ์ . Mini-Node Server๋ฅผ Express๋ก ๋ฆฌํฉํ ๋ง
๊ตฌํ๊ณผ์
๐ก TIP. ํฌ์คํธ๋งจ์ ํ์ฉํด์ ๊ฐํธํ๊ฒ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ํ์ธํ ์ ์๋ค.
1. express ๋ชจ๋ ํ์ต
์ด์ node.js ๋ง ์ข ๋ณด๊ณ , ํ๋ฃจ๋ง์ express๋ก ๋์ด์๋ค… ์ฌ์ ํ ๋ชจ๋ฅด๋๊ฑฐ ํฌ์ฑ์ด์ ๊ฐ๋ ์์กํ์ express๋ node.js ์ฐ๋จนํ ๊ฒ์ฒ๋ผ ๊ฐ๋จํ ๊ตฌํ๋ง ๋จผ์ ํด๋ณด๊ธฐ๋ก ํ๋ค.
express๋ฅผ ๊ณต๋ถํ๋ค ๋ณด๋ node.js๋ก ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ด๋ ค์ ๋ ๋ถ๋ถ๋ค์ด ํจ์ฌ ํธํ๊ฒ ํด๊ฒฐ๋๋ ๊ฒ๋ค์ด ๋ณด์๋ค. express๊ฐ ํธํ๋ค๋๋, ์ ๊ทธ๋ฐ์ง ์ ๊ฒ ๊ฐ์ ๋๋์ ๊ธฐ๋ถ์ด ์ฝ๊ฐ ์ข์์ง๊ธฐ๋ ํ์๋ค ๐
๊ทธ๋๋ ์ฌ์ ํ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ๋ค์ด๋, ์ดํด๊ฐ ์ ๋์ง ์์๋ ๋ถ๋ถ๋ค์ ์ด๋ฒ์๋ ํ์ด ํ๋์ ํ๋ฉฐ ๋์์ ๋ง์ด ๋ฐ์์๋ค. ์ด์ ๋ ๋ด๊ฐ ๋ฏธ๋ฆฌ ๊ณผ์ ๋ฅผ ํด์ ๋ค๋น๊ฒ์ดํฐ ์ญํ ์ ํ์๋๋ฐ, ์ค๋์ ํ์ด๋ถ์ด ๋จผ์ ๊ณผ์ ๋ฅผ ํ์ ์ ๋ค์ด๊ฒ์ดํฐ ์ญํ ์ ์์ฐ์ค๋ฝ๊ฒ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ํ๊ฒ ๋์๋ค.
๐ฉ๐ป๐ป express ๋ชจ๋๋ก ์๋ฒ ๋ง๋ค๊ธฐ
// express ๋ชจ๋ ์ฌ์ฉ
const express = require('express');
const app = express();
const port = 3000;
/*
body-parser: ์์ฒญ์ ๋ณธ๋ฌธ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ํด์ํด์ req.body ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ฃผ๋ ๋ฏธ๋ค์จ์ด
๋ชจ๋ ์์ฒญ์ ๋ํ ์ฝ๋๋ง๋ค json parser๊ฐ ์คํ๋๋ค.
strict: false primitive data type๋ parsing ํ๋๋ก ์ค์
*/
app.use(express.json({ strict: false }));
// ๋ชจ๋ ์์ฒญ์์ ๋ฏธ๋ค์จ์ด ์คํ
app.use((req, res, next) => {
console.log("-------------------------------------------");
console.log(`HTTP METHOD: ${req.method}, URL: ${req.url}`);
console.log("-------------------------------------------");
next(); // next: ๋ค์ ๋ฏธ๋ค์จ์ด๋ก ๋์ด๊ฐ๋ ํจ์๋ก next๋ฅผ ์คํํ์ง ์์ผ๋ฉด ๋ค์ ๋ฏธ๋ค์จ์ด๊ฐ ์คํ๋์ง ์๋๋ค.
})
// GET '/' ์์ฒญ์ 'Hello World'๋ก ์๋ต
// (๋ค๋ฅธ ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด์๋ 404 Not Found๋ก ์๋ต)
app.get('/', (req, res) => {
res.send('Hello World');
});
// users๋ก POST ์์ฒญ์ด ์ค๋ฉด jsonParser๋ฅผ ํ๊ณ , ๋ด์ฉ์ ์คํํ๋ผ.
app.post('/users', (req, res) => {
console.log(req.body)
res.send(req.body)
})
// ์๋ฒ ์ฐ๊ฒฐ
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
2. express-server๋ก ๋ฆฌํฉํ ๋ง
const express = require('express');
const app = express();
const port = 4999;
const cors = require('cors');
app.use(cors()); // ๋ชจ๋ ์์ฒญ์ ๋ํด CORS ํ์ฉ
app.use(express.json({ strict: false }));
// GET
app.get('/', (req, res) => {
console.log("GET");
res.send("GET ์์ฒญ์ ๋ณด๋์ต๋๋ค.");
})
// POST
app.post('/upper', (req, res) => {
console.log("REQUEST", req )
res.status(201).json(req.body.toUpperCase()); // res.json : sendํ ๋ jsonํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค.
console.log("UPPER REQUEST BODY: ", req.body)
})
app.post('/lower', (req, res) => {
res.status(201).json(req.body.toLowerCase());
console.log("LOWER REQUEST BODY: ", req.body)
})
// ERROR
app.use((err, req, res, next) => {
console.error(err)
res.status(400).send(err.message);
})
app.listen(port, () => {
console.log(`PORT ${port}`)
})
3. Postman ํ์ฉํด์ GET, POST ๋ฉ์๋ ํ์ธ
โจ ๋ชจ๋ ์์ฒญ์์ ๋ฏธ๋ค์จ์ด ์คํ ์์ & Error ์ถ๋ ฅ
→ express์ ๋ฏธ๋ค์จ์ด ํ์ต : ๋ชจ๋ ์์ฒญ์์ ๋ฏธ๋ค์จ์ด๋ฅผ ์คํํ๋ ์์ ๋ฅผ ๊ตฌํํ๋ค.
๋ฏธ๋ค์จ์ด๋ app.use์ ํจ๊ป ์ฌ์ฉ๋๊ณ , ์ฃผ์๋ฅผ ์ฒซ๋ฒ์งธ ์ธ์๋ก ๋ฃ์ง ์๋๋ค๋ฉด ๋ชจ๋ ์์ฒญ์์ ํ์ฉ๋๋ค.
→ GET ์์ฒญ์ด ์๋ ๋ค๋ฅธ ๊ฒฝ๋ก์ ๋ํด์๋ 404 Error๊ฐ ์ถ๋ ฅ๋๋๋ก ๊ตฌํํ๋ค. ์๋ฌ๋ฅผ ํ์ํ๋ ๊ฑธ ๋ณด๊ณ ์ถ์ด์ ๊ทธ ์์๋ ์คํ์์ผ ๋ณด์๋ค.
โจ postman์ผ๋ก POST
→ postman์ผ๋ก POST์์ฒญ์ ๋ณด๋ด๋ณด๊ณ ์ถ์๋ค. JSON ํํ๋ก ๋ฃ๋ ๊ฑด์ค ์์๋๋ฐ, ์๋์ด ๋์ง ์์์ ์ค์ ๋์ํ๋ ์์ฒญ์ request๋ฅผ ๋ฐ์๋ณด๋ body๊ฐ “text”ํํ๋ก ์ถ๋ ฅ์ด ๋์ด ์์๋ค.
→ ๊ฒฐ๋ก ์ postman์ผ๋ก POST ์์ฒญ์ body์ JSON ํํ๋ก ๋ฃ๋ ๊ฒ์ด ์๋๋ผ, text๋ก ๋ฃ์ด์ค์ผ POST๊ฐ ๊ฐ๋ฅํ๋ค. ๋ด๋ถ ๋ก์ง์์ ๊ทธ๋ ๊ฒ ์ฒ๋ฆฌํ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ฐ, ์์ง ์ ํํ ์ด์ ๋ ์ ๋ชจ๋ฅด๊ฒ ๊ณ ์ถ์ธกํ ๋ฟ…
๐ ์ค๋์ ํ๊ณ
์ด์ node.js๋ก ๋ง๋ค์๋ ์น์๋ฒ๋ฅผ express๋ก ๋ฐ๊พธ๋ ์ค์ต์ ํ๋ค. express๊ฐ ์ฌ์ฉํ๊ธฐ ํจ์ฌ ํธ๋ฆฌํด์ node๋ก ๊ฐ๋ฐํ๋ ๊ฒ๋ณด๋ค express๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ์์ฃผ ์ผ๋ถ๋ถ์ด์์ง๋ง, ์ค์ ๋ก ๊ฒฝํ์ ํด๋ณด๋ express์ ์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์๊ฒ์ด ๋ณด์ฌ์ ์ ๊ธฐํ๋ค.
์์์ ์ธ๊ธํ๋ ๊ฒ์ฒ๋ผ ์ค๋ ํ์ด์๊ฐ์ ํ์ด๋ถ๊ณผ ๊ฐ์ด ๊ณผ์ ๋ฅผ ์งํํ๊ณ , ๊ณผ์ ๋ด App.js ํ์ผ์ ๋ก์ง๋ ์ดํด๋ณด์๋ค. ํจ๊ป ํ ๋ก (?)์ ํ๊ณ , ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ๋ด๊ฐ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ๋ค์ด ๋ฌด์์ธ์ง ์ ์๊ฒ ๋์๊ณ , ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ๊ฐ์ด ์ฐพ์๋ณด๊ณ , ์๋ ค์ฃผ๋ ์ค๋ช ์ ๋ฃ๋ค๋ณด๋ ํ์คํ ๊ธฐ์ต์ ์ค๋ ๋จ๊ณ ์ดํด๋ ์ ๋๋ ๊ฒ ๊ฐ์๋ค. ์ด๋ฒ ํ์ด ํ๋์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ง์ด ๋ฐ์ ๊ฒ ๊ฐ์ ์๋ฏธ์๋ ์๊ฐ์ด์๋ค.
๊ทธ๋๋ ์ฌ์ ํ ์ด๋ ต๊ณ , ํท๊ฐ๋ ค์ ๊ณ ๋ฏผ์ ํ๋ค๊ฐ node.js + express ๋ฅผ ํ์ด๋ณด๋ ๊ฐ์๋ฅผ ๋ณด๊ธฐ๋ก ํ๋ค. ํ๋ก ํธ๋ฅผ ํด๋ ๊ฐ๋จํ ์น์๋ฒ ๊ตฌํ์ ๋๋ ํ ์ค ์์์ผ ํ๋ค๊ณ ํ๋ ์ด ๊ธฐํ์ ๋ฐฐ์๋๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์๊ฐ์ด ์์ผ๋ ์ ์ฒด์ ์ธ ํ๊ณผ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ณด๋ ๊ฒ ์์ฃผ๋ก ํ์ตํ๊ธฐ๋ก ํ๋ค.
์ด๋ฒ ์ฃผ๋ง๋ ๊ณต๋ถ๋ก ๋ฐ์๊ฒ ๋ค… ๐ซ