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 예외 처리 함수는 다음과 같습니다.
BadRequestException
UnauthorizedException
NotFoundException
ForbiddenException
NotAcceptableException
RequestTimeoutException
ConflictException
GoneException
HttpVersionNotSupportedException
PayloadTooLargeException
UnsupportedMediaTypeException
UnprocessableEntityException
InternalServerErrorException
NotImplementedException
ImATeapotException
MethodNotAllowedException
BadGatewayException
ServiceUnavailableException
GatewayTimeoutException
PreconditionFailedException
참고 자료
'개발 > NestJS' 카테고리의 다른 글
NestJS 기초 (10) 파이프와 유효성 검사 (0) | 2022.10.09 |
---|---|
NestJS 기초 (8) 미들웨어 (0) | 2022.10.07 |
NestJS 기초 (7) 환경 변수 관리하기 (0) | 2022.10.06 |