Nest는 자체적인 예외 처리 레이어를 제공하며 이를 통해 애플리케이션 전반의 에러를 처리할 수 있습니다. 개발자가 애플리케이션 코드에서 예외를 처리하지 않은 경우, Nest 레이어가 이를 포착하여 응답을 전송해줍니다.

이는 NestJS의 글로벌 예외 처리 필터에 의해 진행되며 HttpException 유형의 예외를 처리합니다. 알 수 없는 예외가 발생할 경우 다음과 같은 JSON 응답이 자동으로 생성됩니다.
{
"statusCode": 500,
"message": "Internal server error"
}
일반적인 예외 처리 방식
Nest 자체 HttpException 클래스는 @nestjs/common 패키지 내에 있습니다. 앞서 우리가 만들었던 CatsController에서 GET 라우트 핸들러 내 findAll() 메소드에서 다음과 같이 에러를 출력해보도록 하겠습니다.
@Get()
async findAll() {
throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);
}
클라이언트가 해당 엔드포인트를 호출하는 경우 다음과 같은 응답을 받게 됩니다.
{
"statusCode": 403,
"message": "Forbidden"
}
HttpException은 response와 status 두 가지 아규먼트를 받아 응답을 결정합니다. 응답 메시지를 새로 쓰려면 다음과 같이 작성할 수 있습니다.
@Get()
async findAll() {
throw new HttpException({
status: HttpStatus.FORBIDDEN,
error: 'This is a custom message',
}, HttpStatus.FORBIDDEN)
}
응답은 다음과 같이 반환됩니다.
{
"status": 403,
"error": "This is a custom message"
}
자체 HTTP 예외 처리 활용
Nest는 HttpException을 기반으로 한 다양한 예외 처리 방법을 제공합니다. 커스텀 예외 처리를 사용할 수도 있지만 Nest에서 제공하는 자체 예외 처리를 사용하면 거의 대부분의 상황에 대처할 수 있습니다. 이는 @nestjs/common 패키지에 포함되어 있으며, 가장 많이 사용되는 HTTP 예외 처리 함수는 다음과 같습니다.
BadRequestExceptionUnauthorizedExceptionNotFoundExceptionForbiddenExceptionNotAcceptableExceptionRequestTimeoutExceptionConflictExceptionGoneExceptionHttpVersionNotSupportedExceptionPayloadTooLargeExceptionUnsupportedMediaTypeExceptionUnprocessableEntityExceptionInternalServerErrorExceptionNotImplementedExceptionImATeapotExceptionMethodNotAllowedExceptionBadGatewayExceptionServiceUnavailableExceptionGatewayTimeoutExceptionPreconditionFailedException
참고 자료
'개발 > NestJS' 카테고리의 다른 글
| NestJS 기초 (10) 파이프와 유효성 검사 (0) | 2022.10.09 |
|---|---|
| NestJS 기초 (8) 미들웨어 (0) | 2022.10.07 |
| NestJS 기초 (7) 환경 변수 관리하기 (0) | 2022.10.06 |