피드로 돌아가기
@NotBlank vs @Column(nullable = false) vs @NotNull — Which one should you use?
Dev.toDev.to
Backend

Application과 Database 계층의 이중 제약을 통한 데이터 무결성 확보 전략

@NotBlank vs @Column(nullable = false) vs @NotNull — Which one should you use?

Babisha S2026년 4월 11일1beginner

Context

Spring Boot 환경에서 입력값 검증을 위한 @NotNull, @NotBlank, @Column(nullable = false)의 역할 혼동으로 인한 데이터 정제 누수 발생. 단순 Null 체크와 실제 유효 값 존재 여부의 차이를 구분하지 못한 설계적 한계 직면.

Technical Solution

  • Bean Validation API 기반 @NotBlank 도입을 통한 null, empty string, 공백 문자열의 동시 차단
  • Hibernate Validator의 @NotNull 적용으로 String 외 타입에 대한 Application Level의 존재 여부 검증 수행
  • JPA @Column(nullable = false) 설정을 통한 Database Schema 수준의 NOT NULL 제약 조건 강제
  • Application Level 검증과 Database Constraint를 결합한 다중 방어 체계 구축으로 데이터 무결성 강화
  • 데이터 타입과 검증 목적에 따른 어노테이션 분리 적용으로 런타임 에러 사전 방지

1. String 필드에는 @NotBlank와 @Column(nullable = false)를 함께 적용했는지 확인

2. 숫자형 필드 등 String 외 타입에는 @NotNull을 사용하여 presence 검증 수행

3. Application 검증뿐만 아니라 DB Schema 제약 조건을 통해 최후의 데이터 보루 구축

원문 읽기