kinggora 2022. 9. 1. 19:01

검증2 - Bean Validation

Bean Validation - 소개

검증 기능을 지금처럼 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. -> 표준화

Bean Validation 이란?

Bean Validation은 특정한 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준이다. 쉽게 이야기해서 검증 애노테이션과 여러 인터페이스의 모음이다. Bean Validation을 구현한 기술중에 일반적으로 사용하는 구현체는 하이버네이트 Validator이다. 하이버네이트가 붙었지만 ORM과는 관련이 없다.

 

Bean Validation Annotation 을 보고 Validator 가 작동하는 방식

 

@NotBlank : 빈값 + 공백만 있는 경우를 허용하지 않는다.

@NotNull : null 을 허용하지 않는다.

@Range(min = 1000, max = 1000000) : 범위 안의 값이어야 한다.

@Max(9999) : 최대 9999까지만 허용한다.

 

하이버네이트 Validator 관련 링크 공식 사이트: http://hibernate.org/validator/

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

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

Bean Validation - 시작

스프링과 통합하지 않고, 순수한 Bean Validation 사용법 부터

 

Bean Validation 의존관계 추가

implementation 'org.springframework.boot:spring-boot-starter-validation'

Jakarta Bean Validation

jakarta.validation-api : Bean Validation 인터페이스

hibernate-validator: 구현체

 

참고:

  javax.validation.constraints.NotNull

  org.hibernate.validator.constraints.Range

javax.validation 으로 시작하면 특정 구현에 관계없이 제공되는 표준 인터페이스이고, org.hibernate.validator 로 시작하면 하이버네이트 validator 구현체를 사용할 때만 제공되는 검증 기능이다. 실무에서 대부분 하이버네이트 validator를 사용하므로 자유롭게 사용해도 된다.

 

검증기 생성 및 실행

이후 스프링과 통합하면 우리가 직접 이런 코드를 작성하지는 않으므로, 이렇게 사용하는구나 정도만 참고하자.

 

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

Set<ConstraintViolation<Item>> violations = validator.validate(item); //검증 결과

 

스프링은 이미 개발자를 위해 빈 검증기를 스프링에 완전히 통합해두었다.