본문 바로가기

Spring/Spring JPA

[JPA] hibernate.ddl-auto

hibernate.ddl-auto는 Hibernate가 데이터베이스 스키마를 어떻게 관리할지 결정하는 중요한 설정입니다

 

주요 값과 동작

1. none

  • 동작:
    • Hibernate는 데이터베이스 스키마와 관련된 어떤 작업도 수행하지 않습니다.
    • 기본값으로 설정되면 스키마 변경 없이 데이터베이스와 애플리케이션 간의 매핑만 처리합니다.
  • 사용 사례:
    • 데이터베이스 스키마를 수동으로 관리하며, 애플리케이션에서 변경이 필요 없을 때.

2. create

  • 동작:
    • 애플리케이션 시작 시 기존 데이터베이스 스키마를 모두 삭제하고 새로 생성합니다.
    • 기존 데이터 및 테이블이 모두 삭제됩니다.
  • 사용 사례:
    • 초기 개발 단계에서 데이터베이스 구조를 자주 변경할 때.
    • 테스트 환경에서 새로운 구조를 매번 생성해야 할 때.
  • 주의:
    • 기존 데이터를 모두 삭제하므로 프로덕션 환경에서는 사용하지 말아야 합니다.

3. create-drop

  • 동작:
    • 애플리케이션 시작 시 스키마를 생성하며, 애플리케이션 종료 시 스키마를 삭제합니다.
  • 사용 사례:
    • 통합 테스트 환경에서 일시적으로 데이터베이스를 사용하고, 종료 시 데이터를 정리하고 싶을 때.
  • 주의:
    • 개발 환경이나 단기 테스트에 적합합니다. 프로덕션 환경에서는 사용하지 않습니다.

4. update

  • 동작:
    • 애플리케이션 시작 시 기존 스키마를 유지하면서 엔티티의 변경 사항에 따라 데이터베이스를 업데이트합니다.
    • 변경된 테이블, 컬럼 등이 추가되지만, 삭제 작업은 수행하지 않습니다.
  • 사용 사례:
    • 개발 환경에서 새로운 엔티티나 컬럼을 추가할 때.
    • 기존 데이터를 유지하면서 점진적으로 스키마를 수정해야 할 때.
  • 주의:
    • 삭제 작업이 수행되지 않기 때문에 오래된 구조가 그대로 남을 수 있습니다.
    • 프로덕션 환경에서는 주로 사용하지 않습니다.

5. validate

  • 동작:
    • 데이터베이스와 엔티티의 매핑을 검증하지만, 실제로 스키마를 수정하거나 생성하지 않습니다.
    • 엔티티와 데이터베이스 구조가 일치하지 않으면 애플리케이션이 시작되지 않습니다.
  • 사용 사례:
    • 프로덕션 환경에서 스키마가 정확히 설정되어 있는지 확인하고 싶을 때.
  • 주의:
    • 스키마를 자동으로 변경하지 않으므로 수동으로 변경이 필요합니다.

6. none

  • 동작:
    • Hibernate는 스키마와 관련된 어떤 작업도 수행하지 않습니다.
  • 사용 사례:
    • 스키마 변경이 절대 필요 없는 환경에서.

 

프로덕션 환경에서의 권장 설정

  • 일반적으로 프로덕션 환경에서는 validate 또는 **none**을 사용합니다.
    • validate를 통해 애플리케이션이 예상하는 스키마와 실제 스키마가 일치하는지 확인합니다.
    • 데이터베이스 스키마를 수동으로 관리하고, 애플리케이션이 이를 변경하지 않도록 보장합니다.
spring:
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        show_sql: true
        format_sql: true
    database-platform: org.hibernate.dialect.MySQLDialect
    
//예제

 

요약

  • hibernate.ddl-auto 설정은 애플리케이션과 데이터베이스 스키마의 관계를 정의하며, 적절한 값 선택이 중요합니다.
  • 개발 단계에서는 create나 update를, 테스트 단계에서는 create-drop을, 프로덕션 환경에서는 validate나 none을 사용하는 것이 일반적입니다.