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