[Spring] spring.jpa.hibernate.ddl-auto 설정과 각 옵션

2025. 2. 12. 15:22·TIL (Today I Learned)

Spring Boot에서 JPA와 Hibernate를 사용할 때, `spring.jpa.hibernate.ddl-auto` 설정은 애플리케이션이 실행될 때 데이터베이스 스키마를 어떻게 관리할지 결정하는 역할을 한다.

 

1. spring.jpa.hibernate.ddl-auto=create

  • 애플리케이션이 시작될 때 기존 테이블을 삭제하고(DROP), 다시 생성(CREATE)함
  • 애플리케이션 실행 시마다 모든 데이터가 초기화됨
  • 실무에서는 사용하면 안 됨 (테스트 환경에서만 유용)

 

📌 실행 과정

  1. 기존 테이블을 DROP TABLE로 삭제
  2. CREATE TABLE로 새롭게 테이블을 생성
  3. 애플리케이션이 종료될 때까지 새로운 데이터를 저장할 수 있음
  4. 애플리케이션을 다시 실행하면 모든 데이터가 삭제됨

 


2. ddl-auto의 옵션

옵션 설명 사용 환경
`none` DDL 실행 X 운영 환경
`create` 기존 테이블 삭제(DROP) 후 새로 생성(CREATE) 개발 & 테스트 환경
`create-drop` `create`와 동일하지만, 애플리케이션 종료 시 테이블 삭제 일시적인 테스트 환경
`update` 변경된 엔티티에 맞춰 스키마 업데이트 (데이터 유지) 개발 환경
`validate` 현재 DB와 엔티티가 일치하는지 확인 (불일치 시 오류 발생) 운영 환경

 


3. 각 옵션 상세 설명

`none` (기본값, DDL 실행 안 함)

spring.jpa.hibernate.ddl-auto=none
  • Hibernate가 DDL을 실행하지 않음
  • 운영 환경에서 사용해야 함 (DB 스키마 변경 없이 유지)

 

🎯 사용 사례

  • 운영 환경 (데이터베이스는 DBA가 직접 관리)
  • 기존 테이블을 그대로 유지하고 Hibernate가 자동으로 건드리지 않도록 해야 할 때

 

`create` (테이블 삭제 후 새로 생성)

spring.jpa.hibernate.ddl-auto=create
  • 기존 테이블을 삭제하고 새로 생성 (DROP & CREATE)
  • 애플리케이션 실행 시 모든 데이터가 초기화됨
  • 테스트 환경에서만 사용 (실무에서는 사용 금지!)

 

🎯 사용 사례

  • 초기 개발 단계에서 빠르게 테이블 구조를 바꿔가며 테스트할 때
  • 마이그레이션이 필요 없는 간단한 프로젝트

 

`create-drop` (애플리케이션 종료 시 테이블 삭제)

spring.jpa.hibernate.ddl-auto=create-drop
  • create와 동일하지만, 애플리케이션 종료 시 테이블을 삭제함
  • 단기 테스트 환경에서 유용

 

🎯 사용 사례

  • 단기 테스트 환경에서 애플리케이션 실행 중에만 데이터 유지
  • 종료 후 자동으로 초기화되기 때문에 일회성 테스트에 적합

 

`update` (기존 데이터 유지하면서 스키마 변경)

spring.jpa.hibernate.ddl-auto=update
  • 기존 테이블을 유지하면서 엔티티 변경 사항을 반영함
  • 데이터는 삭제되지 않음
  • 제약 조건 추가/삭제, 기존 컬럼 타입 변경 등은 반영되지 않음

 

🎯 사용 사례

  • 로컬 개발 환경에서 데이터를 유지하면서 변경 사항만 반영할 때
  • 주의할 점: 완벽한 마이그레이션을 보장하지 않으므로, 운영 환경에서는 사용 금지

 

`validate` (엔티티와 DB 일치 여부만 검사)

spring.jpa.hibernate.ddl-auto=validate
  • DB 스키마를 변경하지 않음
  • 애플리케이션 시작 시 엔티티와 DB 테이블이 일치하는지 확인
  • 불일치하면 애플리케이션이 실행되지 않음

 

🎯 사용 사례

  • 운영 환경에서 추천 (DDL 자동 변경을 방지하면서 스키마 검증 가능)
  • 스키마가 올바르게 유지되는지 확인하는 용도로 사용

 


4. 정리

옵션 데이터 유지 여부 스키마 변경 여부 사용 환경
`none` ✅ 유지됨 ❌ 변경 없음 운영 환경 (DB 직접 관리)
`create` ❌ 초기화됨 ✅ 변경됨 개발/테스트
`create-drop` ❌ 종료 시 삭제 ✅ 변경됨 일시적인 테스트
`update` ✅ 유지됨 ⚠️ 일부 변경됨 개발 환경
`validate` ✅ 유지됨 ❌ 변경 없 운영 환경
저작자표시 비영리 변경금지 (새창열림)

'TIL (Today I Learned)' 카테고리의 다른 글

[Spring] JPA 연관관계 매핑 확실하게 알아보기❗  (0) 2025.02.14
[Spring] @Transactional을 어디에 붙여야 할까🤔❔  (0) 2025.02.12
[Spring] JPA 영속성 컨텍스트와 JOIN 활용  (0) 2025.02.12
[Spring] JPA에서 꼭 알아야 할 개념: 영속성  (0) 2025.02.10
[Spring] Spring Data JPA에서 @Repository를 사용하지 않는 이유  (2) 2025.02.09
'TIL (Today I Learned)' 카테고리의 다른 글
  • [Spring] JPA 연관관계 매핑 확실하게 알아보기❗
  • [Spring] @Transactional을 어디에 붙여야 할까🤔❔
  • [Spring] JPA 영속성 컨텍스트와 JOIN 활용
  • [Spring] JPA에서 꼭 알아야 할 개념: 영속성
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    sql
    BFS
    websocket
    bootstrap
    join
    mysql
    다이나믹프로그래밍
    자료구조
    GROUP BY
    DFS
    jpa
    programmers
    Subquery
    Google Fonts
    HTML
    Firebase
    CSS
    시뮬레이션
    완전탐색
    dp
    그리디
    BOJ
    jQuery
    javascript
    java
    백준
    jwt
    백트래킹
    프로그래머스
    greedy
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[Spring] spring.jpa.hibernate.ddl-auto 설정과 각 옵션
상단으로

티스토리툴바