cs/ODOQ

[ODOQ] JPA의 ddl-auto 옵션

icodesiuuuu 2024. 11. 22. 00:02

[One Day One Question]

JPA의 ddl-auto 옵션은 각각 어떤 동작을 하고 어떤 상황에서 사용해야 할까요?


 

JPA의 ddl-auto 옵션은 Hibernate에서 데이터베이스 스키마를 어떻게 관리할지를 설정하는 옵션입니다. 이 옵션은 application.yml 또는 application.properties 파일에서 설정하며, 다양한 환경에서 유용하게 사용할 수 있습니다.

주요 옵션과 동작

  1. none
    • 동작: JPA가 데이터베이스 스키마 생성이나 수정 작업을 수행하지 않음.
    • 사용 상황: 이미 정의된 스키마를 사용하고, 애플리케이션이 데이터베이스 스키마를 변경하지 않아야 하는 프로덕션 환경.
  2. validate
    • 동작: 엔티티와 데이터베이스 스키마가 일치하는지 검증.
    • 사용 상황: 스키마는 외부에서 생성하고, 애플리케이션이 이를 변경하지 않지만, 엔티티와 스키마 간의 불일치를 사전에 확인하려는 경우.
    • 주의: 불일치가 발견되면 애플리케이션 실행이 중단됨.
  3. update
    • 동작: 데이터베이스 스키마를 엔티티에 맞게 업데이트(기존 데이터는 유지).
    • 사용 상황: 개발 환경에서 스키마 변경이 자주 발생하며, 데이터 손실 없이 간단한 추가/수정을 적용하고 싶은 경우.
    • 주의: 예상치 못한 결과를 초래할 수 있어 프로덕션 환경에서는 추천되지 않음.
  4. create
    • 동작: 애플리케이션 실행 시 기존 스키마를 삭제하고, 엔티티 정의를 기반으로 새 스키마를 생성.
    • 사용 상황: 개발 환경에서 매번 깨끗한 스키마로 시작하고 싶을 때.
    • 주의: 기존 데이터가 모두 삭제되므로 신중히 사용해야 함.
  5. create-drop
    • 동작: create와 동일하게 동작하지만, 애플리케이션 종료 시 스키마를 삭제.
    • 사용 상황: 테스트 환경에서 애플리케이션 종료 후 데이터를 유지할 필요가 없을 때.
    • 주의: 애플리케이션 실행 중에만 데이터가 유지됨.

 

주의 사항

  1. 데이터 손실 위험: create와 create-drop은 데이터를 모두 삭제하므로, 중요한 데이터가 있는 환경에서는 사용하지 않아야 합니다.
  2. 스키마 설계: 프로덕션 환경에서는 보통 DBA가 직접 스키마를 설계하고 관리하며, ddl-auto를 none으로 설정하는 것이 일반적입니다.
  3. 마이그레이션 도구와 조합: 프로덕션에서는 Flyway, Liquibase 같은 데이터베이스 마이그레이션 도구를 함께 사용하는 것이 권장됩니다.

'cs > ODOQ' 카테고리의 다른 글

[ODOQ] JPA의 N + 1  (0) 2024.11.25
[ODOQ] TCP와 UDP의 차이점  (1) 2024.11.25
[ODOQ] HTTP와 HTTPS의 차이점  (0) 2024.11.24
[ODOQ] 엔티티 매니저란?  (0) 2024.11.22
[ODOQ] Spring Data JPA에서 새로운 Entity인지 판단하는 방법  (0) 2024.11.21