@NotNull 과 @Colunm(nullable = false), 뭐가 다른걸까?
✨ 차이점을 한눈에
먼저, 두 어노테이션의 차이를 직관적으로 이해할 수 있도록 표로 정리해봤습니다.
항목 | nullable = false | @NotNull |
DDL 생성 | 데이터베이스에 NOT NULL 제약 조건 생성 | 기본적으로 DDL에 영향 없지만, 설정에 따라 NOT NULL 생성 가능해요. |
Null 검증 | 애플리케이션 검증 없이 데이터베이스에서 null 체크 | 데이터베이스에 가기 전, 애플리케이션에서 null을 검증해요. |
예외 발생 시점 | 삽입 쿼리 후 데이터베이스에서 예외가 터짐 | 쿼리 실행 전 애플리케이션에서 예외를 미리 잡아요. |
커스텀 메시지 | 지원 X | 예외 메시지를 원하는 대로 커스터마이징할 수 있어요! |
추가 검증 | X | @Size 같은 다른 검증과 함께 쓸 수 있어요. |
추천 사용 | 데이터베이스 제약 조건 확실히 걸고 싶을 때! | 애플리케이션 검증과 설정에 따라 데이터베이스 제약까지 원할 때! |
✨ 하나씩 풀어보기
표를 바탕으로 하나씩 설명해보겠습니다 : )
1. DDL 생성: 데이터베이스에 미치는 영향
- nullable = false: 데이터베이스에 직접적으로 "이 컬럼은 null을 용납하지 않아요!"라고 말해줍니다. 그래서 테이블 생성 시 NOT NULL 제약 조건이 딱 붙습니다.
- @NotNull: Bean Validation에서 온 어노테이션입니다. 기본적으로는 DDL에 영향을 안 주지만, hibernate.validator.apply_to_ddl=true 같은 설정을 켜면 NOT NULL 조건을 붙일 수 있습니다.
2. Null 검증: 어디서 잡히나?
- nullable = false: 애플리케이션 단계에서는 아무것도 안 해요. 데이터가 데이터베이스로 넘어가서 삽입될 때 null이면 그때서야 에러가 터집니다.
- @NotNull: 반대로, 데이터베이스에 가기 전에 애플리케이션에서 null을 잡아줘요. 코드 실행 중에 미리 문제를 알려주니까 디버깅이 한결 편해집니다 ㅎㅎ
3. 예외 발생 시점: 언제 터지냐가 중요!
- nullable = false: 쿼리가 데이터베이스까지 간 뒤에야 예외가 발생합니다
- @NotNull: 쿼리가 날아가기 전에 예외를 던져줘서, 문제 파악이 더 빠릅니다!
4. 커스텀 메시지: 사용자 친화적으로!
- nullable = false: 수정 불가능합니다
- @NotNull: "이 필드는 필수입니다." 와 같은 메시지를 직접 설정할 수 있습니다
5. 추가 검증: 더 똑똑하게!
- nullable = false: 단순히 null만 막는 역할이라 추가 기능은 없습니다.
- @NotNull: @Size나 @Pattern 같은 검증을 같이 붙일 수 있어서 필드에 더 많은 규칙을 걸 수 있습니다.
6. 추천 사용: 언제 쓰면 좋을까?
- 데이터베이스에 강력한 제약을 걸고 싶다면 nullable = false
- 애플리케이션에서 미리 검증하고, 필요하면 DDL까지 조정하고 싶다면 @NotNull
'Spring' 카테고리의 다른 글
AOP: 횡단관심사와 애스펙트 (0) | 2024.07.17 |
---|---|
핸들러 "어댑터"를 쓰는 이유 (0) | 2024.07.05 |
스프링 MVC 요청 / 응답 흐름과 매핑 로직 (0) | 2024.07.04 |
HttpHeaders, HttpEntity, ResponseEntity, RequestEntity (0) | 2024.06.18 |
스프링 부트 자동 설정 (AutoConfiguration.imports) 과 DispatcherServlet (0) | 2024.05.23 |
서블릿에서 JSP, 이어서 MVC 패턴이 사용되기까지 (0) | 2024.05.20 |