프로그래밍/Nest.js

Nest.js의 아키텍처: 미들웨어의 중요성과 활용

shimdh 2025. 3. 17. 09:38
728x90

Nest.js는 현대적인 웹 애플리케이션을 효율적으로 개발할 수 있도록 설계된 강력한 프레임워크입니다. 이 프레임워크는 모듈화된 구조를 통해 코드의 재사용성과 유지보수성을 높이며, 개발자들이 복잡한 애플리케이션을 보다 쉽게 관리할 수 있도록 돕습니다. 이러한 아키텍처의 중요한 구성 요소 중 하나가 바로 미들웨어입니다. 미들웨어는 클라이언트의 요청과 서버의 응답 사이에서 특정 작업을 수행하는 함수로, HTTP 요청이 들어오면 해당 요청을 처리하기 전에 실행되어 다양한 기능을 수행합니다.

1. 미들웨어의 개념

미들웨어는 여러 가지 중요한 역할을 수행합니다:

  • 요청 로깅: 들어오는 요청에 대한 정보를 기록하여 문제를 추적하거나 분석하는 데 도움을 줄 수 있습니다. 이를 통해 개발자는 애플리케이션의 사용 패턴을 이해하고, 성능 문제를 조기에 발견할 수 있습니다.
  • 인증 및 권한 부여: 사용자가 특정 리소스에 접근하기 전에 인증 토큰이나 세션 정보를 확인하여, 보안성을 높이고 불법적인 접근을 차단합니다. 이는 사용자 데이터 보호에 필수적입니다.
  • 요청 데이터 수정: 클라이언트로부터 받은 데이터를 변형하거나 추가적인 속성을 붙일 수 있습니다. 예를 들어, 요청 본문에 특정 필드를 추가하거나, 데이터를 정규화하여 일관성을 유지할 수 있습니다.

예를 들어, 모든 요청에 대해 로그를 남기는 간단한 미들웨어 코드는 다음과 같습니다:

import { Injectable, NestMiddleware } from '@nestjs/common';

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

2. 미들웨어의 작동 방식

Nest.js에서는 @Module 데코레이터와 함께 configure() 메서드를 사용하여 미들웨어를 설정합니다. 이 메서드는 애플리케이션의 전반적인 흐름에서 어떤 시점에 미들웨어가 호출될지를 결정하며, 이를 통해 개발자는 미들웨어의 적용 범위를 세밀하게 조정할 수 있습니다.

import { Module, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './logger.middleware';

@Module({
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes('*');
  }
}

위 코드에서는 모든 라우트('*')에 대해 LoggerMiddleware가 적용되도록 설정했습니다. 이를 통해 모든 요청에 대해 로그가 기록되며, 개발자는 애플리케이션의 상태를 쉽게 모니터링할 수 있습니다.

3. 다양한 활용 예시

미들웨어는 매우 다양하게 활용될 수 있으며, 몇 가지 예시는 다음과 같습니다:

  • CORS 처리: 다른 도메인에서 오는 API 호출을 허용하도록 CORS 정책을 설정할 수 있습니다. 이는 웹 애플리케이션이 다양한 클라이언트와 상호작용할 수 있도록 해줍니다.
  • 세션 관리: 사용자 세션 정보를 유지하고 관리하는 데 사용할 수 있습니다. 이를 통해 사용자는 로그인 상태를 유지하며, 개인화된 경험을 제공받을 수 있습니다.
  • 데이터 유효성 검사: 입력 데이터를 검토하고 유효하지 않은 경우 에러 메시지를 반환할 수도 있습니다. 이는 애플리케이션의 안정성을 높이고, 사용자에게 더 나은 피드백을 제공하는 데 기여합니다.

예를 들면, CORS 처리를 위한 간단한 미들웨어 코드는 아래와 같습니다:

function cors(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
   next();
}

결론

Nest.js에서의 미들웨어는 애플리케이션이 클라이언트와 상호작용하는 방식을 조정하고 확장할 수 있는 강력한 도구입니다. 이를 통해 보안 강화, 데이터 처리, 사용자 경험 개선 등 다양한 요구 사항을 충족시킬 수 있으며, 전체 시스템 성능 향상에도 기여할 수 있습니다. 이러한 이해를 바탕으로 실제 프로젝트에서도 필요한 기능들을 쉽게 구현해 나갈 수 있을 것입니다. 미들웨어의 활용은 개발자에게 더 많은 유연성과 제어력을 제공하며, 복잡한 비즈니스 로직을 효과적으로 처리할 수 있는 기반을 마련해 줍니다.

728x90