[JPA] ddl-auto 옵션과 주의사항

짱챌·2025년 4월 17일

JPA

목록 보기
3/5
post-thumbnail

✅ ddl-auto

spring.jpa.hibernate.ddl-auto는 스프링부트 애플리케이션에서 JPA 구현체를 사용할 때, DB 스키마 관리를 제어하는 설정이다. 이 옵션은 application.propertiesapplication.yml파일에서 설정할 수 있다.


✅ ddl-auto 옵션 종류와 설명

옵션 값설명
none아무 것도 하지 않음
create기존 테이블을 삭제하고 새로 생성
create-drop애플리케이션 종료 시 테이블도 삭제
update변경된 엔티티에 맞게 테이블 수정 (기존 데이터 유지)
validate엔티티와 DB 스키마를 검증만 하고 수정은 안 함

✅ 각 옵션 상세 설명

☘️ none

  • 아무 동작도 하지 않는다. (DB에 손대지 않음)
  • 직접 SQL로 테이블을 만들고 싶을 때나, 프로덕션 환경에서 주로 사용된다.

☘️ create

  • 애플리케이션 시작 시 기존 테이블을 모두 삭제(drop)하고
  • 현재 엔티티 기준으로 새로 생성(create)한다.
  • 초기 개발 단계, 테스트 용도에 적합하다.

🚨 데이터가 모두 사라지기 때문에 프로덕션 환경에서는 사용하지 않는다.

☘️ create-drop

  • create처럼 시작 시 테이블을 생성
  • 애플리케이션 종료 시 자동으로 테이블 삭제
  • JUnit 테스트일회성 테스트에 적합하다.

🚨 종료하면 데이터가 다 날아가기 때문에 프로덕션 환경에서는 사용하지 않는다.

☘️ update

  • 기존 데이터는 유지되고, 변경 사항은 자동 반영된다.
  • 엔티티로 등록된 클래스와 매핑되는 테이블이 없으면 새로 생성한다.
  • 제한적 수정만 가능
    • 새 필드를 엔티티에 추가하면, 해당 컬럼이 DB에 자동 추가
    • 엔티티에서 필드를 삭제해도, DB에는 남아있음
    • 컬럼 이름 변경, 타입 변경은 반영되지 않음
    • 제약 조건 변겅은 반영되지 않거나 예외 발생 가능

🚨 프로덕션 환경에서 사용 시 예기치 않은 동작 발생 가능

☘️ validate

  • 애플리케이션 시작 시 엔티티와 DB 스키마가 일치하는지만 검증
  • 스키마가 맞지 않으면 애플리케이션 실행 시 에러 발생
  • 스키마 변경 없이 엔티티 매핑만 검증할 수 있어서 안정적
  • 프로덕션 환경에서 엔티티와 DB 스키마가 일치하는지 확인할 때 사용

🚨 단, 테이블은 미리 만들어져 있어야 함

✅ 마무리

개발 단계에서는 create, update와 같은 옵션을 사용해도 괜찮다.
하지만 프로덕션 환경에서는 validate, none과 함께 마이그레이션 도구(Flyway, Liquibase 등)를 사용하는 것이 좋다.

profile
애옹: Magic Cat Academy

0개의 댓글