[Spring] Spring Boot validation을 이용한 파라미터 값 검증

AlBan·2021년 5월 6일
0

Spring

목록 보기
3/13

Spring에서 validation 라이브러리는 API 메서드의 파라미터로 들어오는 사용자의 입력값에 대해 검증할 수 있는 수단을 제공하는 라이브러리 이다.

대표적으로 @NotNull @NotBlank @NotEmpty 어노테이션을 이용하여 Null체크를 주로 수행하여, 필수적으로 입력되어야 하는 값이 비어 비즈니스 로직에 에러가 발생하는 상황을 방지할 수 있다.

또한, 조건을 만족하지 못하는 상황에 대하여 오류메시지를 제공하기 때문에

Bean Validation 사용법

의존성 추가

dependencies {
	// 의존성 추가
	implementation 'org.springframework.boot:spring-boot-starter-validation'
}

Controller 설정

@PostMapping
public ResponseEntity<?> addUser(@Valid @RequestBody User user){
	// do something
}

Controller 설정은 간단하다. 입력으로 들어오는 파라미터를 검증하고 싶은 부분에 @Valid 어노테이션을 추가해주면 된다

Entity 설정

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가지 어노테이션의 사용법은 매우 유사하지만 중요한 차이가 존재한다.

@NotNull

이름 그대로 Null만 허용하지 않는다. 그렇기 때문에 ""이나 " "은 허용하게 된다. 그렇기 때문에 ""(초기화 된 String)이나 " "(공백)을 허용하지 않는다면 사용하면 안되는 어노테이션이다.
즉, Null이 입력으로 들어왔을때 로직에 오류나 문제가 생길경우 사용해야 한다.

@NotEmpty

null"" 둘 다 허용하지 않는다.
즉, @NotNull"" 조건이 추가된 것이다. 그렇기 때문에 @NotEmptynull""은 검증 단계에서 막히지만 공백 문자인 " "은 통과하게 된다.

@NotBlank

@NotEmpty의 조건에 " "(공백) 까지 허용하지 않는 어노테이션 이다.

위 3가지의 어노테이션 중 가장 강한 validation 규칙을 적용하고 있다고 할 수 있다.

결론

spring에서 입력값 검증을 지원하는 라이브러리인 validation라이브러리와 함께, 헷갈릴 수 있는 3가지 어노테이션의 차이점을 알아보았다.
앞으로 validation을 위한 라이브러리로 spring-boot-starter-validation 라이브러리를 사용하면서 사용법이 헷갈려 로직에러 및 오류가 발생하지 않도록 주의하는 것은 물론, 상황에 맞는 어노테이션을 사용하면 로직 에러 및 시스템 오류를 최소화 할 수 있을 것이다.

profile
[Spring, React를 공부하는 끈질긴 개발자 지망생] 잊어버리지 않도록! 정리 또 정리!

0개의 댓글