RequestBody 객체 검증하기

·2023년 7월 14일
0

프로젝트 공부

목록 보기
13/33

요약
@NotNull을 쓰자! -> 일정 버전 이후에는 @NonNull 사용해야하는듯
@Id, 연관관계 매핑키에는 안써도 되는듯..?

참고하기 좋은 사이트 - 🔗@Valid 를 이용해 @RequestBody 객체 검증하기

엔티티의 필드에 NotNull을 설정해주는 어노테이션

NotNull

  • NotNull은 반드시 값이 있어야 한다.

장점

  • 의도치 않게 엔티티에 잘못된 값을 넣어도, Repository에 저장할 때 예외를 발생시켜 더 큰 문제를 막을 수 있다.
  • @NotNull 어노테이션을 통해 @Column의 nullable을 대체할 수 있다.
    다른 사람이 코드를 봤을 때, 어떤 제약 조건이 있는지 파악하기 쉽다.
    단점
  • 코드가 더러워 보인다

NonNull

  • NonNull: 데이터값이 Null이면 안된다. Null이면 에러를 반환한다.
  • @NonNull 어노테이션이 필드에 Null 값이 주입될 경우 NullPointerException이 던져진다
  • @NonNull 은 org.springframework.lang 패키지에 있는 Spring5 부터 지원하는 어노테이션

NotEmpty

  • NotEmpty는 반드시 값이 존재하고 길이 혹은 크기가 0보다 커야한다

NotBlank

  • NotBlank는 반드시 값이 존재하고 공백 문자를 제외한 길이가 0보다 커야 한다.

@NotBlank와 @NotEmpty는 특별한 경우에만 사용

@NotBlank와 @NotEmpty는 not null 옵션이 없다. 따라서 일반적으로 사용하지 않는 것이 좋다.
만약 JPA의 DDL 자동생성을 사용하지 않지만, 엔티티의 값을 검증하고 싶다면 문자열에 한해서는 @NotBlank와 @NotEmpty가 유리할 수 있다.
(예 : flyway를 이용해 DB 쿼리를 관리해서 DDL 자동 생성을 쓰지 않는 경우)

@Column(nullable=false) vs @NotNull

@Column 속성을 이용한 @Column(nullable=false)는 DDL 생성시에 not null 이라는 조건이 붙은 채로 생성된다. @NotNull과 기능은 비슷하나 @NotNull를 추천한다.

@NotNull 어노테이션을 쓰면, 데이터베이스에 SQL 쿼리를 보내기 전에 예외가 발생한다.

JPA의 Repository 인터페이스가 잘못된 Entity를 저장할 때, ConstraintViolationException을 발생시킨다.
(그 때문에, @Valid나 @Validated 없이도 엔티티를 자연스럽게 검증할 수 있다)

그러나 nullable=false 로 @Column 어노테이션에 속성을 붙이면,

null을 넣은 엔티티를 생성하면 생성이 된 뒤 Repository에 전달되고,

이 값이 DB에 넘어간 뒤에 예외가 발생해 위험한 오류를 맞을 수 있다.

참고
[JPA] nullable=false와 @NotNull 비교, Hibernate Validation
@NotNull vs @Column(nullable=false)
[JPA] nullable=false와 @NotNull 비교, Hibernate Validation

profile
개발자가 되고싶은 낭랑 24세

0개의 댓글

관련 채용 정보