Spring Boot) 예외 처리 (Exception) | @ControllerAdvice, @ExceptionHandler

나나·2022년 4월 1일
0

스프링 부트

목록 보기
10/12
post-thumbnail

스프링 부트의 예외 처리 방식

스프링 부트의 예외 처리 방식에는 크게 두 가지가 있다.

  • @ControllerAdvice를 통한 모든 Controller에서 발생할 수 있는 예외 처리
  • @ExceptionHandler를 통한 특정 Controller의 예외 처리

한마디로, @ControllerAdvice로 모든 컨트롤러에서 발생할 예외를 정의하고 @ExceptionHandler를 통해 발생하는 예외마다 처리할 메소드를 정의하는 것이다.

예외 클래스

모든 예외 클래스는 Throwable 클래스를 상속받고 있다.

Exception은 수많은 자식 클래스를 가지고 있다.

그 중 RuntimeException은 Unchecked Exception이며, 그 외 Exception은 모두 Checked Exception으로 볼 수 있다.

Checked ExceptionUnchecked Exception
처리여부반드시 예외 처리 필요명시적 처리 강제하지 않음
확인시점컴파일 단계실행 중 단계
예외발생 시 트랜잭션롤백X롤백O
대표 예외IOException, SQLExceptionNullpointerException, IllegalArgumentException, IndexOutOfBoundException, SystemException

@ControllerAdvice, @RestControllerAdvice

Spring에서 제공하며, @Controller나 @RestController에서 발생하는 예외를 한 곳에서 관리하고 처리할 수 있게 하는 어노테이션이다.

설정을 통해 범위 지정이 가능하며, Default 값으로는 모든 Controller에 대해 예외 처리를 관리한다.

💡 예외 발생 시 json의 형태로 반환하기 위해서는 @RestControllerAdvice를 사용하면 된다.

@ExceptionHandler

예외 처리 상황이 발생하면 해당 Handler로 처리하겠다고 명시하는 어노테이션이다.

해당 어노테이션 뒤에 괄호를 붙여 어떤 ExceptionClass를 처리할지 설정할 수 있다. (Ex. @ExceptionHandler(OOException.class))

Exception.class는 최상위 클래스로, 하위 세부 예외 처리 클래스로 설정한 핸들러가 존재한다면 그 핸들러가 우선처리하게 되며 처리 되지 못하는 예외 처리에 대해서는 ExceptionClass에서 핸들링한다.

@ControllerAdvice로 설정된 클래스 내에서 메서드로 정의할 수 있으나 각 Controller 안에서도 설정이 가능하다.

💡 우선순위 → 전역설정보다 지역설정으로 정의된 Handler가 우선순위를 가진다.

참고)
어라운드허브 스튜디오

profile
코린이의 둥당둥당 개발일지

0개의 댓글