프로그래밍/Nest.js

NestJS 전역 미들웨어: 애플리케이션의 품질을 높이는 필수 요소

shimdh 2025. 3. 25. 09:59
728x90

NestJS는 현대 웹 애플리케이션 개발에 있어 강력한 프레임워크로 자리 잡고 있습니다. 그 중에서도 전역 미들웨어는 애플리케이션의 전반적인 동작에 중요한 영향을 미치는 요소로, 개발자에게 많은 이점을 제공합니다. 이번 포스트에서는 전역 미들웨어의 개념, 구현 방법, 사용 사례 등을 심도 있게 살펴보겠습니다.

전역 미들웨어의 개념

전역 미들웨어는 NestJS 애플리케이션의 모든 라우트에 적용되는 특별한 종류의 미들웨어입니다. 이는 다음과 같은 특징을 가지고 있습니다:

  • 모든 라우트에 적용: 전역 미들웨어는 특정 경로에 국한되지 않고 애플리케이션 내의 모든 엔드포인트에 대해 작동합니다. 이를 통해 개발자는 각 라우트마다 동일한 로직을 반복해서 작성할 필요가 없어 코드의 중복을 줄일 수 있습니다.

  • 요청 및 응답 조작: 클라이언트로부터 오는 요청을 가로채거나 서버에서 보내는 응답을 수정할 수 있는 기능을 제공합니다. 이를 통해 개발자는 요청의 유효성을 검사하거나 응답의 형식을 조정하는 등의 작업을 손쉽게 수행할 수 있습니다.

  • 비즈니스 로직 분리: 각 라우터나 컨트롤러에서 반복되는 코드를 줄여주어 코드의 재사용성을 높이고 유지 보수를 용이하게 합니다. 이는 팀원 간의 협업을 원활하게 하고, 코드의 가독성을 높이는 데 기여합니다.

전역 미들웨어 구현 방법

NestJS에서 전역 미들웨어를 설정하기 위해서는 app.use() 메서드를 사용하여 애플리케이션 인스턴스에 등록해야 합니다. 아래는 간단한 예제입니다:

import { Injectable, NestMiddleware } from '@nestjs/common';
import { NextFunction, Request, Response } from 'express';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    console.log(`Request... ${req.method} ${req.url}`);
    next();
  }
}

위의 코드에서는 LoggerMiddleware라는 커스텀 미들웨어를 생성했습니다. 이 미들웨어는 들어오는 HTTP 요청을 로그로 기록하고, 다음 단계로 진행하도록 합니다. 이를 통해 개발자는 요청의 흐름을 쉽게 추적할 수 있으며, 문제 발생 시 신속하게 대응할 수 있습니다.

모듈 내에서 전역 미들웨어 등록하기

전역으로 사용할 경우 main.ts 파일 내에서 다음과 같이 설정할 수 있습니다:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { LoggerMiddleware } from './logger.middleware';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // 전역미들웨어 등록
  app.use(LoggerMiddleware);

  await app.listen(3000);
}
bootstrap();

이렇게 하면 모든 라우트에 대해 LoggerMiddleware가 실행되며, 각각의 HTTP 요청 정보를 콘솔에 출력합니다. 이는 개발자가 애플리케이션의 동작을 실시간으로 모니터링할 수 있게 해줍니다.

전역 미들웨어의 사용 사례

전역 미들웨어는 다양한 비즈니스 요구 사항을 충족시킬 수 있는 강력한 도구입니다. 다음은 몇 가지 주요 사용 사례입니다:

  1. 인증 확인:

    • 사용자 인증 토큰을 검증하여 유효하지 않은 경우 접근을 차단하는 기능을 구현할 수 있습니다. 이를 통해 애플리케이션의 보안을 강화할 수 있습니다.
  2. 요청 데이터 정규화:

    • 클라이언트가 보낸 데이터를 표준 형식으로 변환하여 일관된 처리를 가능하게 합니다. 이는 데이터의 일관성을 유지하고, 후속 처리의 복잡성을 줄이는 데 기여합니다.
  3. 응답 포맷팅:

    • API 응답 구조를 통일시키기 위해 모든 응답 객체를 특정 형태로 감싸주는 작업을 수행합니다. 이를 통해 클라이언트는 예측 가능한 형식의 응답을 받을 수 있습니다.
  4. 성능 모니터링 및 로깅:

    • 각 요청 처리 시간을 측정하고 이를 로그 파일이나 외부 서비스에 기록함으로써 성능 분석 자료를 제공합니다. 이는 애플리케이션의 성능을 지속적으로 개선하는 데 중요한 역할을 합니다.

결론

전역 미들웨어는 NestJS 애플리케이션에서 중요한 역할을 하며, 다양한 비즈니스 요구 사항을 충족시킬 수 있는 강력한 도구입니다. 이를 통해 개발자는 더 나은 사용자 경험을 제공하고, 애플리케이션의 유지 보수성을 높일 수 있습니다. 전역 미들웨어를 적절히 활용하면 코드의 중복을 줄이고, 애플리케이션의 품질을 높이는 데 기여할 수 있습니다.

728x90