GlobalExceptionHandler - xx10222/selab-todo-list GitHub Wiki
- 전역 처리 -
@ControllerAdvice
- 컨트롤러 단에서 처리 -
@ExceptionHandler
- 메소드 단위 처리 -
try/catch
Controller를 작성할 때 예외 상황을 고려하며 처리하는 작업이 늘어남에 따라, Spring MVC에서는 @ExceptionHandler
와 @ControllerAdvice
를 이용하여 처리하고 ResponseEntity를 이용하여 예외 메시지를 구성한다
-
@Controller
와@RestController
가 적용된 Bean 내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다 - Controller가 호출하는 Service에서 발생한 예외도 잡아낸다
- AOP를 이용하여 공통적인 예외사항에 별도로 @ControllerAdvice를 이용하여 분리한다
-
@ExceptionHandler
가 하나의 클래스에 대한 것이라면,@ControllerAdvice
는 모든 @Controller, 즉 전역에서 발생할 수 있는 예외를 잡아주는 어노테이션이다 - 여기서
@RestControllerAdvice
는 @ControllerAdvice와 같은 역할을 수행하며 @ResponseBody를 통해 객체를 리턴할 수도 있다 - @ControllerAdvice는 해당 객체가 스프링 컨트롤러에서 발생하는 예외를 처리하는 존재임을 명시하는 용도로 사용하고, @ExceptionHandler는 해당 메서드가 들어가는 예외 타입을 처리하는 것을 의미한다
표준 예외를 적극적으로 사용하자
- 커스텀 예외의 이름만 봐도 어떤 예외인지 알아보기 좋다
- 그러나 표준 예외를 사용하고 errorMessage 로 오류 상황을 나타내는 정도로도 충분히 표현이 가능하다면, 굳이 커스텀 예외를 사용하지 않는 것이 좋다
- 반대로 CustomException을 받는 곳에서 처리하기 쉽도록 추가로 에러에 관한 정보를 넣어주거나, 여러 타입의 Exception이 발생할 수 있는 코드에서 한가지로 Exception 타이븡로 묶어 처리할 때는 custom exception을 사용할만 하다
표준 예외를 사용하면 가독성이 높아진다
-
NullPointerException
: null을 허용하지 않는 메서드에 null을 건냈을 때 -
IndexOutBoundsException
: 범위 밖의 index에 접근할 때 -
IllegalArgumentException
: 허용하지 않는 값이 인수로 건네졌을 때 -
IllegalStateException
: 객체가 메서드를 수행하기에 적절하지 않은 상태일 때 -
UnsupportedOperationException
: 요청받은 작업을 지원하지 않는 경우 일 때
출처
https://w97ww.tistory.com/74
https://springboot.tistory.com/33