![[스프링부트 #17] Spring 예외 처리 흐름](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog-custom%3Ftitle%3D%255B%25EC%258A%25A4%25ED%2594%2584%25EB%25A7%2581%25EB%25B6%2580%25ED%258A%25B8%2B%252317%255D%2BSpring%2B%25EC%2598%2588%25EC%2599%25B8%2B%25EC%25B2%2598%25EB%25A6%25AC%2B%25ED%259D%2590%25EB%25A6%2584%26tag%3DTemplate%2B1%26description%3D%26template%3D3%26backgroundImage%3Dhttps%253A%252F%252Fsource.inblog.dev%252Fog_image%252Fdefault.png%26bgStartColor%3D%252323ec86%26bgEndColor%3D%252323ec86%26textColor%3D%2523000000%26tagColor%3D%2523000000%26descriptionColor%3D%2523000000%26logoUrl%3D%26blogTitle%3DGyeongwon%2527s%2Bblog&w=2048&q=75)
1. 예외 전파 기본 흐름
자바에서
try-catch
로 예외를 잡지 않으면 호출한 부모 메서드로 예외가 계속 전파된다. 아무도 이 예외를 잡아주지 않으면 결국 JVM까지 도달 → 프로그램 종료된다 (오류 피범벅)2. Spring MVC에서의 특수 상황
Spring에서는 건드릴 수 있는 가장 앞단인 Controller 계층에서 예외를 처리해야 할 것 같다. 왜냐하면DispatcherServlet은 프레임워크 내부 코드라 직접 수정 불가하기 때문이다. 그렇다고 매 컨트롤러마다 try-catch를 두는 건 너무 귀찮다…
3. 스프링이 제공하는 해결책
- 전역 예외 처리용 어노테이션 제공한다.
@ControllerAdvice
: 전역 예외 처리 클래스 지정@ExceptionHandler
: 특정 예외를 잡아 처리하는 메서드 지정
- 이 두 가지로 모든 Controller의 예외를 한 곳에서 처리 가능하다.
4. 결론
- 예외는 결국 제일 앞단에서 처리해야 한다.
- Spring MVC에서는
@ControllerAdvice
+@ExceptionHandler
조합을 쓰면, DispatcherServlet을 건드리지 않고도 전역 예외 처리 구현 가능하다.
- 잡지 않으면 예외는 JVM까지 올라가서 프로그램이 종료된다.
5. 예시코드

Share article