@ExceptionHandler 를 통해 다양한 예외 상황을 처리할 수 있지만, 이렇게 설정한 하나 이상의 메서드가 하나의 컨트롤러에 종속되므로 코드의 중복이 발생하게 되는 한계가 있다.

@RestControllerAdvice 를 사용하면 컨트롤러에서 공통으로 적용될 수 있는 예외처리를 할 수 있다. 글로벌 예외 처리라고도 한다.

<aside> 📌 적용할 수 있는 어노테이션은 @Init-Binder, @ModelAttribute, @ExceptionHandler 이나 앞의 두 어노테이션은 SSR 템플릿을 이용할 때 사용하는 기능이다. REST API 기반의 개발에서는 CSR을 사용하게 되므로 필요한 경우가 아닌 이상 이 두 어노테이션은 잘 사용하지 않게 된다.

</aside>

글로벌 예외처리를 위한 클래스 선언

먼저 기존에 컨트롤러 내부에 작성했던 메서드를 제거하고 새로운 클래스를 하나 선언하고, @RestControllerAdvice를 붙인다.

import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionAdvice {

}

@RestControllerAdvice