본문 바로가기
스프링

[스프링] @NotEmpty, @NotBlank, @NotNull 비교하기

by kdohyeon (김대니) 2023. 2. 2.
반응형

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 이면 검증을 통과하지 못한다. 문자열 값이 "" 이나 " " 처럼 빈 stringnull 이 아니기 때문에 검증을 통과하게 된다.

@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

 

반응형

댓글