본문 바로가기

Programming/Node.js

7. 익스프레스 (1) - 미들웨어 [3] : morgan

node js logo image

 

 

 

 

앞서서 작성한 app.js를 좀 더 하나씩 살펴보겠습니다. 

 

[app.js]

 

const express =require('express');
const morgan = require('morgan');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const dotenv = require('dotenv');
const path = require('path');

dotenv.config();
const app = express();
app.set('port', process.env.PORT || 3000);

app.use(morgan('dev'));
app.use('/', express.static(path.join(__dirname, 'public')));
app.use(express.json());
app.use(express.urlencoded( {extended: false} ));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
    resave: false,
    saveUninitialized: false,
    secret: process.env.COOKIE_SECRET,
    cookie: {
        httpOnly: true,
        secure: false,
    },
    name: 'session-cookie',
}));

app.use((req, res, next) => {
    console.log('모든 요청에 실행됨');
    next();
});

app.get('/', (req, res, next) => {
    console.log('GET / 요청에서만 실행됨');
    next();
}, (req, res) => {
    throw new Error('에러는 에러 처리용 미들웨어로 전달');
});

app.use((err, req, res, next) => {
    console.error(err);
    res.status(500).send(err.message);
});

app.listen(app.get('port'), () => {
    console.log(app.get('port'), '번 포트에서 대기');
});

 

 

위 서버를 실행한 후, 브라우저에서 localhost:3000에 접속해 보겠습니다. 콘솔에 다음과 같은 메시지가 출력되는 것을 확인할 수 있습니다. 

 

3000 번 포트에서 대기
모든 요청에 실행됨
GET / 요청에서만 실행됨
Error: 에러는 에러 처리용 미들웨어로 전달
	// 에러 스택 생략...
GET / 500 9.639 ms - 49
모든 요청에 실행됨
GET /favicon.ico 404 2.092 ms - 150

 

 

여기서 출력되는 GET 500 9.639 ms -49라는 라인은 morgan 미들웨어를 통해 나오는 것입니다. 이는 여기서 발생하는 요청과 응답에 대한 정보를 콘솔에 기록하는 역할을 합니다. 참고로 morgan 미들웨어의 사용은 app.use(morgan('dev'));

형식으로 사용하게 되는데, 일반적으로 개발 환경에서는 'dev', 배포 환경에서는 combined를 사용합니다. 

 

여기서 등장한 GET / 500 9.639 ms - 49 를 하나씩 뜯어보자면 [HTTP 메서드] [주소] [HTTP 상태 코드] [응답속도] - [응답 바이트]를 의미합니다. 이를 통해 요청과 응답을 한눈에 살펴볼 수 있다는 장점이 있지요.