Express 애플리케이션에서 사용자 정의 미들웨어 만드는 방법

Express 애플리케이션에서 사용자 정의 미들웨어 만드는 방법

Express에서 미들웨어는 요청과 응답 사이에서 실행되는 함수들로, 애플리케이션의 요청 처리 파이프라인에 중간 단계를 추가할 수 있습니다. 사용자 정의 미들웨어를 통해 로깅, 인증, 데이터 처리 등 다양한 작업을 수행할 수 있으며, 이를 통해 애플리케이션의 기능을 유연하게 확장할 수 있습니다.

미들웨어의 기본 구조

미들웨어 함수는 세 가지 파라미터를 받습니다: 요청 객체(req), 응답 객체(res), 그리고 다음 미들웨어 함수로 넘어가기 위한 next 함수입니다.

function myMiddleware(req, res, next) {
    // 여기에 로직 작성
    next();
}

사용자 정의 미들웨어 작성하기

1. 로깅 미들웨어 작성

로그를 남기는 미들웨어는 요청이 들어올 때마다 요청의 메소드와 URL을 콘솔에 출력합니다.

function loggingMiddleware(req, res, next) {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next(); // 다음 미들웨어 또는 라우트 핸들러로 제어를 넘깁니다.
}

2. 인증 미들웨어 작성

단순한 인증 미들웨어 예제로, 요청 헤더에 특정 토큰이 있는지 검사하고, 토큰이 유효하지 않으면 403 에러를 응답합니다.

function authMiddleware(req, res, next) {
  const { authorization } = req.headers;
  if (authorization && authorization === "Secret Token") {
    next(); // 인증 성공, 다음 미들웨어로 넘어갑니다.
  } else {
    res.status(403).send('인증 실패');
  }
}

미들웨어 애플리케이션에 적용하기

작성한 미들웨어를 Express 애플리케이션에 적용하는 방법은 다음과 같습니다.

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

function loggingMiddleware(req, res, next) {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next(); // 다음 미들웨어 또는 라우트 핸들러로 제어를 넘깁니다.
}

function authMiddleware(req, res, next) {
  const { authorization } = req.headers;
  if (authorization && authorization === "Secret Token") {
    next(); // 인증 성공, 다음 미들웨어로 넘어갑니다.
  } else {
    res.status(403).send('인증 실패');
  }
}

// 로깅 미들웨어를 애플리케이션 전체에 적용합니다.
app.use(loggingMiddleware);

// 인증 미들웨어를 특정 라우트에만 적용합니다.
app.get('/secret', authMiddleware, (req, res) => {
  res.send('비밀 정보');
});

app.get('/', (req, res) => {
  res.send('홈페이지');
});

const PORT = 3000;
app.listen(PORT, () => {
  console.log(`${PORT}번 포트에서 서버 실행중...`);
});

위 예제에서는 먼저 loggingMiddleware를 사용하여 모든 요청에 대한 로깅을 수행합니다. 그리고 /secret 경로에 대한 요청을 처리하기 전에 authMiddleware를 적용하여 요청이 인증된 경우에만 해당 경로에 접근을 허용합니다. 나머지 경로에 대한 요청은 일반적으로 처리됩니다.

사용자 정의 미들웨어 적용 예제 실행 결과 화면

이렇게 사용자 정의 미들웨어를 작성하고 Express 애플리케이션에 통합하는 방법을 통해, 애플리케이션의 기능을 유연하게 확장할 수 있습니다.

자세한 내용은 공식 사이트 Express 미들웨어 작성 가이드에서 참고하실 수 있습니다.

관련 이전 게시글

이 글이 도움이 되셨다면 공유 부탁 드립니다.

위로 스크롤