이번 포스팅은 요즘 공부하고 있는 스프링부트에서 자주 사용하는 JPA에서 가장 많이 사용하는 프레임워크 Hibernate의 ddl-auto 속성에 관해 간단하게 정리해 보겠다.
# Hibernate ddl-auto란?
데이터베이스 스키마를 자동으로 관리하는 방식을 설정하는 속성이다.
# 속성
- none: 엔티티 클래스를 기반으로 데이터베이스 스키마를 자동으로 생성하지 않는다.
- create: 엔티티 클래스를 기반으로 데이터베이스 스키마를 자동으로 생성한다.
- create-drop: 엔티티 클래스를 기반으로 데이터베이스 스키마를 자동으로 생성하고 애플리케이션 종료 시 스키마를 삭제한다.
- update: 엔티티 클래스 변경 사항에 따라 데이터베이스 스키마를 자동으로 업데이트한다.
- validate: 엔티티 클래스와 데이터베이스 스키마의 일관성을 검사한다.
## none
적절한 예시
- 데이터베이스 관리자가 직접 스키마를 관리하는 경우
- 프로덕션 환경에서 데이터베이스 스키마 변경이 엄격하게 제어되는 경우
주의 사항
- 개발자가 직접 데이터베이스 스키마를 생성해야 한다.
- 엔티티 클래스 변경 시 직접 데이터베이스 스키마를 업데이트해야 한다.
## create
적절한 예시
- 새로운 애플리케이션 개발 초기 단계
- 개발 환경에서 테스트를 진행하는 경우
주의 사항
- 엔티티 클래스 변경 시 데이터베이스 스키마를 자동으로 업데이트하지 않는다.
- 실수로 데이터베이스 스키마가 손상될 수 있다.
## create-drop
적절한 예시
- 단위 테스트를 진행하는 경우
- 데이터베이스 스키마를 자주 변경하는 경우
주의 사항
- 애플리케이션 종료 시 데이터베이스 스키마가 삭제된다.
- 실수로 중요한 데이터가 손실될 수 있다.
## update
적절한 예시
- 배포 환경에서 데이터베이스 스키마를 자동으로 업데이트해야 하는 경우
- 엔티티 클래스 변경이 자주 발생하는 경우
주의 사항
- 데이터베이스 스키마 변경 시 충돌이 발생할 수 있다.
- 복잡한 엔티티 클래스 구조에서는 문제가 발생할 가능성이 높아진다.
## validate
적절한 예시
- 엔티티 클래스와 데이터베이스 스키마의 일관성을 검사해야 하는 경우
- 배포 환경에서 데이터베이스 스키마 변경을 안전하게 수행해야 하는 경우
주의 사항
- 데이터베이스 스키마를 변경하지 않는다.
- 엔티티 클래스와 데이터베이스 스키마의 일관성을 확인하는 데만 사용할 수 있다.
# 결론
개발 환경
- 개발 초기 단계 : create 또는 create-drop를 사용하여 개발 과정을 간소화한다.
- 개발 완료 후 : validate를 사용하여 엔티티 클래스와 데이터베이스 스키마의 일관성을 검사한다.
배포 환경
- 데이터베이스 관리자가 직접 스키마를 관리하는 경우 : none을 사용한다.
- 엔티티 클래스 변경이 자주 발생하지 않는 경우 : update를 사용하여 자동 업데이트를 활용한다.
- 엔티티 클래스 변경이 자주 발생하거나 데이터베이스 스키마 변경 위험이 높은 경우 : validate를 사용하여 안전하게 배포한다.