본문으로 건너뛰기

Custom Exception 만들어서 사용자 예외 처리하기

2024-06-21 · 1분 읽기

프로젝트를 진행하다가 오류를 어떻게 처리할지에 대해 이야기가 나왔었는데 전에 있던 프로젝트에선 그냥 기본적으로 제공해주는 오류 처리 형식을 썼었다.

throw new IllegalArgumentException("오류 메세지");

하지만 이렇게 할 경우에 오류가 발생할 경우 { "status" : 500, "error" : "Internal Server Error" } 와 같은 형식으로 뜨며 어느 부분에서 문제가 생기는지 정확히 알 수 없다.

이를 어떤식으로 해결할지 의논하다가 ErrorType을 enum으로 만들어 전체적인 총괄을 하기로 했다.

...
public enum ErrorType {
...
	//reply
    NOT_FOUND_REPLY(HttpStatus.NOT_FOUND, "해당하는 댓글이 없습니다."),
    WRONG_USER_REPLY(HttpStatus.LOCKED, "사용자가 쓴 댓글이 아닙니다."),
    NOT_FOUND_FEED(HttpStatus.NOT_FOUND, "해당하는 게시글이 없습니다.");
 
    private final HttpStatus httpStatus;
    private final String message;
}

위와 같은 에러타입을 만든 후 이를 오류 형식을 불러내는 CustomException 클래스를 만들었다.

public class CustomException extends RuntimeException {
    private String result;
    private ErrorType errorType;
 
    public CustomException(ErrorType errorType) {
        this.result = "ERROR";
        this.errorType = errorType;
    }
}

이후 Service 부분에서 오류를 처리할 때 다음과 같이 ErrorType 뒤에 enum으로 선언한 값을 넣으면 어떤 오류가 발생했는지 알 수 있다.

.orElseThrow(() -> new CustomException(ErrorType.NOT_FOUND_FEED));