Skip to content

ddl auto

kimtaehun edited this page Dec 20, 2022 · 7 revisions

하이버테이트가 제공하는 기능이라고 합니다.

none, validate, update, create-drop 이렇게 3가지 옵션이 있습니다.

설정을 따로해주지 않으면 default 값이 할당된다고 합니다.

요건 디비가 embedded이면 create-drop이고, 아니면 none입니다.

Q: "그럼 embedded 디비인지 아닌지는 어떻게 알지?"

A: connection type으로 구분한다네요. hsqldb, h2, derby 요거 3개면 embedded라고 판단합니다.

각 옵션들의 동작은 아래와 같습니다.

none: No action will be performed. 인스턴스를 띄웠을때, 이미 데이터베이스가 운영중인 상황에서 사용

create-only: Database creation will be generated. 로컬에서 테스트시 사용, 인메모리 디비라 디비 생명주기가 앱이랑 동일할때 사용

drop: Database dropping will be generated. 사용한적 없음

create: Database dropping will be generated followed by database creation. 로컬에서 테스트시 사용, 테스트용 디비 서버 있으면 사용

create-drop: Drop the schema and recreate it on SessionFactory startup. Additionally, drop the schema on SessionFactory shutdown.

validate: Validate the database schema

update: Update the database schema

그래서 각각 언제 쓰나요?

테스트/운영, 디비가 임베디드인지 아닌지에 따라 다릅니다.

사실 운영환경에서는 오직 validate 하나만 쓴다고 알아두면 간편합니다.

어플리케이션에서 사용하려 하는 스키마와 운영중인 디비 스키마가 다르면, 어플리케이션이 구동중에 죽거든요.

만약 none으로 세팅되어 있다면(default가 none입니다.), 유저의 요청이 어플리케이션까지 들어와서 디비에 쿼리 날려봐야 스키마가 다르단걸 알기 때문이죠.

p.s. import.sql이라는 시작할때 실행되는 친구 만들 수 있다고 합니다.(아주 유용👍)

참고 문헌

59. Database initialization

Automatic schema generation

Clone this wiki locally