[스프링부트 #17] Spring 예외 처리 흐름

도경원's avatar
Aug 25, 2025
[스프링부트 #17] Spring 예외 처리 흐름

1. 예외 전파 기본 흐름

자바에서 try-catch로 예외를 잡지 않으면 호출한 부모 메서드로 예외가 계속 전파된다. 아무도 이 예외를 잡아주지 않으면 결국 JVM까지 도달 → 프로그램 종료된다 (오류 피범벅)

2. Spring MVC에서의 특수 상황

Spring에서는 건드릴 수 있는 가장 앞단인 Controller 계층에서 예외를 처리해야 할 것 같다. 왜냐하면DispatcherServlet은 프레임워크 내부 코드라 직접 수정 불가하기 때문이다. 그렇다고 매 컨트롤러마다 try-catch를 두는 건 너무 귀찮다…

3. 스프링이 제공하는 해결책

  • 전역 예외 처리용 어노테이션 제공한다.
    • @ControllerAdvice : 전역 예외 처리 클래스 지정
    • @ExceptionHandler : 특정 예외를 잡아 처리하는 메서드 지정
  • 이 두 가지로 모든 Controller의 예외를 한 곳에서 처리 가능하다.

4. 결론

  • 예외는 결국 제일 앞단에서 처리해야 한다.
  • Spring MVC에서는 @ControllerAdvice + @ExceptionHandler 조합을 쓰면, DispatcherServlet을 건드리지 않고도 전역 예외 처리 구현 가능하다.
  • 잡지 않으면 예외는 JVM까지 올라가서 프로그램이 종료된다.

5. 예시코드

notion image
Share article

Gyeongwon's blog