Node-js-1

Node-js - Log in ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ


Express()
Routes, MVC์„ค๊ณ„ ๋ชจ๋ธ : M(Module)V(Views)C(Controller)
app.set(โ€˜view engineโ€™, ejs)


Express๋กœ ์„œ๋ฒ„ ๋„์šฐ๊ธฐ (nodejs ์„ค์น˜ ํ›„, ์„œ๋ฒ„ ์ƒ์„ฑ)

ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์–ด
npm install express โ€“save express module ์„ค์น˜
node modul๋‚ด์— express module ์ƒ์„ฑ, package.json ์—์„œ ์„ค์ • ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.

const express = require("express");
const app = express();

app.listen(3000, function () {
  console.log("์„œ๋ฒ„๊ฐ€๋™");
});

๋กœ์ปฌ ํ˜ธ์ŠคํŠธ : 3000 ์ ‘์†์‹œ console์— ์„œ๋ฒ„๊ฐ€๋™ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ, ํ™ˆํŽ˜์ด์ง€ ์‹คํ–‰ ๊ฐ€๋Šฅ

๋ฃจํŠธ์—์„œ ์ถœ๋ ฅํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ?

const express = require("express");
const app = express();

app.get("/", (req, res) => {
  res.send("์—ฌ๊ธฐ๋Š” ๋ฃจํŠธ์ž…๋‹ˆ๋‹ค. ");
});
app.listen(3000, function () {
  console.log("์„œ๋ฒ„๊ฐ€๋™");
});

login ๊ฒฝ๋กœ์—์„œ ์ถœ๋ ฅ์‹œ?

const express = require("express");
const app = express();

app.get("/", (req, res) => {
  res.send("์—ฌ๊ธฐ๋Š” ๋ฃจํŠธ์ž…๋‹ˆ๋‹ค. ");
});

app.get("/login", (req, res) => {
  res.send("์—ฌ๊ธฐ๋Š” ๋กœ๊ทธ์ธ ํ™”๋ฉด ์ž…๋‹ˆ๋‹ค.");
});
app.listen(3000, function () {
  console.log("์„œ๋ฒ„๊ฐ€๋™");
});

http๋กœ ์„œ๋ฒ„ ๋„์šฐ๊ธฐ.

const http = require("http");
const app = http.createServer();

app.listen(3001, () => {
  console.log("http๋กœ ๊ฐ€๋™๋œ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.");
});

์ด ์ƒํƒœ์—์„  ์„œ๋ฒ„๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.. ํ•˜์ง€๋งŒ โ€œ/โ€ (๋ฃจํŠธ) ๊ฐ€ ์—†์–ด์„œ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

const http = require("http");
const app = http.createServer((req, res) => {
  if (req.url === "/") {
    res.end("์—ฌ๊ธฐ๋Š” ๋ฃจํŠธ ์ž…๋‹ˆ๋‹ค.");
  } else if (req.url === "/login") {
    res.end("์—ฌ๊ธฐ๋Š” ๋กœ๊ทธ์ธ ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.");
  }
});

app.listen(3001, () => {
  console.log("http๋กœ ๊ฐ€๋™๋œ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.");
});

์ด๋ ‡๊ฒŒ require ํ–ˆ์„ ๋•Œ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ˜„์žฌ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์„ respondํ•ด์ค€๋‹ค.
โ€“> ํ•˜์ง€๋งŒ ํ•œ๊ธ€์ด ์•ˆ๋œฌ๋‹ค !

const http = require("http");
const app = http.createServer((req, res) => {
  res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
  if (req.url === "/") {
    res.end("์—ฌ๊ธฐ๋Š” ๋ฃจํŠธ ์ž…๋‹ˆ๋‹ค.");
  } else if (req.url === "/login") {
    res.end("์—ฌ๊ธฐ๋Š” ๋กœ๊ทธ์ธ ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.");
  }
});

app.listen(3001, () => {
  console.log("http๋กœ ๊ฐ€๋™๋œ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.");
});

๊ทธ๋ž˜์„œ ์œ„์™€ ๊ฐ™์ด if ๋ฌธ ์ „์— ๋‹ค์Œ ๋ฌธ์žฅ์„ ์จ์„œ ํ•œ๊ธ€๋กœ ๋ณ€๊ฒฝ ์‹œ์ผœ์ค€๋‹ค.
**http๋Š” ํ•œ๊ธ€ ๋ณ€๊ฒฝ์˜ ์–ด๋ ค์›€๊ณผ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ ๋•Œ๋ฌธ์— express ๋ฅผ ์ด์šฉํ•ด์ค€๋‹ค.

๋กœ๊ทธ์ธ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ. ( ํ•˜๋“œ ์ฝ”๋”ฉ )

express๋ฅผ ์ด์šฉํ•  ๋•Œ, ๋กœ๊ทธ์ธ ํ™”๋ฉด์— html์„ ๋ณด์—ฌ์ค„ ๋•Œ๋Š” respond์— ๋ณด๋‚ด์ค€๋‹ค.

