spring.jpa.hibernate.ddl-auto = create
JPA를 사용할 때 DDL을 자동으로 실행해주는 좋은 도구이다.
하지만 잘못 사용하게 되면 여러 문제점이 생긴다. 어떤 상황에서 어떤 설정을 사용하는게 좋을까?
엔티티로 등록된 클래스와 매핑되는 테이블을 자동으로 생성해준다. 이때 테이블이 존재하면 삭제하고 생성한다.
create와 똑같이 기존 테이블을 삭제하고 자동으로 테이블을 삭제, 하지만 애플리케이션이 종료될 때 테이블도 같이 삭제한다.
엔티티 클래스와 매핑되는 테이블이 없으면 생성하고, 있다면 새로 만드는 것이 아니라 새로 생긴 컬럼만 추가한다. 이때, 속성이 변경된 기존 컬럼은 변경하지 않는다.
엔티티 클래스와 테이블이 정상적으로 매핑되는지만 검사한다. 매핑되는 컬럼이 존재하지 않으면 예외를 발생시킨다.
개발을 시작할 때는 엔티티의 속성이나 컬럼등 바뀔 요소가 수도 없이 많기 때문에 create를 사용했다. 하지만 배포하기 전 데이터들을 여러개 쌓고 테스트를 할 때에는 데이터를 다시 생성해야하는 불편함이 생겼다. 그래서 update를 도입하게 되지만
update의 가장 큰 문제는 새로 생기게 되는 컬럼이 not null일 경우이다.
따라서 실제 배포할 때에는 ddl-auto 속성을 사용하지 않거나 validate로 검증만 하는 것이 좋다고 생각한다.