Hibernate DDL auto
혹시 팀플하다가 ddl-auto 때문에 데이터가 싹다 날아간 경험을 해본적이 있나요? 저는 국비학원에서 팀플할 당시 조원 중 한면이 모르고 ddl-auto create를 넣고 돌리는 바람에 크롤링한 데이터가 싸그리 날아간 경험을 한적이 있습니다. 그때의 트라우마로 그냥 ddl-auto 관련해서는 쳐다도 안보고있었는데, 이번 기회에 공부를 해보려고 합니다.
hibernate.ddl-auto는 Hibernate가 데이터베이스 스키마를 애플리케이션의 엔티티(Entity) 클래스에 따라 어떻게 관리할지를 결정하는 중요한 설정입니다. 특히 Spring Boot 애플리케이션에서 application.yml 파일을 통해 이 속성을 쉽게 구성할 수 있습니다. 이번 포스팅에서는 각 옵션의 의미와 적합한 사용 시나리오를 설명하고, 환경별로 최적의 설정에대해 알아보고자 합니다.
1. hibernate.ddl-auto의 역할
Hibernate는 객체지향 모델(Entity 클래스)와 관계형 데이터베이스 스키마 간의 매핑을 처리합니다. 이때 hibernate.ddl-auto는 다음과 같은 방식으로 데이터베이스 스키마를 관리합니다:
- 스키마 생성 및 삭제
- 스키마 업데이트
- 스키마 유효성 검증
- 스키마 변경 없음
각각의 옵션은 데이터베이스 스키마를 어떻게 다룰지 정의합니다.
2. hibernate.ddl-auto 속성 옵션 설명
none
- Hibernate가 데이터베이스 스키마를 변경하지 않습니다.
- 데이터베이스 관리를 수동으로 수행할 때 사용합니다.
- 프로덕션 환경에서 가장 권장됩니다.
validate
- 애플리케이션 시작 시 데이터베이스 스키마가 엔티티와 일치하는지 검증합니다.
- 데이터베이스 스키마를 수정하지 않습니다.
- 스키마가 맞지 않을 경우 애플리케이션이 실행되지 않습니다.
- 주로 개발 단계에서 유효성 검증 용도로 사용합니다.
update
- 엔티티의 변경 사항에 따라 데이터베이스 스키마를 업데이트합니다.
- 기존 데이터는 유지됩니다.
- 빠른 개발과 테스트를 위해 유용하지만, 예상치 못한 데이터 손실 가능성이 있습니다.
- 프로덕션 환경에서는 비추천입니다.
create
- 애플리케이션 시작 시 기존 스키마를 삭제하고, 엔티티에 따라 새로 생성합니다.
- 기존 데이터가 삭제됩니다.
- 주로 테스트 환경에서 사용됩니다.
create-drop
- create와 동일하지만, 애플리케이션 종료 시 스키마를 삭제합니다.
- 테스트 환경에서 매우 유용합니다.
3. application.yml 예제 구성
Spring Boot에서 hibernate.ddl-auto를 설정하려면 application.yml 파일을 아래와 같이 구성합니다:
기본 예제:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: myuser
password: mypassword
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
옵션별 구성 예제
- 개발 환경:엔티티 변경 사항을 반영하면서 데이터는 유지합니다.
- spring: jpa: hibernate: ddl-auto: update
- 테스트 환경:테스트 후 데이터베이스를 깔끔하게 초기화합니다.
- spring: jpa: hibernate: ddl-auto: create-drop
- 프로덕션 환경:데이터베이스를 수동으로 관리하며, 애플리케이션이 스키마를 변경하지 않도록 합니다.
- spring: jpa: hibernate: ddl-auto: none
4. 각 환경별 추천 설정
개발 환경
- 추천 옵션: update
- 이유: 엔티티 변경 사항을 데이터베이스에 자동으로 반영하므로, 빠른 개발과 테스트에 유리합니다.
테스트 환경
- 추천 옵션: create-drop
- 이유: 애플리케이션 시작 시 데이터베이스를 초기화하고 종료 시 삭제하여 테스트를 깔끔하게 유지합니다.
프로덕션 환경
- 추천 옵션: none 또는 validate
- 이유: 데이터베이스 변경을 방지하며, 스키마 유효성을 검증하거나 변경을 수동으로 관리합니다.
5. 주의 사항
- update와 create는 프로덕션 환경에서 사용하지 않는 것이 좋습니다. 데이터 손실이나 예기치 않은 스키마 변경이 발생할 수 있습니다.
- 데이터베이스 변경 사항은 항상 백업 후 진행하세요.
- 엔티티 변경 후, 스키마와의 호환성을 유지하려면 마이그레이션 도구(예: Flyway, Liquibase)를 사용하는 것이 안전합니다.
6. 결론
hibernate.ddl-auto는 개발, 테스트, 프로덕션 환경에서 데이터베이스 스키마를 관리하는 데 중요한 역할을 합니다. 올바른 설정을 선택하면 개발 생산성을 높이고, 데이터 무결성을 유지할 수 있습니다. 환경별 요구 사항을 고려하여 적합한 옵션을 설정하세요.
'웹 개발 > 🍃 SpringBoot' 카테고리의 다른 글
@GeneratedValue(strategy = GenerationType.IDENTITY) 전략 제대로 이해하기 (0) | 2025.01.10 |
---|---|
JPA | 엔티티 설계 (0) | 2025.01.10 |
JPA | 영속성 컨텍스트 (0) | 2025.01.07 |
JPA | 하이버네이트 (0) | 2025.01.07 |
JPA | JPA (0) | 2025.01.07 |