@Valid

자바에서 지원해주는 어노테이션 빈 검증기를 이용해서 객체의 제약 조건을 검증한다

동작 원리

모든 요청은 디스패처 서블릿을 통해 컨트롤러로 전달된다

전달 과정에서는 컨트롤러 메소드의 객체를 만들어주는 **ArgumentResolver가 동작**하는데

@Valid도 ArgumentResolver에 의해 처리

@RequestBody는 Json 메세지를 객체로 변환해주는 작업을

ArgumentResolver의 구현체인 **RequestResponseBodyMethodProcessor가 처리**하며

내부에서 @Valid가 있을 경우에 유효성 검사를 진행한다

오류가 난다면 MethodArgumentNotValidException 예외가 발생하고 디스패처 서블릿에

기본으로 등록된 DefaultHandlerExceptionResolver에 의해 400 에러가 발생

이러한 이유로 **@Valid는 기본적으로 컨트롤러에서만 동작**하며 다른 계층에서는 검증이 진행되지 않음


@Validated

보통 컨트롤러에서 유효성 검사를 진행하는게 가장 좋지만 그렇지 않은 경우를 위해