본문으로 건너뛰기
Advertisement

6.2 기본 애너테이션

스프링 부트(Spring Boot)에서 빌드 도구에 spring-boot-starter-validation 의존성을 추가하면, 다양한 Bean Validation 애너테이션을 즉시 사용할 수 있습니다.

문자열 관련 애너테이션

가장 자주 사용되는 문자열 검증 애너테이션입니다. 이 세 가지의 차이를 명확히 아는 것이 중요합니다.

  • @NotNull: 필드 값이 null이 아니어야 합니다. 빈 문자열("")이나 공백(" ")은 허용됩니다.
  • @NotEmpty: null이 아니며, 길이가 0보다 커야 합니다. 즉, ""은 안 되지만 " " (공백 덩어리)은 허용됩니다. 컬렉션의 경우 크기가 0보다 커야 함을 의미합니다.
  • @NotBlank: null, 빈 문자열(""), 공백만 있는 문자열(" ")을 모두 허용하지 않습니다. 문자열 검증에서는 가장 강력하고 많이 쓰입니다.
@NotBlank(message = "제목을 입력해주세요.")
private String title;

숫자 관련 애너테이션

  • @Min(value) / @Max(value): 지정된 최소/최댓값(포함)을 검증합니다.
  • @Positive / @PositiveOrZero: 양수(> 0)인지, 혹은 0을 포함한 양수(>= 0)인지 검증합니다.
  • @Negative / @NegativeOrZero: 음수 여부를 검증합니다.
@Positive(message = "가격은 양수여야 합니다.")
private int price;

형식 및 크기 검증

  • @Email: 올바른 이메일 주소 형식인지 검사합니다.
  • @Size(min, max): 문자열의 길이, 컬렉션이나 배열의 크기가 지정된 범위 내에 있는지 확인합니다.
  • @Pattern(regexp): 지정된 정규표현식(Regex)과 일치하는지 검증합니다. 주로 비밀번호나 전화번호 형식 검사에 쓰입니다.
@Email(message = "이메일 형식이 올바르지 않습니다.")
private String email;

@Pattern(regexp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$", message = "휴대폰 번호 형식에 맞지 않습니다.")
private String phoneNumber;

DTO 클래스에 위와 같은 제약 조건을 명시한 뒤, Controller의 핸들러 메서드 파라미터로 받을 때 @Valid를 명시하면 동작합니다.

@PostMapping("/signup")
public ResponseEntity<?> signup(@Valid @RequestBody SignupRequest request) {
// 검증을 통과한 유효한 데이터만 이 영역으로 진입함
return ResponseEntity.ok().build();
}
Advertisement