“예외를 어떻게 처리해야 효율적일까”에 대한 고민을 했습니다.
고려 사항은 다음과 같습니다.
위 5가지를 생각하였습니다.
이번 프로젝트에서 DDD(Domain Driven Design)을 적용하기로 하였기 때문에, 도메인 로직에 대한 예외 처리를 잘 해놓으면 좋겠다고 생각하였습니다.
따라서 도메인 로직을 수행하며 발생할 수 있는 예외 상황들을 Custom 예외를 작성하고 싶은 마음이 컸습니다.
하지만 모든 Custom 예외를 별개의 클래스로 만들면 어떤 예외가 발생하였는지 쉽게 알아볼 수 있지만, 관리하기가 힘들겠다고 생각했습니다.
그래서 하나의 BusinessException 클래스를 다음과 같이 생성했습니다.
@Getter
public class BusinessException extends RuntimeException {
private final String invalidValue;
private final String fieldName;
private final HttpStatus httpStatus;
private final String message;
public BusinessException(Object invalidValue, String fieldName, ErrorCode errorCode) {
super(errorCode.getMessage());
this.invalidValue = invalidValue != null ? invalidValue.toString() : null;
this.fieldName = fieldName;
this.httpStatus = errorCode.getHttpStatus();
this.message = errorCode.getMessage();
}
}
멤버 변수로 예외가 발생한 필드명, 필드 값, 상태 코드, 예외 메시지를 가지도록 하였습니다.