SEB_BE 45일차 - 예외처리2

subimm_·2022년 10월 26일
0

코드스테이츠

목록 보기
45/83

💡 오늘의 학습목표

  • 비즈니스적인 예외 던지기 및 예외처리
  • 예외처리 실습

📔 비즈니스적인 예외 던지기 및 예외처리

📖 체크 예외와 언체크 예외

  • 체크 예외 : 발생한 예외를 Catch하여 체크한 후에 해당 예외를 복구, 회피 등 구체적 처리를 함. ClassNotFoundException
  • 언체크 예외 : 예외를 Catch하여 해당 예외에 대한 어떤 처리를 할 필요가 없는 예외
    NullPointerException , ArrayIndexOutOfBoundsException

📖 개발자가 의도적으로 예외를 던질 수 있는 상황

  • 백엔드 서버와 외부 시스템과의 연동에서 발생하는 에러 처리
  • 시스템 내부에서 조회하려는 리소스가 없는 경우

📖 의도적인 예외 던지기/받기 (throw/catch)

  • 서비스 계층에서 던져진 예외는 Controller의 핸들러 메서드 쪽에서 잡아서 처리
    • Controller에서 발생한 예외를 Exception Advice에서 처리하도록 공통화 해둠.

✔ 서비스 계층에서 예외 던지기 (throw)

  • 조회되는 회원이 없다고 가정하고 예외 메세지를 포함한 후 메서드 밖으로 던지기

GlobalExceptionAdvice 예외 잡기 (catch)

  • 콘솔에 메세지만 출력

handleResourceNotFoundException() 메서드의 문제점

  • 서비스 계층에서 의도적으로 던질 수 있는 예외 상황은 다양하게 존재할 수 있기 때문에 적절x
    RuntimeException을 그대로 던지고 잡는 것은 명확하지 않고 구체적으로 정보 얻기 어려움

📖 사용자 정의 예외(Custom Exception) 사용

✔ 예외 코드 정의

  • CustomExeception에 사용할 ExceptionCode를 enum으로 정의

✔ BusinessLogicException 구현

  • ExceptionCode를 멤버 변수로 지정하여 생성자를 통해서 좀 더 구체적인 예외정보 제공
    상위 클래스인 RuntimeException의 생성자(super)로 예외 메세지 전달
  • 개발자가 의도적으로 예외를 던져야 하는 다양한 상황에서 ExceptionCode 정보만 바꿔가며 던질 수 있다.

✔ 서비스 계층에 BusinessLogicException 적용

  • 회원 정보가 존재하지 않는다는 MEMBER_NOT_FOUND 를 BusinessLogicException 생성자의 파라미터로 전달

✔ Exception Advice에서 BusinessLogicException 처리

  • 한가지 유형으로 고정된 예외를 처리할 경우에는 @ResponseStatus 로 HttpStatus를 지정해서 사용하고, 다양한 유형의 Custom Exception을 처리할 경우에는 ResponseEntity 를 사용
  • 실습 기능 추가
profile
코린이의 공부 일지

0개의 댓글