HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🍗
[New] 조규현팀
/
🏪
TS Store
/
🧩
Validation
🧩

Validation

Person
완료율%
상태
완료
나의 블로그
https://velog.io/@gudnr1451/Valid-%EC%A0%95%EB%A6%AC%ED%95%B4%EB%B3%B4%EA%B8%B0
Think Sharing (TS)
📝
Validation
자바 @Valid 사용해보기1. Valid를 사용하는 방법1-1 @Valid 적용시키기2. 검증 애노테이션 종류2-1 문자열 검증2-2 최대 / 최소 검증2-3 범위 검증2-4 시간 값 검증2-5 Bolean 검증2-6 크기 검증3. 자바 Valid 제공하지 않는것은 무엇일까?

자바 @Valid 사용해보기

1. Valid를 사용하는 방법

  • @Valid 애노테이션을 이용하면, 객체 안에서 들어오는 값에 대해 검증이 가능해진다.

1-1 @Valid 적용시키기

public class ProductRequest { @NotNull // 인자로 들어온 필드 값에 null 값을 허용하지 않음 private String productName; @Email // 이메일 형식에 맞춘 값이 들어와야함 private String email; } @RestController public class ProductController { @PostMapping("/api/v1/product") public Product save(@Valid @RequestBody ProductRequest productRequest) { ~~~ } }
  • 값이 올바르게 들어오지 않았다면 MethodArgumentNotValidException 예외와 400 Bad Request 상태코드를 반환하게 된다.

2. 검증 애노테이션 종류

2-1 문자열 검증

  • @NotBlack
    • null이 아닌 값
    • 공백이 아닌 문자를 하나 이상 포함해야한다.
    • 반드시 값이 존재하고 공백 문자를 제외한 길이가 0보다 커야한다.
  • @NotEmpty
    • null 이거나 empty(빈 문자열)가 아니어야 한다.
    • 반드시 값이 있어야하며 길이가 0보다 커야아한다.
  • @NotNull
    • null이 아닌 값은 어떤 타입이든 상관없다.
    • 반드시 값이 있어야함
  • @Null
    • 타입은 상관없으며 null값 허용
notion image

2-2 최대 / 최소 검증

public class MaxOrMin { @DecimalMax(value = "10000000") private BigInteger decimalMax; @DecimalMin(value = "1") private BigInteger decimalMin; @Max(value = 1000000) private Integer max; @Min(value = 1) private Integer min; }
  • @DecimalMax
    • 지정된 최댓값보다 작거나 같아야함.
  • @DecimalMin
    • 지정된 최솟값보다 크거나 같아야함.
  • @Max
    • 지정된 최댓값보다 작거나 같아야함.
  • @Min
    • 지정된 최솟값보다 크거나 같아야함.
Decimal과 기본 Max/Min의 차이는 범위 값의 차이다. String을 사용하는지 Integer를 사용하는지에 따라 범위가 달라지기 때문이다.

2-3 범위 검증

public class Range { @Positive private Integer positive; @PositiveOrZero private Integer positiveOrZero; @Negative private Integer negative; @NegativeOrZero private Integer negativeOrZero; }
  • @Positive
    • 양수인 값
  • @PositiveOrZero
    • 0이거나 양수인 값
  • @Negative
    • 음수인 값
  • @NegativeOrZero
    • 0이거나 음수인 값

2-4 시간 값 검증

public class Time { @Future private Date future; @FutureOrPresent private Date futureOrPresent; @Past private Date past; @PastOrPresent private Date pastOrPresent; }
  • @Future
    • Now 보다 미래의 날짜, 시간이어야 한다.
  • @FutureOrPresent
    • Now 거나 미래의 날짜, 시간이어야 한다.
  • @Past
    • Now 보다 과거의 날짜, 시간이어야 한다.
  • @PastOrPresent
    • Now 거나 과거의 날짜, 시간이어야 한다.

2-5 Bolean 검증

public class Bool { @AssertTrue private boolean assertTrue; @AssertFalse private boolean assertFalse; }
  • @AssertTrue
    • 항상 True 여야 한다.
  • @AssertFalse
    • 항상 False 여야 한다.

2-6 크기 검증

public class Size { @Size(max=25, min=7) private String sizeString; }
  • @Size
    • max > 값의 크기가 max보다 작거나 같아야 한다.
    • min > 값의 크기가 min보다 크거나 같아야 한다.
이 외에도 추가적인 것들이 더 있다. https://docs.jboss.org/hibernate/beanvalidation/spec/2.0/api/

3. 자바 Valid 제공하지 않는것은 무엇일까?

  • Valid는 @Validated와 다르게 그룹 유효성 검사를 지원하지 않는다는 차이점이 있다.
    • 이러한 경우에는 @Validated 애노테이션을 이용해야 한다.
public class Account { @NotNull // @NotNull(groups = BasicInfo.class) @Validated 사용 private String password; @Email // @Email(groups = BasicInfo.class) @Validated 사용 private String email; // 나중에 필드가 추가된다면? 현재 기준으로 작성되었던 테스트도 실패하게 된다. }
https://www.baeldung.com/spring-valid-vs-validated