Spring Validation(유효성 검사)에 대하여 알아보기

2024. 1. 15. 22:37백엔드/Spring Boot

데이터를 전달받을 때 가장 중요한 것은 바로 올바른 형식의 데이터가 들어왔는지를 확인하는 것이라고 생각합니다. 

이번 게시글에서는 Spring boot에서 유효성 검사를 하는 방법(데이터 검증 or Validation)에 대하여 작성해보려고 합니다. 

 

# 유효성 검사(데이터 검증, Validation)

클라이언트에서 서버로 전달(@RequestBody, @RequestParam, @PathVariable)되어 들어오는 데이터에 대해 개발자가 의도한 형식의 값이 제대로 들어오는지 체크하는 과정을 뜻한다. 

데이터 검증은 여러 계층(Controller, Service...)에서 발생하게 되는데 유효하지 않은 데이터가 들어오게 된다면 MethodArgumentNotValidException 이 발생된다. 

 

# start-validation dependency

Spring boot 2.3버전 이후부터는 dependency를 추가해줘야 한다. 

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

 

# Validation 관련 어노테이션

message : 반환되는 에러 메시지를 설정 할 수 있다. 

payload : 심각도 설정 할 수 있다. 자주 사용되지 않기 때문에 문서를 참고 해서 확인해 보자

 groups : 상황별 validation 제어를 위해 사용

@NotBlank(message = "이름은 필수 입력 항목입니다.", groups = BasicValidationGroup.class)

 

🧐 Null, 공백, 빈값 검증 

공백 : " " / 빈 문자열 : ""

어노테이션 기능
@Null Null 만 허용
@NotNull 허용 : 빈 문자열, 공백 
비허용 : Null
@NotEmpty 허용 : 공백
비허용 : Null, 빈 문자열
@NotBlank 무조건 값이 존재해야 함
Null, 빈 문자열, 공백 비허용 

 

🧐 날짜 검증 

어노테이션 기능
@Past 현재(Now)보다 과거의 날짜가 입력되어야 함
@PastOrPresent 현재(Now)이거나 과거의 날짜가 입력되어야 함
@Future 현재(Now)보다 미래의 날짜가 입력되어야 함
@FutureOrPresent 현재(Now)이거나 미래의 날짜가 입력되어야 함

 

🧐 최솟값/최댓값, 참/거짓 검증

어노테이션 기능
@Min(value=) value 값 이상이면서 정수인 값 허용 , Null 값 유효
@Max(value=) value 값 이하이면서 정수인 값 허용 , Null 값 유효
@DecimalMin value 값 이상 허용 , 소숫점 허용
@DecimalMax value 값 이하 허용 , 소숫점 허용
@AssertTrue 값이 true 인지확인
@AssertFasle 값이 false 인지확인

 

🧐 범위 검증

어노테이션 기능
@Size(min=, max=) value 값 이상이면서 정수인 값 허용 , Null 값 유효, 문자열 길이 체크 가능
@Digits(integer = ,fraction = ) 정수부(integer)와 소수부(fraction)가 지정된 자리수 이하여야 함
@Length(min=, max=) 문자열의 길이가 min과 max의 사이인지 확인
@Range(min=, max=) 입력된 숫자값이 min과 max의 사이인지 확인

 

🧐 그 외

어노테이션 기능
@Email(regexp = "") Luhn 알고리즘으로 입력한 값이 이메일 형식의 데이터인지 확인, Null 값 허용
regexp에 정규표현식 지정 가능
@Pattern(regexp = "") 입력한 값이 regexp에 지정한 정규표현식을 만족하는지 확인
@CreditCardNumber(ignoreNonDigitCharacters=) 입력한 문자열이 신용카드 번호 형식인지확인
@URL(protocol=, host=, port=, regexp=, flags=) 입력한 문자열이 URL 형식인지 확인
@Valid 객체의 유효성 검사

 

 

 

 

 

 

 

 

Reference

https://docs.oracle.com/javaee/7/tutorial/bean-validation001.htm

https://docs.jboss.org/hibernate/validator/6.2/reference/en-US/html_single/#validator-defineconstraints-spec

https://hyeran-story.tistory.com/81

https://dev-coco.tistory.com/123

https://www.youtube.com/watch?v=J_7xasdHBZI&list=PLlTylS8uB2fBOi6uzvMpojFrNe7sRmlzU&index=17