Node.js – 서버 구축 – Express 프레임워크 – 미들웨어 – 1 – 외부 미들웨어

ES6(ECMAScript 2015) - 객체 리터럴 확장 - 2 - 프로토타입 축약
Node.js – 서버 구축 – Express 프레임워크 – 미들웨어 – 1 – 외부 미들웨어

Node.js – 서버 구축 – Express 프레임워크 – 미들웨어 – 2 – 사용자 정의 미들웨어

소제목: 사용자 정의 미들웨어란?

사용자 정의 미들웨어는 Express 프레임워크에서 사용자가 직접 작성하여 라우팅 처리 전후에 실행되는 함수입니다. 이 미들웨어는 요청과 응답 객체에 대한 접근 권한을 가지며, 필요한 작업을 수행한 후 다음 미들웨어로 넘어갈 수 있습니다. 사용자 정의 미들웨어를 활용하면, 라우팅 처리 전후에 공통적으로 수행되어야 하는 작업을 모듈화하고 재사용할 수 있습니다.

예시: 로깅 미들웨어

한 가지 예시로, 사용자 정의 미들웨어를 통해 로깅 작업을 수행하는 함수를 작성해보겠습니다. 이 함수는 요청이 들어올 때마다 요청 메서드와 URL을 콘솔에 출력하는 역할을 합니다.

// 사용자 정의 미들웨어 함수
function loggingMiddleware(req, res, next) {
  console.log(`[${req.method}] ${req.url}`);
  next(); // 다음 미들웨어로 넘어가기 위해 next() 함수 호출
}

// Express 애플리케이션에 미들웨어 등록
app.use(loggingMiddleware);

위의 코드에서 loggingMiddleware 함수는 요청 객체(req), 응답 객체(res), 그리고 다음 미들웨어로 넘어가기 위한 함수(next)를 인자로 받습니다. 함수 내에서는 콘솔에 요청 메서드와 URL을 출력한 후 next()를 호출하여 다음 미들웨어로 넘어갑니다.

소제목: 사용자 정의 미들웨어 작성 방법

사용자 정의 미들웨어를 작성하는 방법은 간단합니다. 다음의 단계를 따라 진행할 수 있습니다:

  1. 사용자 정의 미들웨어 함수 작성: 미들웨어 함수를 작성합니다. 이 함수는 요청 객체(req), 응답 객체(res), 그리고 다음 미들웨어로 넘어가기 위한 함수(next)를 인자로 받습니다. 함수 내에서 원하는 작업을 수행한 후 next()를 호출하여 다음 미들웨어로 제어를 넘겨줍니다.

  2. Express 애플리케이션에 미들웨어 등록: 작성한 사용자 정의 미들웨어 함수를 Express 애플리케이션에 등록합니다. app.use() 메서드를 사용하여 미들웨어 함수를 등록할 수 있습니다. 이렇게 등록된 미들웨어는 해당 애플리케이션의 모든 라우트에서 사용됩니다.

  3. 미들웨어의 실행 순서: 여러 개의 미들웨어가 등록되었을 때, Express는 등록된 순서대로 미들웨어를 실행합니다. 따라서 미들웨어 함수를 등록하는 순서에 따라 실행 순서가 결정됩니다. 일반적으로 라우트 처리 미들웨어 이전에 등록하는 것이 좋습니다.

예시: 사용자 인증 미들웨어

이번에는 사용자 인증을 처리하는 사용자 정의 미들웨어를 예시로 살펴보겠습니다. 이 미들웨어는 요청 헤더에서 토큰을 추출하고, 해당 토큰이 유효한지 검증하는 작업을 수행합니다.

// 사용자 정의 미들웨어 함수
function authMiddleware(req, res, next) {
  const token = req.headers.authorization;

  if (token) {
    // 토큰 유효성 검사
    if (isValidToken(token)) {
      // 인증 성공
      next();
    } else {
      // 유효하지 않은 토큰
      res.status(401).send('Unauthorized');
    }
  } else {
    // 토큰이 없는 경우
    res.status(401).send('Unauthorized');
  }
}

// Express 애플리케이션에 미들웨어 등록
app.use(authMiddleware);

위의 코드에서 authMiddleware 함수는 요청 헤더에서 토큰을 추출하고, 해당 토큰의 유효성을 검사합니다. 토큰이 유효하면 next()를 호출하여 다음 미들웨어로 제어를 넘기고, 유효하지 않은 토큰이거나 토큰이 없는 경우에는 401 Unauthorized 상태 코드를 응답으로 보냅니다.

주의해야 할 점

  1. 미들웨어 함수 내에서 next()를 호출하지 않으면 다음 미들웨어로 제어가 전달되지 않습니다. 따라서 next()를 꼭 호출해야 합니다.
  2. 미들웨어 함수 내에서 res.send() 또는 res.end()와 같은 응답을 보내는 메서드를 호출하면, 응답이 클라이언트로 전송되고 더 이상의 미들웨어 실행은 중지됩니다.
  3. 사용자 정의 미들웨어 함수는 필요한 작업을 수행할 수 있도록 충분히 유연하게 작성되어야 합니다. 이는 개발자의 역할로, 요청과 응답 객체를 적절하게 활용하여 원하는 작업을 수행할 수 있어야 합니다.

자바스크립트와 Express를 사용하여 서버를 구축하고 사용자 정의 미들웨어를 작성하는 방법에 대해 알아보았습니다. 사용자 정의 미들웨어는 서버 개발에서 중요한 개념이며, 다양한 작업을 처리할 수 있습니다. 이를 통해 서버의 유지보수성과 재사용성을 높일 수 있습니다. 자신만의 미들웨어를 작성해보고 Express 애플리케이션에 적용해보세요!

답글 남기기