개발 일지/Spring

[Spring MVC] @Valid / @Validated

미숫가루설탕많이 2023. 2. 18. 16:27

 

 Spring MVC를 학습하는 도중에 @Valid와 별개로 @Validated를 추가하는 이유가 궁금해서 찾아보았다.

 

 결론부터 얘기하자면 @Valid와 @Validated를 같이 사용하는 이유는 위 코드의 CoffeeController 클래스의 모든 메서드에 대해서 Spring의 제약 조건을 사용하여 데이터 유효성 검사를 수행하기 위해서이다.

 

 

 

 


 @Valid와 @Validated 애너테이션은 모두 메서드 파라미터에 적용되며, 메서드의 파라미터로 들어오는 입력 값의 유효성 검사를 수행하는 Spring Framework 애너테이션이다.

 

 @Valid 애너테이션은 Java Bean Validation API를 사용해서 데이터 유효성 검사를 수행하는데, 만약 입력 값이 제약 조건과 일치하지 않으면 'MethodArgumentNotValidException'이 발생한다.

 

 @Validated 애너테이션은 Spring에서 제공하는 데이터 유효성 검사 기능을 확장하는 애너테이션으로, 다음과 같은 유효성 검사를 수행할 수 있다.

  • Spring의 @NotNull, @NotBlank, @NotEmpty와 같은 제약 조건을 사용하여 입력 값의 유효성 검사
  • 유효성 검사를 수행할 때, 그룹화를 사용하여 제약 조건을 구분하여 적용
  • 커스텀한 유효성 검사 애너테이션을 직접 만들어서 사용

 

 @Validated 애너테이션은 클래스 레벨에서도 사용할 수 있으며, 클래스 레벨에서 사용하면 해당 클래스의 모든 메서드에 대해 유효성 검사를 수행한다. 따라서 이러한 기능을 사용하기 위해 클래스 레벨에 @Validated 애너테이션을 추가한 것이다.

 

 만약 위 코드에서 @Validated 애너테이션을 작성하지 않으면 @Valid 애너테이션만 사용되어 입력 값의 유효성 검사가 Java Bean Validation API의 제약 조건에만 의존한다. 이런 경우에는 Spring Framework에서 제공하는 유효성 검사 기능을 사용하지 못하는 문제가 발생할 수 있다.

 

 따라서, 두 애너테이션을 사용하면 Spring Framework에서 제공하는 유효성 검사 기능과 Java Bean Validation API의 제약 조건을 모두 사용하여 더 다양한 유효성 검사를 수행할 수 있다.

'개발 일지 > Spring' 카테고리의 다른 글

[Spring] 엔티티 매핑  (0) 2023.02.23
[Spring MVC] 예외 처리  (0) 2023.02.19
[Spring MVC] @Rest + @Controller/@ControllerAdvice  (0) 2023.02.16
Spring Boot DB 오류(Failed to configure a DataSource)  (0) 2023.02.16
[Spring MVC] DTO  (0) 2023.02.15