미들웨어 탐구하기
Node.js Express로 쉽게 서버 구축하기
Exploring Middleware
익스프레스(Express) 프레임워크를 활용하면서 매개체 역할을 하는 다양한 기능을 이해하는 것이 중요합니다. 이런 기능은 "미들웨어"라고 불리며, 다음과 같이 정의할 수 있습니다: Express 미들웨어는 요청(Request)과 응답(Response) 사이에서 작동하여 데이터를 처리하고 흐름을 제어하는 역할을 하는 함수들입니다.
미들웨어의 역할
요청이나 응답의 변경: 요청 객체(req)나 응답 객체(res) 속성을 추가하거나 수정할 수 있습니다.
요청 통과 여부 결정: 현재 요청을 특정 경로로 라우팅하거나, 응답을 종료하여 네트워크로 되돌려 보낼 수 있습니다.
요청 및 응답 로깅: 요청/응답의 과정 또는 정보를 기록하여 서버의 디버깅 및 로깅을 돕습니다.
Express에서 기본 제공하는 미들웨어
Express에는 몇 가지 내장 미들웨어가 포함되어 있습니다. 예를 들어, 정적 파일 서비스 제공을 위한 express.static
또는 요청 본문을 분석하는 express.json
과 express.urlencoded
미들웨어 등이 있습니다.
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
사용자 정의 미들웨어 생성하기
사용자 정의 미들웨어는 req
, res
, next
의 세 가지 인수를 사용하는 함수 형태로 정의됩니다. 이 함수는 이후의 미들웨어 체인으로 제어를 전달하기 위해 next()
를 호출할 수 있습니다.
app.use((req, res, next) => {
console.log('클라이언트 IP: ', req.ip);
next(); // 다음 미들웨어로 전달
});
비동기 미들웨어
비동기 작업 중단 시 서버를 중단하는 것이 아닌 async/await
를 사용하여 비동기 로직을 처리할 수 있습니다. try.catch
구조를 사용하여 오류를 적절히 처리하세요.
app.use(async (req, res, next) => {
try {
const result = await someAsyncTask();
console.log(result);
next();
} catch (error) {
next(error); // 오류 핸들링 미들웨어로 전달
}
});
결론
미들웨어는 Express 애플리케이션에서 필수 불가결한 요소로, 요청/응답 흐름에 영향을 미칠 수 있는 강력한 도구입니다. 많은 경우 적절하게 구성된 미들웨어 체인을 통해 코드를 분리하고 재사용하며 유지보수를 용이하게 할 수 있습니다. 다음 장에서는 미들웨어와 다른 역할이 구분된 애플리케이션 설계 패턴에 대해 살펴보겠습니다.