본문 바로가기

Spring/SpringBoot

@SpringBoot- @NotNull VS @Column(nullable=false)

공통점

우선 @Column(nullable = false)을 사용할 때와 마찬가지로 @NotNull 역시 테이블 생성시 NOT NULL DDL이 입력된다. 이는 Hibernate가 @NotNull 어노테이션 역시 해석할 수 있기 때문이다.

차이점

본격적인 차이로, @Column(nullable = false)는 JPA가 만든 엔티티의 필드 값이 null로 채워진 상태에서도 정상적으로 수행되다가 데이터베이스 쪽으로 SQL 쿼리가 도착한 순간에 테이블 컬럼의 NOT NULL 옵션에 의해 예외가 발생된다.

그러나 @NotNull 어노테이션은 데이터베이스 쪽으로 SQL 쿼리가 보내지기 전에, 정확히는 JPA가 만든 엔티티의 필드 값이 null로 채워지는 순간에 예외가 던져진다.

즉 @NotNull 어노테이션이 보다 더 빠른 단계에서 같은 예외를 검출하므로, 더 안전하다고 볼 수 있겠다.

단, JPA(Hibernate)를 이용한 Entity화 시킨게 아닌 객체라면 @NotNull 어노테이션을 해석하지 못한다. 이는 어노테이션 자체는 주석일뿐, 해석하는 주체에 따라 기능이 달라지는 어노테이션의 특성을 생각해보면 곧장 이해하기 수월하다.

결론

귀찮으면 @Column(nullable = false)를 사용하자.

'Spring > SpringBoot' 카테고리의 다른 글

SpringBoot- @DeleteMapping  (0) 2023.08.26
SpringBoot-JPA에서 DTO로 바로 조회하기  (0) 2023.07.07
SpringBoot- 패치 조인 최적화  (0) 2023.07.06
SpringBoot- API  (0) 2023.07.04
SpringBoot- @Valid, @ResponseBody, @RequestBody  (0) 2023.06.28