Note

[TIL] @Valid와 @Validated의 차이

by 달쿨

TIL

개요

코드 리뷰 중, 다른 팀원 분이 Controller 메서드에서 @Validated를 사용한 것을 발견했다. 보통 @Valid만 사용했기 때문에 @Validated를 처음 알게 되었고, 두 어노테이션의 차이가 궁금해졌다. 조사해보니, 똑같이 유효성 검증을 위한 어노테이션이지만 크게 Controller에서의 사용 방식과 반환되는 에러에서 차이가 있었다.

 

@Valid와 @Validated의 주요 차이점

1) Controller에서의 사용

@Valid:

  • JSR-380 표준을 따르며, 주로 요청 본문에 포함된 객체 필드 검증에 사용된다.
  • Spring MVC의 요청 객체에 사용될 때 자동으로 BindingResult와 함께 에러가 처리된다.
  • 단점: 그룹 기반 검증(Group Validation)을 지원하지 않는다.

@Validated:

  • Spring의 확장된 검증 기능을 제공하며, 그룹 기반 검증을 지원한다.
  • Controller뿐만 아니라, 서비스 계층에서의 메서드 파라미터 검증에도 사용할 수 있다.
  • AOP 기반으로 동작하기 때문에 메서드 레벨의 유효성 검증에도 적합하다.

@Validated 사용 예

@Validated는 클래스 레벨에 선언 후 다른 유효성 검사 어노테이션을 사용하면 된다.

 

2) 반환되는 에러

@Valid:

  • MethodArgumentNotValidException 

@Validated:

  • ConstraintViolationException 

반환되는 에러가 다르므로 예외 처리를 따로 해줘야 한다.

 

느낀 점

지금 하는 프로젝트에서는 @Validated 사용이 필요한 상황이 딱히 없다고 생각하지만, 기억해두고 그룹 검증이나 다른 계층에서의 유효성 검증이 필요할 때는 @Validated를 사용해야겠다고 느꼈다. 새로운 지식을 알게 되어서 좋았다.

 

블로그의 정보

note

달쿨

활동하기