[typescript] 타입스크립트로 Nest.js 인터셉터 작성하기

인터셉터는 Nest.js 애플리케이션에서 인바운드 및 아웃바운드 요청을 가로채고 변형시키는 데 사용됩니다. 이 기사에서는 타입스크립트로 Nest.js 인터셉터를 작성하는 방법을 알아보겠습니다.

1. 인터셉터 생성하기

먼저 터미널에서 아래 명령어를 사용하여 Nest.js 애플리케이션을 생성합니다.

nest generate interceptor logging

위 명령어를 실행하면 logging.interceptor.ts 파일이 생성됩니다.

2. 인터셉터 구현하기

이제 logging.interceptor.ts 파일을 열고 다음과 같은 내용으로 구현합니다.

import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';

@Injectable()
export class LoggingInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    console.log('Before...');
    const now = Date.now();
    
    return next.handle().pipe(
      tap(() => console.log(`After... ${Date.now() - now}ms`)),
    );
  }
}

위 코드는 NestInterceptor를 구현하고 intercept 메서드를 사용하여 인터셉터 로직을 정의합니다. 이 예제에서는 간단히 모든 요청 처리 전후에 콘솔에 로그를 출력하도록 구현했습니다.

3. 인터셉터 적용하기

마지막으로, logging.interceptor.ts를 적용할 모듈 또는 컨트롤러에 다음과 같이 @UseInterceptors 데코레이터를 사용하여 적용합니다.

import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { LoggingInterceptor } from './logging.interceptor';

@UseInterceptors(LoggingInterceptor)
@Controller('example')
export class ExampleController {
  @Get()
  getExample(): string {
    return 'This is an example';
  }
}

위 코드에서 ExampleController@UseInterceptors(LoggingInterceptor)를 사용하여 LoggingInterceptor를 적용했습니다.

이제 타입스크립트로 Nest.js 인터셉터를 작성하는 방법을 알게 되었습니다. Nest.js의 인터셉터를 사용하면 요청 처리 전후에 로깅, 인증, 캐싱 등 다양한 처리를 할 수 있습니다.

더 많은 정보를 원하시면 Nest.js 공식 문서를 참고하시기 바랍니다.