Backend/SpringBoot

@Valid, @Validated

Dean83 2025. 11. 3. 14:27

두개 모두 인자값 검증에서 사용되나 차이점이 있다. 

 

  • @Valid
    • Java 표준이다. 
    • DTO, Entitiy 등 검증에는 사용할 수 있으나, 단순 메서드 인자값 검증에는 사용할 수 없다. 
    • 그룹 기능을 사용 할 수 없다.  
    • 대부분 컨트롤러의 입력값 검증에 주로 사용
  • @Validated
    • Spring Framework 전용이다. 
    • @Valid 외, 단순 메서드 인자값 검증에 사용할 수 있다. 
    • 그룹 기능을 사용 할 수 있다. 
    • 그룹, 메서드 인자값 검증에 주로 사용

 

그룹 기능에 대해 예를들자면, 

public interface CreateGroup {}
public interface UpdateGroup {}

public class UserDto {
    @NotBlank(groups = CreateGroup.class)
    private String name;

    @Email(groups = {CreateGroup.class, UpdateGroup.class})
    private String email;
}

...

@PostMapping("/users")
public ResponseEntity<String> createUser(@Validated(CreateGroup.class) @RequestBody UserDto dto) {
    return ResponseEntity.ok("OK");
}

이와 같이 그룹을 두어 같은 그룹에 있는 값을 검증 하는 것을 말한다. 

 

 

단순 메서드 인자값 검증의 예를들면 아래와 같다.

@Service
@Validated
public class MyService {

    public void process(@Min(5) int count) {
        // count < 5 면 ConstraintViolationException 발생
    }
}

 

@Validated 가 좀 더 상위개념이라 이것만 사용해도 되나, 코드 간결성이나 표준을 위해서 적절한 경우 @Valid를 사용하는게 좋아 보이고, 그 외에 @Validated 가 꼭 필요한 경우에 사용하면 좋을듯 하다

'Backend > SpringBoot' 카테고리의 다른 글

각종 설정 오버라이드 (WebMvcConfigurer)  (0) 2025.11.07
Admin 페이지 설정하기  (0) 2025.11.05
@JoinTable  (0) 2025.10.31
BaseEntity 사용 및 time 정보 자동 생성  (0) 2025.10.31
Custom Annotation (Custom validation)  (0) 2025.10.29