자바에서 지원해주는 어노테이션
빈 검증기를 이용해서 객체의 제약 조건을 검증한다
모든 요청은 디스패처 서블릿을 통해 컨트롤러로 전달된다
전달 과정에서는 컨트롤러 메소드의 객체를 만들어주는 **ArgumentResolver가 동작
**하는데
@Valid도 ArgumentResolver에 의해 처리
@RequestBody는 Json 메세지를 객체로 변환해주는 작업을
ArgumentResolver의 구현체인 **RequestResponseBodyMethodProcessor가 처리
**하며
내부에서 @Valid가 있을 경우에 유효성 검사를 진행한다
오류가 난다면 MethodArgumentNotValidException 예외가 발생하고 디스패처 서블릿에
기본으로 등록된 DefaultHandlerExceptionResolver에 의해 400 에러가 발생
이러한 이유로 **@Valid는 기본적으로 컨트롤러에서만 동작
**하며 다른 계층에서는 검증이 진행되지 않음
보통 컨트롤러에서 유효성 검사를 진행하는게 가장 좋지만 그렇지 않은 경우를 위해