[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이다.
ㅇ 이는 내장 데이터베이스가 주로 개발 및 테스트 목적으로 사용되기 때문이다.