본문 바로가기
Backend/Spring

Java Validation, Spring Validation

by unknownomad 2024. 3. 25.

Java Validation (JSR-303/JSR-380)

  • Java Bean Validation 표준을 따름
  • 객체의 필드에 대해 유효성 검사를 선언적으로 설정할 수 있음
  • 주요 애노테이션(@NotNull, @Size, @Email 등)을 사용하여 필드의 제약 조건을 정의하고, 이를 Validator를 사용하여 실행할 수 있음

주요 특징

  • 객체의 각 필드에 유효성 검사를 적용하는 애노테이션 기반의 방법
  • @NotNull, @Size, @Min, @Max, @Email 등 다양한 기본 애노테이션 제공
  • 커스텀 유효성 검사 가능
  • Java SE 환경에서도 사용 가능하며, Spring과 같은 다른 프레임워크와 통합 가능

Java Validation 샘플 코드

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;
import java.util.Set;

public class User {

    @NotNull(message = "Name cannot be null") // null 값이 될 수 없는 필드
    private String name;

    @Email(message = "Invalid email format") // 유효한 이메일 형식이어야 함
    private String email;

    @Size(min = 6, max = 20, message = "Password must be between 6 and 20 characters") // 길이가 6~20이어야 함
    private String password;

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public static void main(String[] args) {
        // User 객체 생성
        User user = new User();
        user.setName(null); // 유효하지 않은 값 설정
        user.setEmail("invalid-email"); // 잘못된 이메일 형식
        user.setPassword("12345"); // 비밀번호가 짧음

        // ValidatorFactory 생성
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        // 유효성 검사
        Set<ConstraintViolation<User>> violations = validator.validate(user);

        // 검증 결과 출력
        for (ConstraintViolation<User> violation : violations) {
            System.out.println(violation.getMessage());
        }
    }
}

 


Spring Validation

  • Java Validation을 바탕으로 스프링 프레임워크에 통합된 방식으로 유효성 검사를 처리
  • Spring에서는 @Valid 또는 @Validated 애노테이션을 사용하여 메서드 파라미터나 DTO의 유효성 검사를 쉽게 적용할 수 있음
  • Spring은 유효성 검사 후, BindingResult를 사용하여 결과를 처리

주요 특징

  • Spring에서 유효성 검사를 쉽게 적용할 수 있도록 @Valid와 @Validated 애노테이션을 제공
  • BindingResult를 사용하여 유효성 검사 결과를 처리할 수 있음
  • Spring MVC, REST API 등에서 폼 데이터 검증에 널리 사용됨
  • Java Validation의 기능을 활용하여 Spring 환경에서 통합적으로 유효성 검사를 수행할 수 있음

Spring Validation 샘플 코드

import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @PostMapping("/user")
    public ResponseEntity<String> createUser(@Validated @RequestBody User user, BindingResult result) {
        if (result.hasErrors()) {
            return ResponseEntity.badRequest().body("Validation failed: " + result.getAllErrors());
        }
        // 유효성 검사 통과 후 처리 로직
        return ResponseEntity.ok("User created successfully");
    }
}

 


Java Validation vs Spring Validation

특징 Java Validation Spring Validation
주요 사용 대상 독립적인 Java SE 환경에서 객체 유효성 검사 Spring Framework
(Spring MVC, Spring Boot 등)에서 유효성 검사
유효성 검사 적용 위치 객체의 필드에 애노테이션을 통해 직접 적용 메서드 파라미터나 DTO 객체에 애노테이션을 통해 적용
애노테이션 @NotNull, @Size, @Email, @Min, @Max 등 @Valid, @Validated, Java Validation 애노테이션 그대로 사용
검사 결과 처리 Validator를 사용하여 유효성 검사 후 오류 메시지 확인 BindingResult를 사용하여 유효성 검사 후 오류 메시지 처리
지원하는 환경 Java SE, Java EE, Spring 등 다양한 환경에서 사용 가능 Spring 프레임워크에서 주로 사용
유효성 검사 흐름 ValidatorFactory -> Validator -> 객체 유효성 검사 @Validated 또는 @Valid 애노테이션을 통해 유효성 검사
BindingResult로 오류 처리

정리

  • Java Validation: 객체 수준에서 선언적이고 표준화된 유효성 검사 방법을 제공하며, Java SE 환경에서도 사용할 수 있는 유연한 방법
  • Spring Validation: Spring 환경에서의 유효성 검사에 특화되어 있으며, Spring의 특징인 애노테이션 기반 처리와 BindingResult를 통해 유효성 검사 결과를 쉽게 관리할 수 있음
  • 둘의 차이점은 주로 적용되는 환경과 유효성 검사 후 결과 처리 방식에 있음. Spring 환경에서는 Spring Validation을 활용하면 더 직관적이고 간편하게 유효성 검사를 적용할 수 있음

댓글