개념 · 옵션별 동작 · 실전 사용 시나리오 · 주의할 점 총정리
Spring Data JPA(Hibernate)가 애플리케이션 시작/종료 시점에 데이터베이스 스키마를 어떻게 다룰지 결정하는 설정이 spring.jpa.hibernate.ddl-auto
입니다.
application.yml
(또는 properties
)에 딱 한 줄로 넣지만, 선택에 따라 데이터 유실부터 배포 사고까지 좌우될 수 있으니 옵션별 특성을 확실히 이해해야 합니다.
none
validate
none
보다 한 단계 안전장치 추가—“코드 ↔ DB” 정합성 보증.update
create
create-drop
create
와 동일하게 시작 시 새로 생성 + 애플리케이션 정상 종료 시 Drop. 마이그레이션 도구
ddl-auto
권장 값
none
: Hibernate가 스키마에 일절 관여하지 않음. validate
: 마이그레이션 완료 후 추가 검증 레이어로 사용.update
가 운영에서 특히 위험한 이유는?A. Hibernate는 추가 작업엔 강하지만 컬럼 삭제·이름/타입 변경, 복잡한 제약 조건엔 취약합니다.
DB별 DDL 차이를 해석하지 못해 데이터 손실이나 알 수 없는 오류를 일으킬 수 있으므로 운영 사용은 피해야 합니다.
create
와 update
중 무엇이 좋을까?create
로 빠르게 구조 잡기. update
로 전환하되, 위험성 인지 & 수시 백업. none
/validate
로 운영과 동일한 흐름 유지.ddl-auto
는 어떻게?none
validate
create
, create-drop
, update
는 마이그레이션 도구와 충돌 위험이 커서 사용하지 않습니다.ddl-auto: none
(또는 validate
) 설정했는가? create
/update
사용 시 데이터 백업과 Git DDL 이력을 남기고 있는가? create
, update
, Flyway 조합별 시작 로그와 실제 DDL 비교하기 VARCHAR(255)
→ VARCHAR(50)
) 시 update
가 어떤 DDL을 생성하는지 실험 create-drop
+ Testcontainers 로 격리된 통합 테스트 환경 구축하기ddl-auto
는 편리하지만 양날의 검입니다. 개발 효율과 데이터 안정성 사이에서 옳은 옵션을 선택해 보세요. 궁금한 점은 댓글로 남겨 주세요!