Middleware란 무엇인가?

서수·2022년 12월 11일
2

Node.js

목록 보기
2/2
post-thumbnail

미들웨어란 무엇인가?

요청과 응답의 중간에 위치하여 미들웨어라고 부릅니다.
미들웨어는 요청과 응답을 조작하여 기능을 추가하기도, 나쁜 요청을 걸러내기도 합니다.

Express 내에서 요청과 응답에 대한 정보를 사용해서 필요한 처리를 진행 할 수 있도록 분리된 독립적인 함수입니다.
그리고 각각 미들웨어는 next() 메소드를 호출해서 그 다음 미들웨어가 작업을 처리할 수 있도록 순서를 넘길 수 있습니다.

위에서 function(req, res, next) 부분이 바로 미들웨어입니다.

미들웨어의 예제

const requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

위에 코드는 requestTime 미들웨어 함수입니다. 또한 루트 경로 라우트의 콜백함수는 미들웨어 함수가 req에 추가하는 특성을 사용합니다.

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

const requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};

app.use(requestTime);

app.get('/', function (req, res) {
  const responseText = 'Hello World!';
  responseText += 'Requested at: ' + req.requestTime + '';
  res.send(responseText);
});

app.listen(3000);

이제 앱의 루트에 대한 요청을 실행할 때, 앱은 이제 요청의 타임스탬프를 브라우저에 표시하게 됩니다.

app.use()는 Express 앱에서 항상 실행하는 미들웨어 역할입니다.
get이나 post 와 달리 요청 URL을 지정하지 않아도 app.use()를 사용할 수 있으며 해당 경우에는 URL에 상관없이 매번 실행됩니다.

미들웨어는 첫번째 인수로 주소를 넣어주지 않는다면 미들웨어는 모든 요청에서 실행되고, 주소(URL)을 넣는다면 해당하는 요청에서만 실행됩니다.

Express 미들웨어 패키지 종류

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'), '번 포트에서 대기 중.');
});

참고자료

https://medium.com/@seymarslan/what-ismiddleware-fdb2ad163388
https://expressjs.com/ko/guide/writing-middleware.html
https://inpa.tistory.com/entry/EXPRESS-%F0%9F%93%9A-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-%F0%9F%92%AF-%EC%9D%B4%ED%95%B4-%EC%A0%95%EB%A6%AC

profile
패션디자인과 출신 비전공자가 개발자로 성장하려 만든 노트

0개의 댓글