API 를 작성하다보면 요청을 받는 DTO 에 대한 유효성 검증을 해야한다. 값이 없어도 되는 필드가 있는 반면, 값이 꼭 필요한 필드가 있다. nullable
에 대한 유효성 검증은 다양한 방법으로 할 수 있는데, Controller 레벨에서 조건문을 활용할 수도 있고 Objects
또는 Collections
의 유틸 함수를 활용할 수도 있다. @NotEmpty
, @NotBlank
, @NotNull
라는 표준 Validation 을 활용할 수도 있는데, 유사하지만 다른 역할을 하는 3개의 Validation 에 대해 정리해보고자 한다.
Bean Validation
Bean Validation 자파 기술 표준으로 유효성 검증 어노테이션과 인터페이스의 모음이다. 이 인터페이스 모음을 구현하여 우리가 자주 사용하는 구현체는 Hibernate Validator 이다.
에서 제공하는 표준 Validation 으로 사용을 하기 위해서는 별도 의존성을 추가해주어야 한다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
의존성을 추가하게 되면 validation 인터페이스를 불러오게 되며 Hibernate Validator 구현체가 동작할 수 있다.
@NotNull
오로지 null
체크만 한다. 따라서 null
이 아니면 검증 통과, null
이면 검증을 통과하지 못한다. 문자열 값이 ""
이나 " "
처럼 빈 string
은 null
이 아니기 때문에 검증을 통과하게 된다.
@NotEmpty
@NotNull 보다 조금 더 강력해진 검증으로 ""
까지 확인한다. 단, " "
처럼 스페이스만으록 구성된 문자열은 통과한다.
@NotBlank
@NotBlank 는 3개의 어노테이션 중 가장 강력하며 " "
까지 확인한다.
어노테이션 비교
String a = null
; 인 경우에는 @NotNull
이 아니기 때문에 유효성 검증에 실패한다.
@NotNull | @NotEmpty | @NotBlank | |
Case 1. String a = null; | FALSE | FALSE | FALSE |
Case 2. String b = ""; | TRUE | FALSE | FALSE |
Case 3. String c = " "; | TRUE | TRUE | FALSE |
Case 4. String d = "Hello World"; | TRUE | TRUE | TRUE |
'스프링' 카테고리의 다른 글
[스프링] JUnit5, AssertJ, Mockito 기반 테스트 환경 구축하기 (0) | 2023.02.06 |
---|---|
[스프링] 스프링에서 관리하는 자바 객체, 빈 (Bean) (0) | 2023.02.03 |
[스프링] 프로그래밍 방식의 트랜잭션 관리 방법 (0) | 2023.02.03 |
[스프링] 스프링의 역사 (0) | 2023.02.02 |
[스프링] 트랜잭션과 스프링의 @Transactional (0) | 2023.02.02 |
댓글