
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()
를 호출하여 다음 미들웨어로 넘어갑니다.
소제목: 사용자 정의 미들웨어 작성 방법
사용자 정의 미들웨어를 작성하는 방법은 간단합니다. 다음의 단계를 따라 진행할 수 있습니다:
-
사용자 정의 미들웨어 함수 작성: 미들웨어 함수를 작성합니다. 이 함수는 요청 객체(
req
), 응답 객체(res
), 그리고 다음 미들웨어로 넘어가기 위한 함수(next
)를 인자로 받습니다. 함수 내에서 원하는 작업을 수행한 후next()
를 호출하여 다음 미들웨어로 제어를 넘겨줍니다. -
Express 애플리케이션에 미들웨어 등록: 작성한 사용자 정의 미들웨어 함수를 Express 애플리케이션에 등록합니다.
app.use()
메서드를 사용하여 미들웨어 함수를 등록할 수 있습니다. 이렇게 등록된 미들웨어는 해당 애플리케이션의 모든 라우트에서 사용됩니다. -
미들웨어의 실행 순서: 여러 개의 미들웨어가 등록되었을 때, 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 상태 코드를 응답으로 보냅니다.
주의해야 할 점
- 미들웨어 함수 내에서
next()
를 호출하지 않으면 다음 미들웨어로 제어가 전달되지 않습니다. 따라서next()
를 꼭 호출해야 합니다. - 미들웨어 함수 내에서
res.send()
또는res.end()
와 같은 응답을 보내는 메서드를 호출하면, 응답이 클라이언트로 전송되고 더 이상의 미들웨어 실행은 중지됩니다. - 사용자 정의 미들웨어 함수는 필요한 작업을 수행할 수 있도록 충분히 유연하게 작성되어야 합니다. 이는 개발자의 역할로, 요청과 응답 객체를 적절하게 활용하여 원하는 작업을 수행할 수 있어야 합니다.
자바스크립트와 Express를 사용하여 서버를 구축하고 사용자 정의 미들웨어를 작성하는 방법에 대해 알아보았습니다. 사용자 정의 미들웨어는 서버 개발에서 중요한 개념이며, 다양한 작업을 처리할 수 있습니다. 이를 통해 서버의 유지보수성과 재사용성을 높일 수 있습니다. 자신만의 미들웨어를 작성해보고 Express 애플리케이션에 적용해보세요!