[One Day One Question]
JPA의 ddl-auto 옵션은 각각 어떤 동작을 하고 어떤 상황에서 사용해야 할까요?
JPA의 ddl-auto 옵션은 Hibernate에서 데이터베이스 스키마를 어떻게 관리할지를 설정하는 옵션입니다. 이 옵션은 application.yml 또는 application.properties 파일에서 설정하며, 다양한 환경에서 유용하게 사용할 수 있습니다.
주요 옵션과 동작
- none
- 동작: JPA가 데이터베이스 스키마 생성이나 수정 작업을 수행하지 않음.
- 사용 상황: 이미 정의된 스키마를 사용하고, 애플리케이션이 데이터베이스 스키마를 변경하지 않아야 하는 프로덕션 환경.
- validate
- 동작: 엔티티와 데이터베이스 스키마가 일치하는지 검증.
- 사용 상황: 스키마는 외부에서 생성하고, 애플리케이션이 이를 변경하지 않지만, 엔티티와 스키마 간의 불일치를 사전에 확인하려는 경우.
- 주의: 불일치가 발견되면 애플리케이션 실행이 중단됨.
- update
- 동작: 데이터베이스 스키마를 엔티티에 맞게 업데이트(기존 데이터는 유지).
- 사용 상황: 개발 환경에서 스키마 변경이 자주 발생하며, 데이터 손실 없이 간단한 추가/수정을 적용하고 싶은 경우.
- 주의: 예상치 못한 결과를 초래할 수 있어 프로덕션 환경에서는 추천되지 않음.
- create
- 동작: 애플리케이션 실행 시 기존 스키마를 삭제하고, 엔티티 정의를 기반으로 새 스키마를 생성.
- 사용 상황: 개발 환경에서 매번 깨끗한 스키마로 시작하고 싶을 때.
- 주의: 기존 데이터가 모두 삭제되므로 신중히 사용해야 함.
- create-drop
- 동작: create와 동일하게 동작하지만, 애플리케이션 종료 시 스키마를 삭제.
- 사용 상황: 테스트 환경에서 애플리케이션 종료 후 데이터를 유지할 필요가 없을 때.
- 주의: 애플리케이션 실행 중에만 데이터가 유지됨.
주의 사항
- 데이터 손실 위험: create와 create-drop은 데이터를 모두 삭제하므로, 중요한 데이터가 있는 환경에서는 사용하지 않아야 합니다.
- 스키마 설계: 프로덕션 환경에서는 보통 DBA가 직접 스키마를 설계하고 관리하며, ddl-auto를 none으로 설정하는 것이 일반적입니다.
- 마이그레이션 도구와 조합: 프로덕션에서는 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 |