예외처리 적용
'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`를 통해 캐치되고 처리됩니다.
'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 |