일반적인 데이트 검증은 여러 계층에 걸쳐서 이루어지는데 동일한 내용의 검증 로직이 계층별로 구현되면 데이터 낭비가 발생하고 각 계층별로 검증 로직 간의 불일치로 오류가 발생할 수 도 있다
이를 해결하기 위해 데이터 검증을 위한 로직을 도메인 모델 자체에 묶어서 표현하는 방법으로
java에서 Bean Validation이라는 이름의 Annotation을 데이터 검증을 위한 메타데이터로 사용하는 방법을 제시한다
Bean Validation란 ?
- 특정한 구현체가 아닌 Bean Validation 이라는 기술 표준
- JAP가 표준 기술이고 그 구현체로 hibernate가 있는 것 처럼 Bean Validation 또한 검증 annotation과 여러 인터페이스의 모음
- 대표적인 구현체 - hibernate validator
- 적용을 위해 build.gradle에 implementation 'org.springframework.boot:spring-boot-starter-validation' 포함
hibernate validator
- Annotation을 사용하여 표준화된 방식으로 유효성 검사 규칙을 표현하고 다양한 프레임 워크와 통합할 수 있다.
- 애플리케이션 제약 조건을 표현하고 검증 가능
- 기본 메타데이터 소스는 XML을 사용하여 재정의하고 확장할 수 있는 기능이 있는 Annotain
- 특정 애플리케이션 계층 또는 프로그래밍 모델에 연결되지않으며 서버 및 클라이언트 애플리케이션 프로그래밍 모두에 사용 가능
사용 예시 )
@Size(min = 4,max = 10,message ="아이디의 길이는 4자에서 10자 사이입니다")
@NotBlank
@NotNull
@Pattern(regexp = "[a-z0-9]*$",message = "아이디 형식이 일치하지 않습니다")
private String username;
Stinrg username의 길이는 4~10 / 형식은 소문자,숫자(0~9)로 이루어지게 설정
@Size - 문자의 길이 설정
@NotNull - Null 불가능
@NotBlank - Null, 빈 문자열, 빈 문자가 포함된 문자열 불가능
@Pattern - 정규표현식 적용
@Max(40)
@Min(20)
@Positive
@Negative
private int age;
@Max - age의 최대값 : 40
@Min - age의 최소값 : 20
@Positive - 양수값만 가능
@Negative - 음수값만 가능
다른 검증 Annotaion 알아보기
Hibernate Validator 6.2.5.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
ex) 아이디 검증
build.gradle에 추가
username을 4~10자 사이, 소문자,숫자만 포함하게 설정 ,
username에 s 한글자 입력시 > 에러 메세지 출력
username에 대문자 포함시 > 에러 메세지 출력
형식에 맞게 입력
참고 자료
https://jaimemin.tistory.com/1884
https://medium.com/@gaemi/java-%EC%99%80-spring-%EC%9D%98-validation-b5191a113f5c
'Spring' 카테고리의 다른 글
Sping) ORM, JPA, Spring Data JPA (0) | 2022.12.07 |
---|---|
Spring) 스프링 프레임 워크 , IOC (0) | 2022.12.07 |
Spring) ResponseBody , ResponseEntity (0) | 2022.12.04 |
Spring) HttpServletRequest, HttpServletResponse (0) | 2022.12.04 |
Spring) 의존성이란? (1) | 2022.12.02 |