애플리케이션이 초기에 가동될 때 필요한 데이터를 입력하는 작업은 필수적인 기초작업이다. ㅡ_-)>
애플리케이션 개발이 완료된 단계에서는 Flyway를 이용해서 DB 마이그레이션을 진행하면 되지만, 한창 개발중인 와중인지라 엔티티가 변경될 가능성도 높고해서 생성에 필요한 부분들을 당장 Flyway로 적재할 필요가 없어서 설정만 해두었다.

SpringBoot(Hibernate + Spring Data JPA)를 활용할 때 데이터베이스를 초기화 하는 방법은

  • JPA를 이용해서 데이터베이스를 초기화
    • spring.jpa.generate-ddl (boolean) switches the feature on and off and is vendor independent.
    • spring.jpa.hibernate.ddl-auto (enum) is a Hibernate feature that controls the behavior in a more fine-grained way. See below for more detail.
  • Hibernate를 이용해서 데이터베이스 초기화
    • import.sql를 루트클래스 경로에 놓아두면 시작시 실행된다.
  • Spring JDBC를 이용해서 데이터베이스 초기화
    • 설정파일에서 spring.datasource.initialize를 추가해두고
    • schema.sql 를 사용하면 JPA에서 설정해두면 JPA에서 테이블 생성할 때 schema.sql에 동일한 테이블이 있으면 문제가 생긴다.
    • ddl-auto=create-drop 으로 설정해두고 새로운 기초데이터를 넣기 위한data.sql을 사용할 수 있다.

      지금 사용하는 프로젝트에서는 spring.datasource.initialize설정을 통해서 data.sql을 이용하는 방법이 편해보여서 그렇게 했다.

  • Spring Batch database를 이용한 초기화
    • 가장 범용적으로 사용되는 SQL 초기화 스크립트를 이용한 방법이다.
  • 혹은 높은 수준의 데이터베이스 마이그레이션 도구를 사용
    • Flyway
    • Liquibase

Spring JDBC를 이용해서 데이터베이스 초기화 설정방법

spring:
  datasource:
    initialize: true
    driverClassName: org.h2.Driver
    url: jdbc:h2:file:./h2database;AUTO_SERVER=TRUE
    username: user
    password:

위와 같이 설정해두고
project/java/main/resource 경로에 data.sql을 넣어두어 프로젝트 초기화 데이터를 넣어두었다. 최초 실행시 initialize true로 두고 구동하면 JPA에 의해 테이블이 생성된 후에 data.sql이 실행되면서 데이터가 입력된다. 이후에는 initialize false로 변경하면 된다.

혹은,

spring:
  datasource:
    initialize: false

로 둔 상태에서 ./gradlew bootRepackage로 실행가능한 아카이브 파일로 만들어두고

$ java -jar archive.war --spring.datasource.initialize=true

로 실행하면 최초에 data.sql이 실행될 것이다(아마도…?).

+ Recent posts