본문 바로가기
Storify

STORIFY (0129) - 예외 처리 적용, GlobalExceptionFilter

by Peter.JH 2024. 1. 29.
728x90

예외처리 적용

'NestJS에서 controller 메서드는 일반적으로 `try-catch` 블록 없이 작성됩니다. 이는 NestJS 자체가 예외 처리 메커니즘을 내장하고 있기 때문입이다. controller 메서드에서 발생하는 모든 예외는 NestJS에 의해 자동으로 캐치되어 처리됩니다. 그러나, 특정 유형의 예외를 사용자 정의로 처리하려면 `try-catch` 블록을 사용하거나, 더 나은 방법으로 필터나 인터셉터를 사용할 수 있습니다. 이를 통해 특정 예외 유형에 대한 공통 처리 로직을 중앙에서 관리할 수 있습니다.  `GlobalExceptionFilter`는 application에서 발생하는 모든 예외를 캐치하여 처리합니다. 이 필터를 사용하면 각 컨트롤러 메서드에서 `try-catch` 블록을 작성하지 않아도 됩니다. 

저는 유저에게 노출되면 안될 정보가 노출되는것을 막기 위해 GlobalExceptionFilter.ts 에서 처리했습니다. 

 

├── ai
│   ├── ai.controller.ts ●
│   └── ai.service.ts
├── app.controller.ts
├── app.module.ts
├── app.service.ts
├── auth
│   ├── auth.controller.ts ●
│   └── auth.service.ts ●
├── books
│   ├── books.controller.ts ●
│   ├── books.repository.ts ●
│   └── books.service.ts ●
├── common
│   └── guards
├── filter
│   └── GlobalExceptionFilter.ts
├── friendReqs
│   ├── dto
│   ├── friendReqs.controller.ts ●
│   ├── friendReqs.repository.ts ●
│   └── friendReqs.service.ts ●
├── friends
│   ├── friends.controller.ts ●
│   ├── friends.repository.ts ●
│   └── friends.service.ts ●
├── storages
│   └── storages.service.ts ●
└──  users
     ├── users.controller.ts ●
     ├── users.repository.ts ●
     └── users.service.ts ●

repository에서는 따로 try, catch를 작성하였고, 유저에게는 간단한 error메세지를 개발자에게는 Logger를 사용해 기록하는 방식으로 하였습니다. 

 

 

정리

 

1. 예외 처리 적용:

- NestJS의 내장 예외 처리 메커니즘을 활용하여 예외 처리를 적용하였습니다. 이를 통해 각 컨트롤러 메서드에서 별도의 `try-catch` 블록을 작성하지 않아도 되도록 하였습니다.

 

2. GlobalExceptionFilter 구현:

- 애플리케이션에서 발생하는 모든 예외를 캐치하여 처리하는 `GlobalExceptionFilter`를 구현하였습니다. 이 필터를 사용하여 특정 예외 유형에 대한 공통 처리 로직을 중앙에서 관리하였습니다.

 

3. 사용자에게 안전한 에러 메시지 제공:

- 사용자에게 노출되어서는 안되는 정보가 에러 메시지를 통해 노출되지 않도록 하였습니다. 대신 사용자에게는 간단한 에러 메시지를 표시하고, 개발자에게는 로거를 사용하여 에러 정보를 기록하였습니다.

 

4. 각 모듈에 대한 예외 처리 적용:

- `ai`, `auth`, `books`, `friendReqs`, `friends`, `storages`, `users` 등의 각 모듈에서 발생하는 예외를 처리하였습니다. 각 모듈의 컨트롤러와 서비스에서 발생하는 예외는 `GlobalExceptionFilter`를 통해 캐치되고 처리됩니다. 

728x90

'Storify' 카테고리의 다른 글

STORIFY (0131) - Socket.IO(2)  (0) 2024.02.01
STORIFY (0130) - Socket.IO(1)  (0) 2024.01.31
STORIFY (0127) - 좋아요~ 추가  (0) 2024.01.27
STORIFY (0126) - 친구 요청 추가  (0) 2024.01.27
STORIFY (0125) - ObjectId  (0) 2024.01.26