ddl-auto
서론
JPA 구현체 중 하나인 하이버네이트에는 ddl-auto 라는 기능을 제공한다.
오늘은 이 기능에 대해서 알아보자.
ddl-auto
DDL이란 Date Definition Language 이다.
데이터를 생성하거나 수정, 삭제 등 데이터의 전체 골격을 결정하는 언어를 의미한다.
ddl-auto 옵션은 JPA 엔티티를 만들어놓으면 해당 테이블을 자동으로 생성하거나 수정해주는 옵션이다.
ddl-auto의 속성에는 create, create-drop, update, validate, none이 있다.
create
create는 엔티티로 등록된 테이블을 자동으로 생성해준다.
어플리케이션이 시작할때 기존의 테이블을 삭제하고 다시 생성하는 특징이 있다.
create-drop
create와 비슷하지만 한가지 다른점은 어플리케이션이 종료될때 테이블을 삭제한다는 특징이 있다.
update
update는 엔티티로 등록된 테이블이 존재하지 않으면 새롭게 생성하고, 기존 테이블이 존재한다면 해당 테이블의 컬럼을 업데이트한다.
하지만, 모든 변경사항을 반영하는 것은 아니다.
컬럼의 속성(nullable, 크기, 데이터 타입 등)은 수정하지 않고, 새롭게 추가되는 변경사항만 반영한다.
validate
validate는 다른 속성과 다르게 테이블을 생성하거나 수정하지 않고, 엔티티 클래스와 테이블이 정상적으로 매핑되는지만 검사한다.
테이블이 존재하지 않거나, 엔티티와 매핑되는 컬럼이 존재하지 않으면 예외를 발생시키며 어플리케이션을 종료한다.
none
none은 기본값으로 위의 네가지 경우를 제외한 아무일도 일어나지 않는 속성이다.
주의사항
ddl-auto는 매우 유용한 기능이지만, validate와 none을 제외한 속성은 운영 DB에 절대로 사용하면 안된다.
create, create-drop 같은 경우에는 기존의 데이터가 모두 삭제되는 대참사가 발생할 수 있다.
update라고 안전하지 않은게 새로 추가된 컬럼에 대한 속성때문에 오류가 발생할 수 있다.
그래서 다음 같은 경우에 속성을 사용해야한다.
개발초기 단계 또는 로컬 테스트 - create, update
테스트 서버 - update, validate
스테이징 및 운영 서버 - validate, none