๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Dev/Back-End

express ๊ธฐ์ดˆ(3): express ๊ตฌ์กฐ

yesolz 2024. 9. 4. 18:08
728x90

 

npx express-generator ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
์ฐธ๊ณ ๋กœ, Express๋Š” Node.js๋ฅผ ์œ„ํ•œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค!

express-generator๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋งŒ ์ƒ์„ฑํ•˜๊ณ , dependencies(์˜์กด์„ฑ)๋Š” ์ž๋™์œผ๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋“ค์„ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

npm install   # ์˜์กด์„ฑ ์„ค์น˜
npm start     # ์„œ๋ฒ„ ์‹คํ–‰

 

์ƒ์„ฑ๋œ Express ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

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

์ด 7๊ฐœ์˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ 9๊ฐœ์˜ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

์ฃผ์š” ํŒŒ์ผ ์„ค๋ช…

app.js

Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์ (์—”ํŠธ๋ฆฌ ํŒŒ์ผ)์ด๋‹ค. ์„œ๋ฒ„์˜ ์ฃผ์š” ์„ค์ •์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

์—ฌ๊ธฐ์—์„œ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์™€ ์„ธํŒ…ํ•œ๋‹ค.

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

๋ผ์šฐํ„ฐ๋ฅผ ์ •์˜ํ•œ๋‹ค.

var app = express();

Express ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

๋ทฐ ์—”์ง„ ์„ค์ •: Express Generator๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Pug(Jade) ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•œ๋‹ค.

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

๋ฏธ๋“ค์›จ์–ด ์„ค์ •: ๋ฏธ๋“ค์›จ์–ด๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต ์‚ฌ์ด์—์„œ ๋กœ๊น…, ํŒŒ์‹ฑ, ์ •์  ํŒŒ์ผ ์„œ๋น™ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

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

๋ผ์šฐํŒ… ์„ค์ •์ด๋‹ค. / ๊ฒฝ๋กœ์™€ /users ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๊ฐ๊ฐ indexRouter์™€ usersRouter๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

module.exports = app;

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋“ˆํ™”ํ•œ๋‹ค. bin/www ํŒŒ์ผ์—์„œ ์ด ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

bin/www

Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ค์ œ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค. ์ฃผ๋กœ npm start ๋ช…๋ น์–ด ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

  1. ํฌํŠธ ์„ค์ •: normalizePort๋ฅผ ํ†ตํ•ด ์œ ํšจํ•œ ํฌํŠธ๋ฅผ ๊ฒฐ์ •ํ•œ ํ›„, Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์„ค์ •ํ•œ๋‹ค.
  2. HTTP ์„œ๋ฒ„ ์ƒ์„ฑ: http.createServer(app)์œผ๋กœ Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ HTTP ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  3. ์„œ๋ฒ„ ๋ฆฌ์Šค๋‹ ๋ฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์—ฐ๊ฒฐ: ์„œ๋ฒ„๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ฑฐ๋‚˜ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋  ๋•Œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์„ค์ •ํ•œ๋‹ค.
var port = normalizePort(process.env.PORT || '9999');
app.set('port', port);

ํฌํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ  Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ €์žฅํ•œ๋‹ค.

var server = http.createServer(app);

app ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HTTP ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

์„œ๋ฒ„๋ฅผ ๋ฆฌ์Šค๋‹ ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ณ , ์—๋Ÿฌ ๋ฐ ๋ฆฌ์Šค๋‹ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

 

package.json

ํ”„๋กœ์ ํŠธ์˜ ๋ฉ”ํƒ€ ์ •๋ณด์™€ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. npm install์„ ์‹คํ–‰ํ•˜๋ฉด ์ด ํŒŒ์ผ์— ๋ช…์‹œ๋œ ์˜์กด์„ฑ๋“ค์ด ์„ค์น˜๋œ๋‹ค.

 

public

์ •์  ๋ฆฌ์†Œ์Šค ํŒŒ์ผ(์˜ˆ: ์ด๋ฏธ์ง€, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋“ฑ)์„ ์„œ๋น™ํ•˜๋Š” ํด๋”์ด๋‹ค.

 

routes

๊ฐ ๊ฒฝ๋กœ(route)๋ฅผ ์ •์˜ํ•˜๋Š” ํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•œ๋‹ค.

  • routes/index.js: ๊ธฐ๋ณธ ๊ฒฝ๋กœ /์— ๋Œ€ํ•œ ์š”์ฒญ ์ฒ˜๋ฆฌ ๋‹ด๋‹น.
  • routes/users.js: /users ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์š”์ฒญ ์ฒ˜๋ฆฌ ๋‹ด๋‹น.

๊ฐ ๋ผ์šฐํŠธ ํŒŒ์ผ์—์„œ๋Š” express.Router()๋ฅผ ์‚ฌ์šฉํ•ด ๋ผ์šฐํ„ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ module.exports๋กœ ๋‚ด๋ณด๋‚ด ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

views

์„œ๋ฒ„ ์ธก์—์„œ ๋ Œ๋”๋ง๋˜๋Š” ๋ทฐ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•œ๋‹ค. Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋™์ ์œผ๋กœ HTML์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„ ํŒŒ์ผ๋“ค์ด๋‹ค.

 

 

https://expressjs.com/en/starter/generator.html

 

Express - Node.js web application framework

 

expressjs.com

 

728x90