ClassNotFoundException
등NullPointerException
, ArrayIndexOutOfBoundsException
등✔ 서비스 계층에서 예외 던지기 (throw)
- 조회되는 회원이 없다고 가정하고 예외 메세지를 포함한 후 메서드 밖으로 던지기
✔
GlobalExceptionAdvice
예외 잡기 (catch)
- 콘솔에 메세지만 출력
✔
handleResourceNotFoundException()
메서드의 문제점
- 서비스 계층에서 의도적으로 던질 수 있는 예외 상황은 다양하게 존재할 수 있기 때문에 적절x
RuntimeException을 그대로 던지고 잡는 것은 명확하지 않고 구체적으로 정보 얻기 어려움
✔ 예외 코드 정의
- CustomExeception에 사용할 ExceptionCode를 enum으로 정의
✔ BusinessLogicException 구현
- ExceptionCode를 멤버 변수로 지정하여 생성자를 통해서 좀 더 구체적인 예외정보 제공
상위 클래스인 RuntimeException의 생성자(super)로 예외 메세지 전달- 개발자가 의도적으로 예외를 던져야 하는 다양한 상황에서 ExceptionCode 정보만 바꿔가며 던질 수 있다.
✔ 서비스 계층에 BusinessLogicException 적용
- 회원 정보가 존재하지 않는다는
MEMBER_NOT_FOUND
를 BusinessLogicException 생성자의 파라미터로 전달✔ Exception Advice에서 BusinessLogicException 처리
- 한가지 유형으로 고정된 예외를 처리할 경우에는
@ResponseStatus
로 HttpStatus를 지정해서 사용하고, 다양한 유형의 Custom Exception을 처리할 경우에는ResponseEntity
를 사용