JPA에서는 데이터 베이스 스키마를 자동 생성하는 옵션을 제공한다.
옵션에 따라 애플리케이션 실행 시점에 데이터베이스 dialect 에 맞는 적절한 DDL 이 생성된다.
<property name="hibernate.hbm2ddl.auto" value="create" />
create
: 기존 테이블 삭제 후 다시 생성 (drop + create)create-drop
: create
와 같지만 애플리케이션 종료 시점에 테이블 drop (테스트 케이스 수행 시 사용)update
: 컬럼 추가된 변경부분만 반영validate
: 엔티티와 테이블이 정상 매핑되었는지 검증none
: 사용하지 않음개발 초기 단계에서는 create
또는 update
사용이 가능하지만, 여러 명이 동시에 사용하는 테스트 서버에서는 update
또는 validate
정도만 권장된다.
스테이징 / 운영 환경에서는 validate
또는 none
만 사용하는 것이 좋다. update
모드를 사용 시 alter 가 실행되면 운영 중인 DB에 lock이 발생할 수 있기 때문이다.
운영 환경에서는 DDL 스크립트를 적절히 다듬어서 테이블을 직접 생성하거나 변경하여 사용하는 것을 권장한다.
나 역시 해당 옵션은 로컬 환경이나 개발 초기 단계에서만 사용하고 개발 / 운영 환경에서는 절대 사용하지 않는다.
얼마전 개발용 DB를 사용하면서 누군가 실수로 create 모드로 변경해놓았다가 기존 테이블들이 다 날아가는 아찔한 광경을 목격한 적 있다. 😳
JPA 가 제공하는 편리한 기능을 사용하기 전, 반드시 주의해야 할 점을 복기하는 차원에서 정리해 본다.