스프링 부트(Spring Boot), JPA에서 데이터베이스 초기화 방법
n 스프링 부트에서는 클래스패스 경로에(src/main/resources등) schema.sql, data.sql, schema-${platform}.sql, data-${platform}.sql 파일등이 존재한다면 자동으로 실행해서 스키마 구조와 데이터를 초기화 시켜주는데. ${platform} 값은, 만약 application.properties 파일에서 spring.datasource.platform=mysql 이라고 했다면 schema-${platform}.sql 파일의 이름은 schema-mysql.sql이 될 것이다.
n JPA는 시작시점에 DDL을 자동 생성 및 실행해 주는 기능이 있는데 두개의 외부 속성으로 정의한다. spring.jpa.generate-ddl (boolean) on, off 값을 가지고 DB벤더에 종속적이지 않으며 spring.jpa.hibernate.ddl-auto (enum)는 하이버네이트 특성으로 하이버네이트 Sessionfactory가 시작할 때 JPA의 엔티티 매핑, 연관관계 설정을 기본으로 테이블과 같은 스키마 생성 스크립트를 만들고 실행하여 데이터베이스 초기화를 지원하는데 열거형 값인 none, validate, update, create, create-drop값을 가진다.
n hsqldb, h2 and derby 데이터베이스는 create-drop이 기본이며 그외 DB는 none이 기본값이다.
none : 자동 DDL 생성 안함.
create : 하이버네이트 Sessionfactory가 시작될 때 항상 다시 생성, 이미 있다면 지우고 생성.
create-drop : Sessionfactory가 시작될 때 생성 후 종료할 때 삭제한다.
update : Sessionfactory가 시작될 때 엔티티 클래스(도메인 클래스)와 DB에 생성된 스키마 구조를 비교해서 DB쪽에 생성이 안된 테이블 또는 칼럼이 있다면 DB 스키마를 변경해서 생성시키지만 기 생성된 스키마 구조를 삭제하지는 않는다.
validate : Sessionfactory가 시작될 때 엔티티 클래스(도메인 클래스)와 DB에 생성된 스키마 구조를 비교해 같은지 확인만 할 뿐 DB 스키마 구조는 변경하지 않고 만약 다르다면 예외를 발생시킨다.
댓글 없음:
댓글 쓰기