💡 이번 포스팅에서는 @ControllerAdvice & @RestControllerAdvice에 대해 정리해 보도록 하겠습니다.
이전에 @ControllerAdvice, @RestControllerAdvice에 대해 찾아봤던 적이 있는데, 지금 다시 보니 잘 못된 부분이 있어 다시 정리해보고자 합니다.
때는 입사한 지 얼마 안 된 신입 때였는데 @ControllerAdvice, @RestControllerAdvice를 찾을 때 공식 문서나 java docs 대신 블로그 자료를 찾았었습니다.
@ControllerAdvice를 설명할 때 ExceptionHandler와 같이 설명하는 블로그들을 쉽게 찾아볼 수 있을 것입니다.
보면 공통적으로 전역 예외 처리를 위해 @ControllerAdvice를 사용한다고 하는데요,
결론적으로 말하면 반은 맞습니다.
예. @ControllerAdvice는 전역 예외 처리를 하기 위해 사용하기도 합니다.
하지만 그게 전부는 아닙니다.
이제 정확히 @ControllerAdvice가 어떤 기능을 담당하는지, 어떻게 사용할 수 있는지 확인해 보겠습니다.
@ControllerAdvice의 설명입니다.
확인해 보면 그 어디에도 전역 예외 처리라는 내용은 언급되지 않습니다.
대신 공통, 또는 공유라는 내용이 언급되는데 이 부분 때문에 전역 예외 처리라는 글들이 파생된 것 같다고 생각합니다.
정리하면 @ControllerAdvice는 여러 @Controller에서 공유할 데이터, 초기화 코드, 예외 처리 등을 선언할 수 있도록 도와주는 annotation입니다.
모든 @Controller에서 초기화 시 동일한 코드(로직)가 실행되어야 한다면 @ControllerAdvice에 @InitBinder를 사용할 수 있습니다.
또는 모든 @Controller에서 동일한 데이터를 Model 객체에 추가해야 한다면 @ControllerAdvice에 @ModelAttribute를 사용할 수 있습니다.
그리고 앞서 설명했던 것처럼 @Controller에서 발생하는 예외를 공통적으로 처리하고 싶은 경우 @ControllerAdvice에 @ExceptionHandler를 사용할 수 있습니다.
그리고 위처럼 baseBackages를 사용하여 @ControllerAdvice가 적용될 범위도 설정할 수 있습니다.
@RestControllerAdvice의 경우 @ControllerAdvice와 동일하지만 @Controller, @RestController의 차이처럼 @ResponseBody가 추가된다는 점이 다릅니다.
'Spring > Spring Boot' 카테고리의 다른 글
@EnableWebMvc 는 조심해서 사용하자 (0) | 2023.05.31 |
---|---|
Actuator (액츄에이터) (0) | 2023.04.02 |
스프링 부트 앱에 초기화 코드를 넣는 방법 3가지 (0) | 2023.03.19 |
댓글