[typescript] 타입스크립트로 Nest.js 에러 핸들링 구현하기

Nest.js는 타입스크립트로 구성된 서버 사이드 애플리케이션을 빌드하기 위한 프레임워크로, 에러 핸들링을 구현하는 것은 매우 중요합니다. 이번 포스트에서는 Nest.js 애플리케이션에서 타입스크립트를 사용하여 에러 핸들링을 구현하는 방법에 대해 알아보겠습니다.

1. 예외 필터 생성

먼저, 예외를 처리하기 위한 필터를 생성해야 합니다. 이를 위해 HttpExceptionFilter 라는 예외 필터를 작성해보겠습니다.

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을 처리하기 위한 필터를 정의하였습니다. 필터는 ExceptionFilter 인터페이스를 구현하며, catch 메서드를 오버라이드하여 예외 처리 로직을 작성합니다.

2. 예외 필터 적용

다음으로, 애플리케이션 모듈에 예외 필터를 적용해야 합니다. 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 {}

위 예제에서는 AppModule에서 APP_FILTER를 사용하여 HttpExceptionFilter를 등록하였습니다. 이제 애플리케이션 전역에서 발생하는 HttpException에 대한 예외 처리가 HttpExceptionFilter에서 수행될 것입니다.

이상으로 Nest.js 애플리케이션에서 타입스크립트를 사용하여 에러 핸들링을 구현하는 방법에 대해 알아보았습니다. 추가적으로 전역 예외 처리 이외에도 컨트롤러별로 예외를 처리하고 싶은 경우 @UseFilters 데코레이터를 이용할 수 있습니다. Nest.js의 에러 핸들링에 대해 더 알아보고 싶다면 Nest.js 공식 문서를 참고하세요.