개발자꿈나무

데이터베이스 스키마 자동 생성 본문

자바/JPA

데이터베이스 스키마 자동 생성

망재이 2023. 7. 25. 15:28

★ 데이터베이스 스키마 자동 생성

- 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

- 테이블과 엔티티가 정상 매핑 되었는지 확인해주는 속성으로 아무 필드나 작성을 했을 때 실행을 시키면 오류가 발생하게 됨

존재하지 않는 dogo를 입력하고 실행시켰을 때 오류가 발생하는 모습

 

** .xml에서 설정해둔 방언에 따라 다르게 DDL을 생성해주는 모습 확인

- 현재는 h2 방언을 설정해두었기에 실행을 시키면 name 속성의 데이터 유형이 varchar가 되지만 이걸 오라클로 바꾸게 되면 기본적으로 varchar2가 되는 모습을 확인할 수 있음

 

* 주의

- 운영 장비에는 절대 create, update, create-drop 사용하면 안됨!!

- 개발 초기 단계에는 create 또는 update

- 테스트 서버는 update 또는 validate

- 스테이징과 운영 서버는 validate 또는 none

 

 

★ DDL 생성 기능

- 제약조건 등을 설정할 수도 있는데, 뒤에서 구체적으로 얘기할 @Column을 사용하면 세부적인 사항도 설정할 수 있음

- length의 길이를 제한하거나, unique 제약 조건 등을 줄 수 있음

- DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않음

728x90

'자바 > JPA' 카테고리의 다른 글

기본키 매핑  (0) 2023.08.07
필드와 컬럼 매핑  (0) 2023.07.25
객체와 테이블 매핑  (0) 2023.07.25
준영속  (0) 2023.07.23
플러시  (0) 2023.07.23