@Valid와 @Validated 차이

이규훈·2024년 7월 3일

@Valid와 @Validated: 유효성 검증의 원리와 활용

Spring 기반의 웹 애플리케이션 개발에서 입력 데이터의 유효성을 검사하는 방법으로 주로 @Valid@Validated 어노테이션이 사용됩니다. 이 두 어노테이션은 각각 JSR-303 표준과 Spring 프레임워크에서 제공하는 기능을 활용하여 객체의 필드나 메소드 매개변수 등에서 유효성을 검사할 수 있습니다.

@Valid 어노테이션

@Valid 어노테이션은 JSR-303(Bean Validation) 표준 스펙에 정의되어 있으며, Spring MVC에서 주로 사용됩니다. 주요 동작 원리는 다음과 같습니다:

  1. 요청 처리 과정: 클라이언트 요청은 DispatcherServlet을 통해 컨트롤러로 전달됩니다.
  2. ArgumentResolver: 컨트롤러 메소드의 매개변수로 전달되는 객체를 생성해주는 ArgumentResolver가 동작합니다. 이 과정에서 @Valid 어노테이션이 붙어 있으면 유효성 검증을 수행합니다.
  3. 유효성 검사: 객체를 생성할 때 @Valid 어노테이션이 적용된 필드에 대해 자동으로 유효성 검사가 진행됩니다.
  4. 제한 사항: @Valid 어노테이션은 주로 컨트롤러 내에서 동작하며, 다른 계층에서는 사용할 수 없습니다.

아래는 간단한 예시 코드입니다:

@RestController
@RequestMapping("/api/users")
public class UserController {

    @PostMapping("/register")
    public ResponseEntity<String> registerUser(@Valid @RequestBody UserDTO userDTO) {
        // 유효성 검사 후 처리 로직
        return ResponseEntity.ok("User registered successfully");
    }
}

@Validated 어노테이션

@Validated 어노테이션은 Spring 프레임워크에서 제공하는 기능으로, 보다 세밀한 유효성 검증을 지원합니다. 주요 특징은 다음과 같습니다:

  1. Spring AOP 기반 유효성 검증: @Validated 어노테이션은 AOP(Aspect-Oriented Programming)을 기반으로 동작하여, 메소드 호출 시점에 유효성 검사를 수행할 수 있습니다.
  2. 제약 조건: @Validated는 JSR-303과 달리 메소드 매개변수나 클래스 레벨에서만 사용할 수 있습니다.
  3. Spring 빈에서 활용: 스프링 빈에서 @Validated를 사용하여 객체의 유효성을 검증할 수 있습니다.

아래는 @Validated 어노테이션을 사용한 예시 코드입니다:

@Service
@Validated
public class UserService {

    public void updateUser(@NotNull Long userId, @Validated UserDTO userDTO) {
        // 유효성 검사 후 처리 로직
    }
}

결론

Spring 기반 애플리케이션에서는 @Valid@Validated 어노테이션을 통해 간편하고 효과적으로 입력 데이터의 유효성을 검사할 수 있습니다. 주의할 점은 @Valid는 주로 컨트롤러에서 사용하고, @Validated는 Spring 빈에서 세밀한 유효성 검사를 위해 활용한다는 점입니다. 올바른 어노테이션의 선택과 사용으로 안정적인 웹 애플리케이션 개발에 기여할 수 있습니다.

profile
개발취준생

0개의 댓글