스프링 부트의 예외처리 방식은 크게 2가지가 존개
@ControllerAdvice로 모든 컨트롤러에서 발생할 예외를 정의하고,
@ExceptionHandler를 통해 발생하는 예외 마다 처리할 메소드를 정의

@ControllerAdvice는 Spring에서 제공하는 어노테이션
@Controller나 @RestController 에서 발생하는 예외를 한 곳에서 관리하고 처리할 수 있게 하는 어노테이션
설정을 통해 범위 지정이 가능하며, Default 값으로 모든 Controller에 대해 예외 처리를 관리함
예외 처리 상황이 발생하면 해당 Handler롤 처리하겠다고 명시하는 어노테이션
어노테이션 뒤에 괄호를 붙여 어떤 ExceptionClass를 처리할지 설정할 수 있음
Exception.class 최상위 클래스로 하위 세부 예외 처리 클래스로 설정한 핸들러가 존재하면, 그 핸들러가 우선 처리하게 되며, 처리 되지 못하는 예외 처리에 대해 ExceptionClass에서 핸들링함
@ControllerAdvice로 설정된 클래스 내에서 메소드로 정의할 수 있지만, 각 Controller 안에 설정도 가능
전역 설정(@ControllerAdvice)보다 지역 설정(Controller)으로 정의한 Handler가 우선순위를 가짐