app.get("/login", (req, res) => {
  <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <input type="text" placeholder="์•„์ด๋””" /><br />
    <input type="text" placeholder="๋น„๋ฐ€๋ฒˆํ˜ธ" /><br />
    <button>๋กœ๊ทธ์ธ</button>
  </body>
</html>
});

์ด์ฒ˜๋Ÿผ respond ํ•ด์ค„ ๋•Œ html ํŒŒ์ผ์„ ๋ณด๋‚ด์ฃผ๋ฉด ํ™ˆํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์€ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•˜๋‹ค. -> ๋ชจ๋“ˆํ™” ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

๋กœ๊ทธ์ธ ๋ทฐ ์ตœ์ ํ™” / MVC์˜ V (Views) ๋ถ„๋ฆฌ

app.js์˜ ๋ชจ๋“ˆํ™”๋ฅผ ์œ„ํ•ด ์„ธํŒ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
ejs ์—”์ง„์„ ์ด์šฉํ•ด์„œ html ํŒŒ์ผ์ด ์•„๋‹Œ ejs ํŒŒ์ผ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ์„ธํŒ…ํ•ด์ค€๋‹ค.
๋ณด๋‚ด์ค„ respond๋Š” renderํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํด๋”์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.

const express = require("express");
const app = express();

app.set("views", "./views");
app.set("view engine", "ejs");

app.get("/", (req, res) => {
  res.render("home/index");
});

app.get("/login", (req, res) => {
  res.render("home/login");
});

app.listen(3000, function () {
  console.log("์„œ๋ฒ„๊ฐ€๋™");
});

์ด ๋•Œ, ํด๋”๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•ด์ค€๋‹ค.

s1

index์™€ login์—์„œ๋Š” ๊ฐ ์ฃผ์†Œ์— ๋“ค์–ด๊ฐ”์„ ๋•Œ, html์„ ๋ณด์—ฌ์ค€๋‹ค.
์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋งˆ ์•ˆ๋  ๊ฒƒ์ด๋‹ค. ejs์—”์ง„์„ ์„ค์น˜ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
npm install ejs -s (terminal) ๋ฅผ ์ด์šฉํ•ด์„œ ์„ค์น˜๋ฅผ ํ•ด์ฃผ์ž.

์ด ์ƒํƒœ์—์„œ app.js๋ฅผ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ ๋‹ค.

๋ผ์šฐํŒ… ๋ถ„๋ฆฌ

์ด์ œ ๋กœ๊ทธ์ธ, home์„ ์ด์šฉํ•˜๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ๋งŒ๋“ ๋‹ค.
routes ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์„œ index.js๋ฅผ ๋งŒ๋“ ๋‹ค.

s2

์ด ์•ˆ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์งœ์ฃผ๊ณ , module์„ ๋ฐ–์—์„œ ์“ธ ์ˆ˜ ์žˆ๋„๋ก module.exports = router์„ ํ•ด์ค€๋‹ค.

//index.js 
"use strict";

const express = require("express");
const router = express.Router();
app.get("/", (req, res) => {
  res.render("home/index");
});

app.get("/login", (req, res) => {
  res.render("home/login");
});

module.exports = router;

routes์— ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋„๋ก requireํ•ด์ฃผ๊ณ , app์—์„œ useํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

//app.js
"use strict";

// ๋ชจ๋“ˆ
const express = require("express");
const app = express();

const PORT = 3000;
// routing
const home = require("./routes/home"); // ํ™ˆ / routes / home / index ํŒŒ์ผ ์š”์ฒญ

// ์•ฑ์„ธํŒ…
app.set("views", "./views");
app.set("view engine", "ejs");

app.use("/", home); // ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ.

app.listen(PORT, function () {
  console.log("์„œ๋ฒ„๊ฐ€๋™");
});

** port๋Š” ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•ด์„œ ์“ด๋‹ค. ๊ฐ ์ข…๋ฅ˜๋ผ๋ฆฌ ๋ฌถ์–ด์„œ ๋ณ€์ˆ˜๋ฅผ ๋†“๋Š”๋‹ค.

MVC ์ค‘ C (Controller) ๋ถ„๋ฆฌํ•˜๊ธฐ

index.js์—์„œ controll ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์€ require, respond ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

(req, res) => {
  res.render("home/index"); }

์ด ๋ถ€๋ถ„์„ home.ctrl ํด๋”์— ๋„ฃ์–ด ์ปจํŠธ๋กค์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

s3

//home.ctrl.js
"use strict";

const home = (req, res) => {
  res.render("home/index");
};

const login = (req, res) => {
  res.render("home/login");
};

module.exports = {
  home,
  login,
};

๋ชจ๋“ˆ์„ ๋‹ค์‹œ ๋บด์คฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ–์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก module.exports๋ฅผ ํ•ด์ค€๋‹ค.
** ๊ฐ์ฒด๋กœ ๋ณด๋‚ผ ๋•Œ, key : value ํ˜•ํƒœ์ธ๋ฐ key๋งŒ ์“ด๋‹ค๋ฉด, key : key ๊ฐ’์œผ๋กœ ๋ฐ›๋Š”๋‹ค. (ES6 ์ถ”๊ฐ€ ๊ธฐ๋Šฅ)

