NestJS 기초 (9) 예외 처리

2022. 10. 9. 13:00·개발/NestJS

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

 

참고 자료

  • https://docs.nestjs.com/exception-filters

'개발 > NestJS' 카테고리의 다른 글

NestJS 기초 (10) 파이프와 유효성 검사  (0) 2022.10.09
NestJS 기초 (8) 미들웨어  (0) 2022.10.07
NestJS 기초 (7) 환경 변수 관리하기  (0) 2022.10.06
'개발/NestJS' 카테고리의 다른 글
  • NestJS 기초 (11) API 문서 작성하기 (스웨거)
  • NestJS 기초 (10) 파이프와 유효성 검사
  • NestJS 기초 (8) 미들웨어
  • NestJS 기초 (7) 환경 변수 관리하기
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
Klook.com
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
NestJS 기초 (9) 예외 처리
상단으로

티스토리툴바