generate-ddl과 ddl-auto는 모두 JPA와 Hibernate에서 데이터베이스 스키마 관리를 제어하는 설정이지만, 사용하는 맥락과 동작이 다릅니다.
1. generate-ddl
개요
- 기능: JPA의 표준 속성으로, Hibernate와 같은 JPA 구현체가 데이터베이스 스키마를 생성할지 여부를 제어합니다.
- 값: true 또는 false
- true: 애플리케이션이 시작될 때 JPA 구현체가 엔티티 정의에 따라 데이터베이스 스키마를 생성합니다.
- false: 데이터베이스 스키마를 생성하지 않습니다.
- 기본값: false
//예시
spring:
jpa:
generate-ddl: true
특징
- generate-ddl은 단순히 스키마 생성 여부를 결정하는 옵션입니다.
- JPA 표준에 정의되어 있으며 Hibernate 외에도 다른 JPA 구현체에서 사용할 수 있습니다.
- 세부적인 동작은 JPA 구현체(Hibernate)와 연동되는 방식에 따라 달라질 수 있습니다.
2. ddl-auto
개요
- 기능: Hibernate가 데이터베이스 스키마를 어떻게 관리할지를 세부적으로 제어합니다.
- 값: none, validate, update, create, create-drop 등
- none: Hibernate가 스키마 작업을 수행하지 않습니다.
- validate: 엔티티와 데이터베이스 스키마의 일치 여부를 검증만 합니다.
- update: 기존 스키마를 유지하면서 엔티티 변경 사항을 반영합니다.
- create: 기존 스키마를 삭제하고 새로 생성합니다.
- create-drop: 애플리케이션 시작 시 스키마를 생성하고 종료 시 삭제합니다.
spring:
jpa:
hibernate:
ddl-auto: update
특징
- Hibernate 고유 설정으로, JPA 표준이 아닙니다.
- 데이터베이스 스키마 관리의 세부적인 동작을 결정합니다.
- ddl-auto는 JPA의 generate-ddl보다 더 세밀한 제어가 가능합니다.
주요 차이점
항목 | generate-ddl | ddl-auto |
표준 여부 | JPA 표준 | Hibernate 고유 설정 |
값의 종류 | true / false | none, validate, update 등 |
스키마 작업 | 단순히 스키마 생성 여부만 결정 | 스키마 생성, 업데이트, 검증 등 세부 제어 가능 |
적용 범위 | JPA 구현체에 따라 다름 | Hibernate에 특화 |
사용 목적 | 스키마 생성 여부 결정 | 스키마 작업의 세부 동작 정의 |
함께 사용할 수 있을까?
- 가능하지만 충돌 가능성 존재: generate-ddl과 ddl-auto를 동시에 설정하면 혼란을 초래할 수 있으므로, Hibernate를 사용할 경우 ddl-auto를 사용하는 것이 일반적입니다.
- 예를 들어, generate-ddl: true와 ddl-auto: none을 함께 설정하면 의도치 않은 동작이 발생할 수 있습니다.
권장 사항
- Hibernate를 사용할 경우: ddl-auto를 사용하는 것이 좋습니다. JPA 표준보다는 Hibernate 고유 설정이 더 세밀한 제어를 제공합니다.
- JPA 구현체를 변경할 가능성이 있을 경우: generate-ddl을 사용하는 것이 더 적합합니다. 이는 JPA 표준이므로 다른 구현체와의 호환성을 보장합니다.
'Spring > Spring JPA' 카테고리의 다른 글
[JPA]Spring에서 트랜잭션 롤백(RuntimeException, Checked Exception) (1) | 2024.12.09 |
---|---|
[JPA] 영속성 캐시(Persistence Context) (0) | 2024.12.05 |
[JPA] hibernate.ddl-auto (0) | 2024.12.04 |
[JPA] Spring JPA 관련 yml 설정의 주요 항목 (0) | 2024.12.04 |
[JPA] spring.jpa.properties.hibernate.dialect (0) | 2024.12.04 |