npm을 통해 express를 다운로드하고 express 프로젝트를 생성하면 아래와 같은 구조로 생성하게 되는데
프로젝트를 진행하기 전에 각각 무슨 역활을 하는지 알아 보고자한다.
프로젝트 구조
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
www
express의 핵심파일로 아래와 같이 구성되어 있다.
var app = require('../app');
var debug = require('debug')('learn-express:server');
var http = require('http');
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server = http.createServer(app);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
www의 핵심 설정 부분
// 아래의 app.js를 설명함.
var app = require('../app');
//콘솔에 로그를 남기기 위한 모듈
var debug = require('debug')('learn-express:server');
//웹 서버를 만들기 위한 모듈
var http = require('http');
// 서버가 실행 될 포트 지정
var port = normalizePort(process.env.PORT || '3000');
// 3000포트 설정
app.set('port', port);
// http에서 사용할 서버설정
var server = http.createServer(app);
// 3000포트 사용
server.listen(port);
// error 콜백 설정
server.on('error', onError);
// listen 콜백 설정
server.on('listening', onListening);
- debug: 로그를 남기기 위하여 사용
- http: 웹서버를 생성하기 위한 필수 모듈
- port: 3000 포트 지정
- app.set('port', port): app에서 사용할 포트 설정
- server = http.createServer(app): app 모듈을 사용하여 서버를 생성
- server.listen(port): 지정된 포트로 웹서버를 시작합니다.
app.js
www에서 사용하는 app모듈로 set을 통하여 앱을 설정하고 use를 사용하여 미들웨어를 연결한다.
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();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
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);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
미들웨어란?
미들웨어는 요청과 응답의 사이에서 위치하여 동작하며 미들웨어를 통해 요청과 응답을 조작하여 기능을 추가하기도 하고 잘못된 요청을 예외처리 작업하는 등 익스프레스 동작방식의 핵심이다.
미들웨어의 요청 흐름
위에서 아래로 설정되어 있는 순서대로 동작한다.
'JAVA > Spring Boot' 카테고리의 다른 글
스프링에서 Redirect시 401 Error 트러블 슈팅 (0) | 2023.03.27 |
---|---|
(Spring Security)스프링 환경에서 JWT 토큰 발급 (0) | 2022.03.21 |
(Spring Boot) 동작 원리 (0) | 2021.08.10 |
(스프링 부트) 커스텀어노테이션으로 중복코드 방지 (0) | 2021.07.14 |
(스프링 부트) 구글 로그인 구현 (0) | 2021.07.13 |