일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Java
- CKA 기출문제
- Pinpoint
- CKA
- CloudWatch
- PETERICA
- 정보처리기사 실기
- 티스토리챌린지
- 오블완
- kotlin
- APM
- MySQL
- aws
- kotlin coroutine
- Elasticsearch
- Kubernetes
- IntelliJ
- AI
- mysql 튜닝
- AWS EKS
- kotlin querydsl
- kotlin spring
- 코틀린 코루틴의 정석
- 기록으로 실력을 쌓자
- Spring
- 정보처리기사 실기 기출문제
- 공부
- minikube
- Linux
- 정보처리기사실기 기출문제
- Today
- Total
피터의 개발이야기
[JPA] Spring JPA의 ddl-auto 기능, 데이터베이스 스키마 자동 관리하기 본문
ㅁ 들어가며
ㅇ Spring Data JPA를 사용할 때 개발자들이 자주 마주치는 고민 중 하나는 데이터베이스 스키마를 어떻게 관리할 것인가 하는 점이다.
ㅇ 특히 개발 과정에서 엔티티 클래스가 자주 변경되는 경우, 이를 데이터베이스 스키마에 반영하는 작업이 번거로울 수 있다.
ㅇ 이런 상황에서 JPA의 ddl-auto 기능은 매우 유용한 도구가 된다.
ㅁ 관련 글
ㅇ [Spring] JUnit5 조건부 테스트 실행방법
ㄴ JPA의 ddl-auto 기능과 함께 사용하면 개발환경 별 자동 테스트 환경을 구축할 수 있다.
ㅁ ddl-auto란?
ㅇ ddl-auto는 JPA가 제공하는 기능으로, 애플리케이션 실행 시 데이터베이스 스키마를 자동으로 관리해주는 옵션이다.
ㅇ 이 기능을 사용하면 엔티티 클래스의 변경사항을 데이터베이스 스키마에 자동으로 반영할 수 있어, 개발 생산성을 크게 향상시킬 수 있다.
ㅇ 나의 경우, 집에서 PlayGround DB에 테스트 할 경우 유용하게 사용하고 있다.
ㅁ 설정방법
spring:
jpa:
hibernate:
ddl-auto: create-drop
ㅇ kotlin-querydsl > application.yml 에 작성하였던 소스이다.
ㅁ ddl-auto의 주요 옵션
옵션 | 설명 |
none | 아무 작업도 수행하지 않음 |
validate | 엔티티와 테이블이 정확히 매핑되었는지 검증만 수행 |
update | 변경된 스키마만 반영 |
create | 기존 테이블을 삭제하고 새로 생성 |
create-drop | create와 같지만 애플리케이션 종료 시 테이블도 삭제 |
ㅁ 개발 환경별 ddl-auto 설정 방법
환경 | 옵션 |
로컬 개발 | create 또는 update |
테스트 | create-drop |
스테이징 | validate |
운영 | none 또는 validate |
ㅇ ddl-auto 옵션은 개발 환경에 따라 다르게 설정하는 것이 좋다.
ㅇ 'create'나 'create-drop' 옵션은 기존 데이터를 모두 삭제하므로 데이터 손실에 주의해야 한다.
ㅁ 내장 데이터베이스와 외부 데이터베이스
ㅇ Spring Boot는 내장 데이터베이스(H2, HSQL, Derby)를 사용할 때 기본적으로 ddl-auto를 create-drop으로 설정한다.
ㅇ 반면 외부 데이터베이스를 사용할 때는 기본값이 none이다.
ㅇ 이는 내장 데이터베이스가 주로 개발 및 테스트 목적으로 사용되기 때문이다.
ㅁ 함께 보면 좋은 사이트
'Programming > Spring' 카테고리의 다른 글
[Spring] Spring Boot 시작 시 데이터베이스 초기화하기 (0) | 2024.08.19 |
---|---|
[Spring] SSL 접속시, PKIX path building failed 오류 해결방법 (0) | 2024.08.12 |
[Spring] Kotlin으로 JPA Querydsl 세팅 (0) | 2024.08.09 |
[Spring] Gradle 9.0 호환성 경고 해결하기, Deprecated Gradle features were used in this build (0) | 2024.08.08 |
[JPA] CascadeType.REMOVE과 orphanRemoval=true, MySQL DELETE CASCADE 비교 (0) | 2024.08.02 |