본문 바로가기
프레임워크(Framework)/Spring Boot

[Spring Boot] Validation (유효성 검사)

by 송기동 2024. 4. 15.
728x90

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;
}

 

 

728x90

'프레임워크(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