인프런 커뮤니티 질문&답변

김은재님의 프로필 이미지
김은재

작성한 질문수

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

고정인증 로그인기능 구현

Exception에 대해서 질문드립니다.

작성

·

600

3

실무를 하다 보면 다양한 Exception이 많이 나오게될텐데 그럴때마다 Exception파일을 만들어서 상속 받은 뒤 처리를 하시나요?? 그러면 엄청나게 많은 Exception파일들이 생길 것 같아서요!!
아니면 공통적인 Exception들만 ExceptionHandler로 잡아서 에러처리하고 공통적이지 않은 Exception들은 어떤식으로 처리하는지 궁금합니다.

저희 회사같은 경우는 Enum클래스에 여러가지 상황에맞는 상태코드와 문구를 설정해두고, 해당 상황이 나오면 상태코드와 문구를 Json데이터에 세팅하여 내려주더라구요. 반면에 ExceptionHandler는 사용하지 않고 있어요.

호돌맨님은 어떤식으로 처리하는지 궁금하여 질문드립니다.

답변 1

3

호돌맨님의 프로필 이미지
호돌맨
지식공유자

안녕하세요. 호돌맨입니다.

말씀하신대로 Exception을 상속받은 하나한 만들어서 처리합니다.
4xxException -> InvalidRequest(400), NotFound(404), AccessDenied(403)
이런식이죠.

그런데 예외가 많아진다면.. 경계를 어떻게 나눌것인지 생각해볼것 같습니다.

예를들어 404에는 종류가 많을 겁니다.

  1. 사용자를 찾을 수 없음 (UserNotFound)

  2. 도서를 찾을 수 없음 (BookNotFound)

  3. 관리자를 찾을 수 없음 (AdminNotFound)

  4. 리뷰를 찾을 수 없음 (ReviewNotFound)

  5. 댓글을 찾을 수 없음 (CommentNotFound)

  6. 기타 등등

이러면 귀찮으니깐

NotFoundException을 하나 만들고 메세지를 Enum에서 찾아 던지는것도 방법이라고 생각합니다.

enum NotFoundType {
    BOOK("도서"),
    USER("사용자"),
    ADMIN("괸리자"),
    REVIEW("리뷰"),
    COMMENT("댓글")

    private final String message;

    public getMessage() {
        return this.message + "을(를) 찾을 수 없습니다.";
    }
}

class NotFoundException extends MyServiceException {
    private final String message;
   
    public NotFoundException(String message) {
        this.message = message;
    }
   
    public NotFoundException(NotFoundType type) {
        this.message = type.getMessage()
    }
}

대충 위와 같은 느낌이죠. (저는 저렇게 해본적은 없습니다.) 아무튼 방법은 너무 많을것 같습니다.

MyServiceException을 상속받은 예외들은 ExceptionHandler에서 MyServiceException만으로 Catch를 할 수 있을테니 처리방식이 복잡하지는 않을것 같습니다.

감사합니다.

김은재님의 프로필 이미지
김은재

작성한 질문수

질문하기