@Validated는 Spring에서 **유효성 검사(Validation)**를 쉽게 할 수 있도록 도와주는 어노테이션입니다. 주로 입력받은 데이터가 유효한지 검사할 때 사용되며, 주로 컨트롤러나 서비스 계층에서 자주 사용됩니다.

1. 기본 개념

예를 들어, 웹 애플리케이션에서 사용자가 회원가입을 할 때 username이 반드시 입력되어야 한다면, 유효성 검사를 통해 username이 비어있거나 특정 길이를 넘지 않도록 확인하는 것이 중요합니다. 이런 검사를 @Validated와 다른 유효성 어노테이션들을 통해 자동으로 할 수 있습니다.

2. @Validated 사용법

@Validated는 클래스나 메서드에 붙여서 그 안에 있는 파라미터나 객체의 유효성을 검사합니다. 이때, @NotNull, @Size, @Min, @Max 같은 유효성 관련 어노테이션을 같이 사용해 조건을 설정할 수 있습니다.

예제

import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Validated  // 클래스에 @Validated를 붙여 유효성 검사를 활성화
public class UserService {

    public void createUser(@NotNull @Size(min = 3, max = 20) String username) {
        // username이 null이거나 3자 미만, 20자 초과면 오류가 발생
        System.out.println("Creating user: " + username);
    }
}

위 예제에서는 UserService 클래스에 @Validated를 붙여 이 클래스에서 유효성 검사를 활성화했습니다. createUser 메서드에서 username 파라미터는 @NotNull@Size(min = 3, max = 20) 조건을 가지고 있기 때문에, username이 비어있거나 3자 미만, 20자를 초과하면 Spring이 자동으로 예외를 발생시킵니다.

3. 유효성 검사 어노테이션 종류

유효성 검사에는 다양한 어노테이션을 사용할 수 있습니다.

이런 어노테이션을 @Validated와 함께 사용하면 파라미터나 객체의 값이 조건에 맞는지 쉽게 검사할 수 있습니다.

4. 유효성 검사 그룹 지정하기

경우에 따라 유효성 검사 조건을 여러 단계로 나누고 싶을 때가 있습니다. 예를 들어, 회원가입회원정보 수정 시에 요구되는 조건이 다를 수 있습니다. 이런 경우 **그룹(Group)**을 지정해 상황에 맞는 유효성 검사를 할 수 있습니다.

import javax.validation.groups.Default;

public class ValidationGroups {
    public interface CreateUser extends Default {}
    public interface UpdateUser extends Default {}
}

@Validated(ValidationGroups.CreateUser.class)
public void registerUser(@NotNull(groups = ValidationGroups.CreateUser.class) String username) {
    // 회원가입 시 필요한 유효성 검사
}

@Validated(ValidationGroups.UpdateUser.class)
public void updateUser(@NotNull(groups = ValidationGroups.UpdateUser.class) String username) {
    // 회원정보 수정 시 필요한 유효성 검사
}