Validation (유효성 검사)
- 애플리케이션의 비즈니스 로직이 올바르게 동작하기 위해 데이터를 사전 검증하는 작업
- 여러 계층에서 들어오는 데이터에 대해 의도한 형식대로 값이 들어오는지 체크하는 과정
- 프로그래밍에서 매우 중요한 부분, 가장 신경 써야 하는 것 중 하나 NullPointException 예외
- 스프링 부트에서는 계층 간 데이터 전송에 대체로 DTO 객체를 활용
→ DTO 객체를 대상으로 유효성 검사 수행
# 의존성 추가
// build.gradle
implementation 'org.springframework.boot:spring-boot-starter-validation'
// pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
# Bean Validation
- 자바 진영에서 2009년부터 제공하는 데이터 유효성 검사 프레임워크
- 어노테이션을 통해 다양한 데이터를 검증하는 기능 제공
- 유효성 검사를 위한 규칙을 도메인 모델(예:DTO) 클래스에 어노테이션을 추가하여 정의
→ 각 계층에서 도메인 모델을 사용하면서 자동으로 검증이 이루어지며, 검증 로직을 중복해서 작성하지 않아도 됨
# Hibernate Validator
- Bean Validation API의 구현체
- 스프링 부트의 유효성 검사 표준
대표적인 어노테이션
# 문자열 검증
- @Null : null인 경우만 허용
- @NotNull : null 불가
- @NotEmpty : null, 빈문자열("") 불가
- @NotBlank : null, 빈문자열(""), 공백인 문자열(" ") 불가
# 최솟값, 최댓값 검증
- @Min(value = $number) : $number 이상의 값 허용
- @Max(value = $number) : $number 이하의 값 허용
# 값의 범위 검증
- @Positive : 양수 허용
- @PositiveOrZero : 0을 포함한 양수 허용
- @Nagative : 음수 허용
- @NagetiveOrZero : 0을 포함한 음수 허용
# 시간에 대한 검증
- @Future : 현재보다 미래의 날짜 허용
- @FutureOrPresent : 현재를 포함한 미래의 날짜 허용
- @Past : 현재보다 과거의 날짜 허용
- @PastOrPresent : 현재를 포함한 과거의 날짜 허용
# 이메일 검증
- @Email : 이메일 형식 검사, 빈문자열("") 허용
# 자릿수 범위 검증
- @Digits(integer = $number1, fraction = $number2) : $number1의 정수 자릿수와 $number2의 소수 자릿수 허용
# Boolean 검증
- @AssertTrue : true 인지 체크, null 값 체크 X
- @AssertFalse : false 인지 체크, null 값 체크 X
# 문자열 길이 검증
- @Size(min = $number1, max = $number2) : $number1 이상 nubmer2 이하의 범위 허용
# 정규식 검증
- @Pattern(regexp = "$expression") : 정규식을 검사, 자바의 java.util.regex.Pattern 패키지의 컨벤션을 따름
import javax.validation.constraints.*;
public class ValidExample {
// 문자열 검증
@Null
private String nullValue;
@NotNull
private String notNullValue;
@NotEmpty
private String notEmptyValue;
@NotBlank
private String notBlankValue;
// 최솟값, 최댓값 검증
@Min(1)
private int minNumber;
@Max(100)
private int maxNumber;
// 값의 범위 검증
@Positive
private int positiveNumber;
@PositiveOrZero
private int positiveOrZeroNumber;
@Negative
private int negativeNumber;
@NegativeOrZero
private int negativeOrZeroNumber;
// 시간에 대한 검증
@Future
private LocalDate futureDate;
@FutureOrPresent
private LocalDate futureOrPresentDate;
@Past
private LocalDate pastDate;
@PastOrPresent
private LocalDate pastOrPresentDate;
// 이메일 검증
@Email
private String email;
// 자릿수 범위 검증
@Digits(integer = 3, fraction = 2)
private BigDecimal number;
// Boolean 검증
@AssertTrue
private boolean isTrue;
@AssertFalse
private boolean isFalse;
// 문자열 길이 검증
@Size(min = 3, max = 10)
private String string;
// 정규식 검증
@Pattern(regexp = "\\d{3}-\\d{4}-\\d{4}")
private String phoneNumber;
}
'프레임워크(Framework) > Spring Boot' 카테고리의 다른 글
[Spring Boot] Exception (예외 처리) (26) | 2024.04.16 |
---|---|
[Spring Boot] YAML 파일 (49) | 2024.04.15 |
[Spring Boot] ResponseEntity (49) | 2024.04.15 |
[Spring Boot] 파라미터 전달 방식 (45) | 2024.04.15 |
[Spring Boot] 개요 (24) | 2024.04.05 |