본문 바로가기

Spring/Spring JPA

[JPA] generate-ddl과 ddl-auto 차이

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 표준이므로 다른 구현체와의 호환성을 보장합니다.