Spring에서 validation 라이브러리는 API 메서드의 파라미터로 들어오는 사용자의 입력값에 대해 검증할 수 있는 수단을 제공하는 라이브러리 이다.
대표적으로 @NotNull
@NotBlank
@NotEmpty
어노테이션을 이용하여 Null체크를 주로 수행하여, 필수적으로 입력되어야 하는 값이 비어 비즈니스 로직에 에러가 발생하는 상황을 방지할 수 있다.
또한, 조건을 만족하지 못하는 상황에 대하여 오류메시지를 제공하기 때문에
dependencies {
// 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-validation'
}
@PostMapping
public ResponseEntity<?> addUser(@Valid @RequestBody User user){
// do something
}
Controller 설정은 간단하다. 입력으로 들어오는 파라미터를 검증하고 싶은 부분에 @Valid
어노테이션을 추가해주면 된다
public class User {
@NotNull(message = "아이디는 Null일 수 없습니다")
@Size(min = 8, max = 20, message = "이름은 8~20자 입니다")
private String username;
@NotNull(message = "패스워드는 Null일 수 없습니다")
@Min(10)
private String password;
@Email
private String email;
}
@NotNull
: Null만 허용하지 않음, ""
또는 " "
는 허용@Size
: 파라미터의 최소, 최대 크기를 지정, message 속성을 통해 범위를 벗어나는 경우 message를 담아 예외를 던질 수 있음@Min
@Max
: @Size
에서 min, max 속성이랑 같으며, message 속성을 사용할 수 있다.@Email
: 이메일 형식이 아닌 경우 예외를 던지도록 설정 가능이외에 자세한 스펙은 https://beanvalidation.org/2.0/spec/ 에서 확인이 가능다.
@NotNull
, @NotEmpty
, @NotBlank
의 차이점이 3가지 어노테이션의 사용법은 매우 유사하지만 중요한 차이가 존재한다.
이름 그대로 Null만 허용하지 않는다. 그렇기 때문에 ""
이나 " "
은 허용하게 된다. 그렇기 때문에 ""
(초기화 된 String)이나 " "
(공백)을 허용하지 않는다면 사용하면 안되는 어노테이션이다.
즉, Null이 입력으로 들어왔을때 로직에 오류나 문제가 생길경우 사용해야 한다.
null
과 ""
둘 다 허용하지 않는다.
즉, @NotNull
에 ""
조건이 추가된 것이다. 그렇기 때문에 @NotEmpty
는 null
과 ""
은 검증 단계에서 막히지만 공백 문자인 " "
은 통과하게 된다.
@NotEmpty
의 조건에 " "
(공백) 까지 허용하지 않는 어노테이션 이다.
위 3가지의 어노테이션 중 가장 강한 validation 규칙을 적용하고 있다고 할 수 있다.
spring에서 입력값 검증을 지원하는 라이브러리인 validation라이브러리와 함께, 헷갈릴 수 있는 3가지 어노테이션의 차이점을 알아보았다.
앞으로 validation을 위한 라이브러리로 spring-boot-starter-validation 라이브러리를 사용하면서 사용법이 헷갈려 로직에러 및 오류가 발생하지 않도록 주의하는 것은 물론, 상황에 맞는 어노테이션을 사용하면 로직 에러 및 시스템 오류를 최소화 할 수 있을 것이다.