개발자꿈나무
데이터베이스 스키마 자동 생성 본문
★ 데이터베이스 스키마 자동 생성
- DDL을 애플리케이션 실행 시점에 자동으로 생성
- 데이터베이스 방언을 이용하여 데이터베이에 맞는 적절한 DDL을 생성
- 스키마 자동 생성이 만든 DDL은 개발 환경에서만 사용하고, 운영 서버에서는 사용하지 않거나 적절히 다듬은 후에 사용해야 함
//persistence.xml에 다음 속성 추가
<property name="hibernate.hbm2ddl.auto" value=""/>
- value 값에 적절한 속성을 넣어줄 수 있음
create | 기존 테이블을 삭제하고 새로운 테이블 생성 DROP + CREATE |
create-drop | create 속성에 추가로 애플리케이션을 종료할 때 생성한 DDL을 제거 DROP + CREATE + DROP |
update | 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경 사항만 수정 |
validate | 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않음. 이 설정은 DDL을 수정하지 않음 |
none | 자동 생성 기능을 사용하지 않으며녀 auto 속성 자체를 삭제하거나 유효하지 않은 아무 값을 주면 됨 (일반적으로 none을 쓸 뿐, 유효하지 않은 속성값이면 뭐든 가능 dsfk) |
* JPA 2.1부터 스키마 자동 생성 기능을 표준으로 지원. 하지만 하이버네이트의 hibernate.hbm2ddl.auto 속성이 지원하는 update, validate 옵션을 지원하지 않음
⭐︎ create
- create 속성값을 설정하면 애플리케이션이 실행될 때 무조건 drop을 시키고 ddl을 생성함! -> 함부로 drop을 하는건 위험하므로 운영 서버에서는 절대 사용하지 말라는 것임
⭐︎ create-drop
- 애플리케이션이 실행될 때 drop을 진행하고 새로 스키마를 생성한 후, 트랜잭션이 끝나고나면 다시 drop을 시킴
⭐︎ update
- 최초에는 id, name 속성을 가진 테이블을 만들고 이후에 age 속성을 추가해서 다시 실행을 시키게 되면
이렇게 변경된 부분만 alter table로 실행이 됨
* 지우는건 안됨. age 필드를 지운다고 해서 alter table USER drop column age 가 되지는 않음
⭐︎ validate
- 테이블과 엔티티가 정상 매핑 되었는지 확인해주는 속성으로 아무 필드나 작성을 했을 때 실행을 시키면 오류가 발생하게 됨
** .xml에서 설정해둔 방언에 따라 다르게 DDL을 생성해주는 모습 확인
- 현재는 h2 방언을 설정해두었기에 실행을 시키면 name 속성의 데이터 유형이 varchar가 되지만 이걸 오라클로 바꾸게 되면 기본적으로 varchar2가 되는 모습을 확인할 수 있음
* 주의
- 운영 장비에는 절대 create, update, create-drop 사용하면 안됨!!
- 개발 초기 단계에는 create 또는 update
- 테스트 서버는 update 또는 validate
- 스테이징과 운영 서버는 validate 또는 none
★ DDL 생성 기능
- 제약조건 등을 설정할 수도 있는데, 뒤에서 구체적으로 얘기할 @Column을 사용하면 세부적인 사항도 설정할 수 있음
- length의 길이를 제한하거나, unique 제약 조건 등을 줄 수 있음
- DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않음