스프링 MVC 2편(백엔드 웹 개발 활용 기술)

Ch05. 검증(Bean Validation) - Bean Validation(시작)

webmaster 2022. 3. 16. 09:56
728x90

Bean Validation 이란?

  • 먼저 Bean Validation은 특정한 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준이다. 쉽게 이야기해서 검증 애노테이션과 여러 인터페이스의 모음이다. 마치 JPA가 표준 기술이고 그 구현체로 하이버네이트가 있는 것과 같다.
  • Bean Validation을 구현한 기술 중에 일반적으로 사용하는 구현체는 하이버네이트 Validator이다

공식 사이트: http://hibernate.org/validator/

 

The Bean Validation reference implementation. - Hibernate Validator

Express validation rules in a standardized way using annotation-based constraints and benefit from transparent integration with a wide variety of frameworks.

hibernate.org

공식 메뉴얼: https://docs.jboss.org/hibernate/validator/6.2/reference/en-US/html_single/

 

Hibernate Validator 6.2.3.Final - Jakarta Bean Validation Reference Implementation: Reference Guide

Validating data is a common task that occurs throughout all application layers, from the presentation to the persistence layer. Often the same validation logic is implemented in each layer which is time consuming and error-prone. To avoid duplication of th

docs.jboss.org

검증 애노테이션 모음: https://docs.jboss.org/hibernate/validator/6.2/reference/en-US/html_single/#validator-defineconstraints-spec

 

Index of /hibernate/validator/6.2/reference/en-US

 

docs.jboss.org

의존성 추가하기

validation 의존성을 추가로 넣어야한다.

BeanValidation TEST

@Data
public class Item {

    private Long id;

    @NotBlank
    private String itemName;

    @NotNull
    @Range(min = 1000, max = 1000000) //하이버 네이트 구현체에서만 동작한다
    private Integer price;

    @NotNull
    @Max(9999)
    private Integer quantity;

    public Item() {
    }

    public Item(String itemName, Integer price, Integer quantity) {
        this.itemName = itemName;
        this.price = price;
        this.quantity = quantity;
    }
}
public class BeanValidationTest {

    @Test
    public void beanValidation(){
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        Item item = new Item();
        item.setItemName(" "); //공백
        item.setPrice(10000);
        item.setPrice(0);

        Set<ConstraintViolation<Item>> violations = validator.validate(item);
        for (ConstraintViolation<Item> violation : violations) {
            System.out.println("violation = " + violation);
            System.out.println("violation.getMessage() = " + violation.getMessage());
        }
    }
}
  • 검증 애노테이션
    • @NotBlank : 빈 값 + 공백만 있는 경우를 허용하지 않는다.
    • @NotNull : null 을 허용하지 않는다.
    • @Range(min = 1000, max = 1000000) : 범위 안의 값이어야 한다.
    • @Max(9999) : 최대 9999까지만 허용한다.
  • 참고
    • javax.validation 으로 시작하면 특정 구현에 관계없이 제공되는 표준 인터페이스이고, org.hibernate.validator로 시작하면 하이버네이트 validator 구현체를 사용할 때만 제공되는 검증 기능이다. 실무에서 대부분 하이버네이트 validator를 사용하므로 자유롭게 사용해도 된다.

 

728x90