[Node.js] express-generator๋กœ Express ๊ตฌ์กฐ ํ•ด๋ถ€ํ•ด๋ณด๊ธฐ

 

๐Ÿค” express-generator๊ฐ€ ๋ญ์ง€?

npx express-generator

๐Ÿ‘‰ Express ์„œ๋ฒ„์˜ ์ •์„ ํด๋” ๊ตฌ์กฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋„๊ตฌ

 

// ํŒจํ‚ค์ง€ ์„ค์น˜
npm install

// ํ”„๋กœ์ ํŠธ ๊ตฌ๋™
npm start

npm install๋Š” package.json์˜ dependencies์—์žˆ๋Š” ๋ชจ๋“ˆ๋“ค์„ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ํ•ด  node_module ํด๋”์— ๋„ฃ์–ด์ค€๋‹ค. 

๊ทธ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ์ง€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™๋  ๊ฒƒ์ด๋‹ค. 

 

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/bin/www ํŒŒ์ผ์„ ํ™•์ธํ•˜๋ฉด, ํฌํŠธ ๋„˜๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ˜น์‹œ ์ถฉ๋Œ์ด ์ด๋Ÿฌ๋‚˜๋ฉด ์ด๊ณณ์˜ ํฌํŠธ๋„˜๋ฒ„๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ localhost:3000์œผ๋กœ ํ™•์ธ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.


์ƒ์„ฑํ•˜๋ฉด ๋‚˜์˜ค๋Š” ๊ธฐ๋ณธ ๊ตฌ์กฐ

express-generator๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํด๋”๋“ค์ด๋‹ค. ์ด๊ฒƒ๋“ค์ด ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

myapp/
โ”œโ”€ bin/
โ”‚  โ””โ”€ www
โ”œโ”€ public/
โ”‚  โ”œโ”€ images/
โ”‚  โ”œโ”€ javascripts/
โ”‚  โ””โ”€ stylesheets/
โ”‚     โ””โ”€ style.css
โ”œโ”€ routes/
โ”‚  โ”œโ”€ index.js
โ”‚  โ””โ”€ users.js
โ”œโ”€ views/
โ”‚  โ”œโ”€ error.pug
โ”‚  โ”œโ”€ index.pug
โ”‚  โ””โ”€ layout.pug
โ”œโ”€ app.js
โ””โ”€ package.json

1๏ธโƒฃ [bin/www] — ์„œ๋ฒ„ ์‹คํ–‰

#!/usr/bin/env node

var app = require('../app');
var http = require('http');

var server = http.createServer(app);
server.listen(3000);
  • ํฌํŠธ ์—ด๊ธฐ
  • ์‹ค์ œ ์„œ๋ฒ„ ์‹คํ–‰
  • ์—๋Ÿฌ ํ•ธ๋“ค๋ง

2๏ธโƒฃ [app.js] — ์š”์ฒญ ์ฒ˜๋ฆฌ, ์„œ๋ฒ„ ์„ค์ •

var express = require('express');
var app = express();

โ‘  ๋ฏธ๋“ค์›จ์–ด ๋“ฑ๋ก

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

โ‘ก ์ •์  ํŒŒ์ผ

app.use(express.static(path.join(__dirname, 'public')));

โ‘ข ๋ผ์šฐํ„ฐ ์—ฐ๊ฒฐ

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

app.use('/', indexRouter);
app.use('/users', usersRouter);

3๏ธโƒฃ [routes/] — URL ๋‹ด๋‹น 

routes/
โ”œโ”€ index.js
โ””โ”€ users.js

 

[routes/index.js]

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
  res.render('index');
});

module.exports = router;

์—ฌ๊ธฐ์„œ router๋Š” ์ž‘์€ app ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ.

  • /users → users.js
  • / → index.js
  • ์ด๋ ‡๊ฒŒ URL๋ณ„๋กœ ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•ด์„œ ํŒŒ์ผ ํ•˜๋‚˜์— URL ์ˆ˜๋ฐฑ ๊ฐœ ์Œ“์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€!

4๏ธโƒฃ [views/] — ํ™”๋ฉด ๋‹ด๋‹น (MVC์˜ V)

views/
โ”œโ”€ layout.pug
โ”œโ”€ index.pug
โ””โ”€ error.pug
res.render('index', { title: 'Express' });

์„œ๋ฒ„๊ฐ€ HTML ๋งŒ๋“ค์–ด์„œ ๋ณด๋‚ด๋Š” ๊ตฌ์กฐ


5๏ธโƒฃ [public/] — ์ •์  ํŒŒ์ผ

public/
โ”œโ”€ stylesheets/
โ”œโ”€ javascripts/
โ””โ”€ images/
  • CSS
  • JS
  • ์ด๋ฏธ์ง€
app.use(express.static('public'))

์š”์ฒญ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ œ๊ณต


 

app.js : ์„ค์ •,
routes : URL,
bin/www : ์‹คํ–‰,
public : ์ •์ ,
views : ํ™”๋ฉด

์š”์ฒญ →
bin/www →
app.js →
middleware →
routes/* →
response

 


์ด์ฒ˜๋Ÿผ Express๋Š” ๊ฐ ์—ญํ• ์„ ๋งก์€ ํŒŒ์ผ๋“ค์ด ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

express-generator ์—†์ด Express๋ฅผ ๊ณต๋ถ€ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด,
๋น„์Šทํ•œ ์„ค์ • ์ฝ”๋“œ๋“ค์ด ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๋ฐ˜๋ณตํ•ด์„œ ๋“ฑ์žฅํ–ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ express-generator๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฐ ๋ฐ˜๋ณต์„ ์ค„์ด๊ณ , ์—ญํ• ์ด ๋ถ„๋ฆฌ๋œ ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠนํžˆ ํ˜‘์—… ํ™˜๊ฒฝ์—์„œ๋Š”  ํŒŒ์ผ ๊ตฌ์กฐ๋‚˜ ์„ค์ • ๋“ฑ์„ ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,
์‚ฌ์‹ค์ƒ ์„ ํƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ์— ๊ฐ€๊นŒ์šด ๋„๊ตฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.