예외 처리

MONA·2024년 3월 18일

나혼공

목록 보기
16/92

예외 처리

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

  1. @ControllerAdvice
    모든 controller에서 발생할 수 있는 예외 처리
  2. @ExceptionHandler
    특정 controller의 예외 처리

@ControllerAdvice로 모든 컨트롤러에서 발생할 예외 정의 -> @ExceptionHandler로 발생하는 예외마다 처리할 메소드 정의

예외 클래스

모든 예외 클래스는 Throwable class를 상속받고 있다.
예외 클래스 중 RuntimeException은 unchecked exception
그 외 예외 클래스는 checked exception이다.

  1. checked exception
    반드시 예외 처리가 필요함. 컴파일단계에 확인.
    예외 발생 시 트랜젝션 롤백 x
    IOException, SQLException ...
  2. unchecked exception
    명시적 처리 강제x. 실행 중 단계에서 확인.
    예외 발생 시 트랜젝션 롤백 o
    NullPointerException, Illegal ArgumentException, IndexOutOfBoundException, SystemException ...

@RestControllerAdvice

@ControllerAdvice
Spring 제공 어노테이션. @Controller나 @RestController에서 발생하는 예외를 한 곳에서 관리, 처리할 수 있게 하는 어노테이션
에러 처리 할 패키지 범위를 설정할 수 있다. 기본값은 모든 Controller

@RestControllerAdvice
예외 발생 시 json 형태로 결과 반환해주는 어노테이션

@ExceptionHandler

예외 처리 상황 발생 시 처리할 handler 명시하는 어노테이션
어떤 에러 클래스를 처리할건지 설정할 수 있음(@ExceptionHandler(--Exception.class))
Exception.class는 최상위 클래스로. 하위 세부 예외 처리 클래스로 설정한 핸들러 존재 시 해당 핸들러로 우선 처리한다. 그 외 해당사항이 없는 예외는 Exception.class에서 처리

@ControllerAdvice로 설정된 클래스 내에서 메소드로 정의할 수 있지만, 각 controller 안에 설정도 가능하다.

전역 설정(@ControllerAdivce)보다 지역설정(Controller)로 정의한 handler가 우선순위를 가진다.

참고 영상 https://youtu.be/nyN4o9eXqm0?si=E9-EDij68_Gt_LNu

profile
고민고민고민

0개의 댓글