๋ชจ๋“ˆ์„ ๋ณด๋ƒˆ๊ธฐ์— index์—์„œ ์ปจํŠธ๋กค์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

//index.js
"use strict";

const express = require("express");
const router = express.Router();

const ctrl = require("./home.ctrl");

router.get("/", ctrl.home);

router.get("/login", ctrl.login);

module.exports = router;

app.listen ๋ชจ๋“ˆํ™”

์ด์ „์— ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ listen๋ถ€๋ถ„๋„ ๋ชจ๋“ˆํ™”๋ฅผ ํ•ด์ค€๋‹ค.
์ด์ œ ์‹คํ–‰์€ app.js ๊ฐ€ ์•„๋‹Œ ./bin/www.js ์—์„œ ์‹คํ–‰ํ•œ๋‹ค.

s4

//www.js
"use strict";

const app = require("../app");
const PORT = 3000;

app.listen(PORT, () => {
  console.log("์„œ๋ฒ„๊ฐ€๋™");
});
"use strict";

// ๋ชจ๋“ˆ
//app.js
const express = require("express");
const app = express();

// routing
const home = require("./routes/home"); // ํ™ˆ / routes / home / index ํŒŒ์ผ ์š”์ฒญ

// ์•ฑ์„ธํŒ…
app.set("views", "./views");
app.set("view engine", "ejs");

app.use("/", home); // ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ.

module.exports = app;

์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” ๋‚ด๋ณด๋‚ด๋Š” ๊ณณ๊ณผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณณ ๋‘˜๋‹ค ์‹ ๊ฒฝ์จ์•ผํ•œ๋‹ค.

<์ •๋ฆฌ>

app.js์—์„œ ์„œ๋ฒ„ ๊ฐ€๋™ ์‹คํ–‰.

const express = require("express");
const app = express();
  • app์€ โ€˜expressโ€™ framework๋ฅผ ์ด์šฉ
const home = require("./routes/home");
  • home์€ ./routes/home ( ํ™ˆ -> routes -> home ) ๊ณผ ๊ฐ™์ด ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง„๋‹ค.
app.set("views", "./views");
app.set("view engine", "ejs");
  • app.set ์€ views -> ./views ๋กœ ๊ฒฝ๋กœ ์„ค์ • & view engine -> ejs ๋กœ ์—”์ง„ ์„ค์ •
app.use("/", home);
  • app.use(โ€œ/โ€, home) ์˜ ์˜๋ฏธ๋Š” ์„œ๋ฒ„๊ฐ€ ๋ฃจํŠธ์— ์žˆ์„ ๋•Œ home์„ ์‹คํ–‰ํ•˜๋ผ๋Š” ์˜๋ฏธ.

home ( /routes/home ) ์‹คํ–‰ ์‹œ index.js ์‹คํ–‰

const express = require("express");
const router = express.Router();

router์—ฐ๊ฒฐ

const ctrl = require("./home.ctrl");

ctrl ์‹คํ–‰ ์‹œ ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ require

router.get("/", ctrl.home);
router.get("/login", ctrl.login);

router์— ๋ฃจํŠธ ๊ฒฝ๋กœ๊ฐ€ ์™”์„ ๋•Œ, login ๊ฒฝ๋กœ๊ฐ€ ์™”์„ ๋•Œ, ctrl๋‚ด์˜ ๊ฐ์ฒด ๊ฐ’์œผ๋กœ ๋ณด๋‚ด์ค€๋‹ค.

module.exports = router;

router๊ฐ€ ๋ฐ–์—์„œ ์›ํ•˜๋Š” ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

Router๋ถ„๋ฆฌ app.use์—์„œ home ์‹คํ–‰ ์‹œ express๋‚ด์—์„œ ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ require ์š”์ฒญํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. router๋Š” ๊ทธ ์š”์ฒญ์ด ์™”์„ ๋•Œ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•(?) ๊ฐ™๋‹ค.

ctrl๋กœ ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ home.ctrl์—์„œ์˜ ๋ช…๋ น

const home = (req, res) => {
  res.render("home/index");
};

req๊ฐ€ ์™”์„ ๋–„ respond๋Š” app.set์—์„œ ํ•ด์ค€ view๊ฐ’์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด render์„ ํ•ด์ค€๋‹ค.
./views/home/index -> ejsํด๋”๋กœ ๋„˜์–ด๊ฐ€๋„๋กํ•œ๋‹ค. // login๋„ ๋งˆ์ฐฌ๊ฐ€์ง€
โ€“> render() ์ด๋ผ๋Š” function ์ž์ฒด์—์„œ views ๋‚ด์— ejs ํด๋”๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
Render link

module.exports = {
  home,
  login,
};

๊ฐ์ฒดํ™” ์‹œ์ผœ์„œ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: