프로그래밍/Nest.js

Nest.js에서의 미들웨어 활용: 글로벌 및 모듈별 적용 방법

shimdh 2025. 3. 21. 15:28
728x90

Nest.js는 현대적인 웹 애플리케이션 개발을 위한 강력한 프레임워크로, 미들웨어는 이 프레임워크의 핵심 구성 요소 중 하나입니다. 미들웨어는 요청과 응답 사이에서 다양한 작업을 수행하며, 애플리케이션의 전반적인 흐름을 관리하는 데 중요한 역할을 합니다. 이번 포스트에서는 미들웨어의 역할과 글로벌 및 모듈별 적용 방법에 대해 자세히 알아보겠습니다.

미들웨어의 역할

미들웨어는 단순한 기능을 넘어, 애플리케이션의 보안성과 성능을 높이는 데 기여합니다. 다음은 미들웨어가 수행할 수 있는 주요 기능입니다.

1. 요청 가로채기

  • 클라이언트가 서버에 요청하기 전에 특정 작업을 수행할 수 있습니다.
  • 예를 들어, 요청의 유효성을 검사하거나 요청 헤더를 수정하여 서버의 부담을 줄일 수 있습니다.

2. 응답 수정

  • 서버가 클라이언트에게 응답하기 전에 데이터를 변경하거나 추가할 수 있습니다.
  • 이를 통해 클라이언트가 필요로 하는 형식으로 데이터를 가공하여 전달할 수 있습니다.

3. 오류 처리

  • 오류 발생 시 예외를 처리하고 적절한 응답을 반환합니다.
  • 이는 사용자 경험을 향상시키고 시스템의 안정성을 높이는 데 필수적입니다.

글로벌 및 모듈별 미들웨어 적용

미들웨어는 크게 글로벌 미들웨어와 모듈별 미들웨어로 나눌 수 있습니다.

1. 글로벌 미들웨어

  • 모든 라우트에 대해 적용되는 미들웨어입니다.
  • 애플리케이션 전반에 걸쳐 일관된 동작이 필요할 때 사용됩니다.
  • 예를 들어, 모든 요청에 대해 로그를 기록하거나 공통적인 인증 절차를 수행하는 데 유용합니다.

글로벌 미들웨어 구현 예제

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

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

위의 예제에서는 모든 요청에 대해 메서드와 URL을 로그로 출력하는 LoggerMiddleware를 정의했습니다. 이 미들웨어는 다음과 같이 앱 전체에 적용될 수 있습니다:

import { Module, MiddlewareConsumer } from '@nestjs/common';

@Module({
  // ... 다른 설정 ...
})
export class AppModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes('*');
  }
}

2. 모듈별 미들웨어

  • 특정 모듈 내에서만 작동하는 미들웨어입니다.
  • 해당 모듈의 특성이나 요구 사항에 맞춰 설정할 수 있으며, 모듈 간의 독립성을 유지하면서도 필요한 기능을 추가할 수 있는 유연성을 제공합니다.

모듈별 미들웨어 구현 예제

특정 모듈 내에서만 사용하는 경우 아래와 같이 구성할 수 있습니다:

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { AuthMiddleware } from './auth.middleware';

@Module({
  controllers: [UsersController],
})
export class UsersModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(AuthMiddleware).forRoutes(UsersController);
  }
}

위 코드에서는 AuthMiddlewareUsersController에만 적용했습니다. 이렇게 하면 사용자 관련 요청은 반드시 인증 과정을 거치게 되어 보안성을 한층 강화할 수 있습니다.

결론

미들웨어는 Nest.js 애플리케이션에서 중요한 역할을 하며, 이를 통해 개발자는 더 나은 구조화된 코드를 작성하고 다양한 기능들을 간편하게 추가할 수 있습니다. 글로벌 또는 모듈별로 유연하게 사용할 수 있는 점이 큰 장점이며, 이를 통해 복잡한 비즈니스 로직도 효율적으로 관리 가능합니다. 미들웨어를 적절히 활용함으로써 개발자는 애플리케이션의 유지보수성과 확장성을 높일 수 있으며, 사용자에게 더 나은 경험을 제공할 수 있습니다.

728x90