Node.js, Express.js Middleware의 이해와 활용

미들웨어(Middleware)는 Express.js에서 매우 중요한 개념입니다. 미들웨어는 요청(request)과 응답(response) 사이에 위치하여 요청을 처리하고 응답을 생성하는 함수입니다.

Express.js 애플리케이션에서 미들웨어는 요청에 대한 처리 과정을 중간에서 가로채어 작업을 수행할 수 있게 해줍니다. 이를 통해 요청의 전처리나 후처리를 수행하거나 요청에 대한 로깅, 인증, 에러 처리 등을 쉽게 구현할 수 있습니다.

간단한 예시의 Middleware

Express.js에서 미들웨어는 다음과 같이 작성할 수 있습니다.

app.use(myMiddleware)를 통해 모든 요청이 들어올 때마다 실행되며, 요청을 가로챈 후 'middleware get!' console을 찍고, next()함수를 호출합니다.

미들웨어를 사용하면 요청에 대한 다양한 처리를 효과적으로 관리할 수 있습니다.

middleware

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

const myMiddleware = (req, res, next) => {
    console.log('middleware get!');
    next();
};

app.use(myMiddleware);

app.get('/', (req, res) => {
    res.send('Express.js Middleware');
});

app.listen(3000, () => {
    console.log('Server start');
});

인증을 확인하는 middleware 함수

사용자 인증 middleware는 많이 사용됩니다. 요청이 특정 route로 들어오기 전에 사용자가 로그인되어 있는지 확인하고, 로그인되어 있지 않다면 로그인 페이지로 리디렉션합니다.

authMiddleware코드를 확인하면 사용자의 인증을 확인하고, 사용자가 로그인되어 있지 않다면 '/login'경로로 리디렉션합니다.

app.js코드를 확인하면 /profile 라우트에 'requireAuth' middleware를 적용하였습니다.

사용자가 /profile 페이지로 접근하려고 할 때, 'requireAuth' middleware가 사용자의 로그인 상태를 체크하고,

로그인되어 있지 않다면 로그인 페이지로 리디렉션합니다.

authMiddleware

const requireAuth = (req, res, next) => {
    const isAuthenticated = checkUserAuthentication(req);

    if (!isAuthenticated) {
        return res.redirect('/login');
    }
    next();
};

const checkUserAuthentication = (req) => {
    return req.session.isAuthenticated;
};

module.exports = requireAuth;

app.js

const express = require('express');
const app = express();
const requireAuth = require('./authMiddleware');

app.get('/profile', requireAuth, (req, res) => {
    res.send('profile Page');
});

app.get('/login', (req, res) => {
    res.send('login Page');
});

app.listen(3000, () => {
    console.log('Server start');
});