[typescript] 타입스크립트로 Nest.js 예외 필터 작성하기

Nest.js는 TypeScript를 기반으로 하는 서버사이드 애플리케이션을 개발할 수 있도록 도와주는 프레임워크입니다. 이 프레임워크는 강력한 예외 처리 메커니즘을 제공하여 애플리케이션의 안정성을 높일 수 있습니다. 예외 필터는 Nest.js 애플리케이션에서 발생한 예외를 캐치하고 처리할 수 있는 중요한 도구입니다.

이번 포스트에서는 Nest.js 애플리케이션에서 타입스크립트를 사용하여 예외 필터를 작성하는 방법에 대해 알아보겠습니다.

Nest.js 예외 필터란?

Nest.js 예외 필터는 애플리케이션에서 발생한 예외를 캐치하고 사용자 정의된 방식으로 처리할 수 있게 해줍니다. 이를 통해 애플리케이션의 예외 처리 로직을 단일 장소에 유지하고 중복을 최소화할 수 있습니다.

타입스크립트로 Nest.js 예외 필터 작성하기

예외 필터 클래스 생성

먼저 예외 필터 클래스를 생성해야 합니다. 이 클래스는 Nest.js의 ExceptionFilter 인터페이스를 구현해야 합니다. 아래는 예외 필터 클래스의 간단한 예제입니다.

import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
import { Request, Response } from 'express';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest<Request>();
    const status = exception.getStatus();

    response
      .status(status)
      .json({
        statusCode: status,
        timestamp: new Date().toISOString(),
        path: request.url,
      });
  }
}

위 코드에서 @Catch(HttpException) 데코레이터는 해당 클래스가 HttpException을 캐치하고 처리한다는 것을 나타냅니다. catch 메소드에서는 예외를 캐치하고 사용자 정의된 방식으로 처리하는 로직이 작성됩니다.

예외 필터 적용

마지막으로, 작성한 예외 필터를 애플리케이션에 적용해야 합니다. 이를 위해서는 모듈 레벨에서 APP_FILTER 프로바이더를 사용하여 예외 필터를 등록해야 합니다. 예를 들어, 전역 예외 필터를 등록하는 방법은 다음과 같습니다.

import { Module } from '@nestjs/common';
import { APP_FILTER } from '@nestjs/core';

import { HttpExceptionFilter } from './http-exception.filter';

@Module({
  providers: [
    {
      provide: APP_FILTER,
      useClass: HttpExceptionFilter,
    },
  ],
})
export class AppModule {}

위 코드에서 APP_FILTER 프로바이더를 사용하여 HttpExceptionFilter 클래스를 등록하고 있습니다.

마무리

이제 타입스크립트로 Nest.js 예외 필터를 작성하는 방법에 대해 알아보았습니다. 예외 필터를 사용하면 애플리케이션의 예외 처리를 효율적으로 관리할 수 있으며, 손쉽게 공통된 에러 응답을 설정할 수 있습니다.

더 많은 정보나 실제 예제에 대해서는 Nest.js의 공식 문서를 참고하십시오.