본문으로 건너뛰기
최서희Frontend Engineer
← 블로그

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 / none
        • application.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 등으로 버전 관리

🔗 참고 URL

댓글

GitHub 계정으로 댓글을 남길 수 있어요.