Backend
[매일메일] JPA의 ddl-auto 옵션은 각각 어떤 동작을 하고 어떤 상황에서 사용해야 할까요?
· 5분 읽기
JPA의 ddl-auto 옵션은 각각 어떤 동작을 하고 어떤 상황에서 사용해야 할까요?
1. 직접 조사(구글링, 공식문서, 기술 포스팅 등으로 학습)
- JPA
- Java Persistence API의 약자
- 자바에서 관계형 데이터베이스를 사용하는 데 필요한 기능을 제공하는 ORM 기술
- 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스. 라이브러리가 아닌 인터페이스이므로 특정 기능을 자체 수행하지 않음
- Spring Data JPA
- JPA를 쉽게 사용할 수 있도록 스프링에서 제공하는 프레임워크
- 쿼리 생성, 페이징, 정렬, 캐싱 등의 기능 제공
- 다양한 데이터베이스와의 호환을 도와줌
- ddl-auto
JPA 구현체인 Hibernate가 엔티티 클래스 기반으로 데이터베이스 스키마를 어떻게 생성하거나 검증할지 결정하는 설정값
application.properties/application.yml에 설정하여, 애플리케이션 실행 시 스키마 관리 방식을 제어Spring Boot 설정 파일
application.properties(단순/스크립트 친화)
spring.jpa.hibernate.ddl-auto=create # create / create-drop / update / validate / noneapplication.yml(계층 구조·가독성)
spring: jpa: hibernate: ddl-auto: update # 제한적 스키마 갱신(부분 반영, 주의) ← 기존 주석 오류 수정!
모드(전략) 값들의 동작 및 역할
- create: 시작할 때 DROP+CREATE → 초기 개발, 샌드박스
- create-drop: 시작 시 생성, 종료 시 DROP → 테스트/실험
- update: 가능한 변경만 비파괴 반영(주로 컬럼/테이블 추가) → 로컬 개발 임시
- validate: 매핑만 검증, 스키마 변경 없음 → 배포 전/운영 중 검증
- none: 아무 작업도 안 함 → 운영 기본 (스키마는 Flyway/Liquibase로 관리 권장)
2. 정답 확인(매일메일 해설)
3. 최종 정리
- ddl-auto: Hibernate(JPA 구현체)가 엔티티 클래스 기반으로 DB 스키마를 어떻게 생성/검증/갱신할지 결정하는 전략 모드
application.properties또는application.yml에서 설정- 모드 동작 및 역할 정리
- 초기 개발 = create / create-drop
- 동작:
- create = 부팅 시 DROP+CREATE(데이터 초기화)
- create-drop = 부팅 시 생성, 종료 시 DROP
- 역할: 스키마 빠른 반복/실험용. 운영 금지(데이터 삭제됨)
- 동작:
- 임시 = update
- 동작: 엔티티 변경을 가능한 범위에서 비파괴 적용(주로 테이블/컬럼 추가). 제약/인덱스/삭제 반영은 불완전
- 역할: 로컬에서 임시 확인용. 장기 사용·운영 비권장(마이그레이션 대체 아님)
- 검증 = validate
- 동작: 스키마 변경 없음, 매핑 일치만 검사. 불일치면 부팅 실패
- 역할: 배포 전/운영 중 검증, CI에도 유용
- 운영 = none
- 동작: 아무 작업도 안 함
- 역할: 운영 기본값. 스키마는 Flyway/Liquibase 등으로 버전 관리
- 초기 개발 = create / create-drop
🔗 참고 URL
- 공식 문서
- 포스팅/영상
댓글
GitHub 계정으로 댓글을 남길 수 있어요.