✅ ddl-auto

spring.jpa.hibernate.ddl-auto는 스프링부트 애플리케이션에서 JPA 구현체를 사용할 때, DB 스키마 관리를 제어하는 설정이다. 이 옵션은 application.properties나 application.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 등)를 사용하는 것이 좋다.