본문 바로가기
Java, Kotlin, Spring/Spring, Spring Boot

Spinrg data 초기화, migration

by Wordbe 2021. 1. 20.
728x90

Springboot - Spring Data 초기화, migration

 

 

초기화

 

JPA로 DB 초기화

application.properties

spring.jpa.hibernate.ddl-auto=update
  • update : 자동으로 DB schema(테이블, 칼럼 등)가 생성된다. 기존에 것은 냅두고, 새로운 스키마를 추가해준다.
  • create : 이미 있던 스키마를 제거하고 새로 스키마 생성한다. 안에 있던 데이터도 삭제된다.
  • create-drop : 자동 스키마 생성하고 종료할 때 삭제한다.
spring.jpa.generate-ddl=true

이 옵션도 추가해야 스키마가 생성된다.

운영용 환경에서는 아래와 같이 사용하면 객체가 엔터티와 잘 매핑이 되어있는 지 검증하는데 유용하다.

spring.jpa.hibernate.ddl-auto=validate
spring.jpa.generate-ddl=false

 

 

 


SQL 스크립트로 DB 초기화

application.properties

spring.jpa.show-sql=true

위와 같이 설정한 후 테스트 코드를 실행하면, 사용한 DDL 스크립트가 나온다.

이를 복사해서 schema.sql 파일에 저장하면 springboot 는 이 파일을 읽어 데이터베이스를 초기화한다.

/resources/schema.sql

drop table if exists food CASCADE
drop sequence if exists hibernate_sequence
create sequence hibernate_sequence start with 1 increment by 1
create table food (id bigint not null, category varchar(255), name varchar(255), primary key (id))

 

또한, schema-${platform}.sql 로 파일을 만들면, 데이터베이스 종류에 따라 다른 초기화설정을 할 수 있다.

application.properties

spring.datasource.platform=postgres

위와 같이 설정한 후 schema-postgres.sql 파일을 만들고 그 안에 SQL을 넣으면 된다.

 

 

 


Migration

데이터베이스 마이그레이션이란, 데이터베이스의 데이터 뿐 아니라, 모든 테이블, 스키마, 규칙을 다른 곳으로 이관하는 것을 말한다.

Spring과 연동되어 마이그레이션을 지원하는 플러그인으로 Flyway, Liquibase 등이 있다.

DB 에서 일어나는 변경을 sql 파일로 변경 관리할 수 있다.

 

Flyway 로 실습을 해보자. flyway 는 sql 파일을 사용한다.

 

먼저 의존성을 추가한다.

pom.xml

<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-maven-plugin</artifactId>
  <version>7.1.1</version>
</dependency>

예전 실습에서 postgres 에 이미 테이블을 만들어 놓았으니, DB 를 초기화 하자. 도커 이미지를 삭제하는 방법이 쉽고 빠르다.

$ docker stop springboot-postgres
$ docker rm springboot-postgres

그리고 다시 이미지를 불러와, 컨테이너를 실행시켜준다.

$ docker run -p 5432:5432 -e POSTGRES_PASSWORD=1234 -e POSTGRES_USER=wordbe -e POSTGRES_DB=springboot --name springboot-postgres -d postgres
$ docker exec -it springboot-postgres bash



이제 스프링부트 설정을 하자.

스프링부트에서 마이그레션 디렉토리는 db/migration, db/migration/{vendor}이다.

vender는 mysql, postgreSQL 등 db 종류이다.

 

/resources/db/migration 에 아래 파일을 생성한다.

마이그레션 파일 이름은 V숫자__이름.sql 형식을 따르도록 한다. V는 대문자, 숫자는 순차적으로, 숫자와 이름 사이 언더바 2개, 이름은 서술형태로 적어주면 된다. 나중에 버전 로그로 자세하게 남는다.

V1__init.sql

drop table if exists food;
drop sequence if exists hibernate_sequence;
create sequence hibernate_sequence start with 1 increment by 1;
create table food (id bigint not null, category varchar(255), name varchar(255), primary key (id));

스프링부트 애플리케이션을 실행시키면, 테이블과 칼럼들이 생기면서 flyway_schema_history 에 업데이트 된 버전과 내용이 기록된다.

 

이제 칼럼 하나를 추가해보자.

@Getter @Setter @EqualsAndHashCode
@Entity
public class Food {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    private String category;

    private String color;
}

color 필드 (칼럼)을 추가했다.

 

V2__addColumn_color.sql

alter table if exists food add column color varchar(255);

flyway_schema_history 중에서 version 을 보자.

V1__init.sqlV2__addColumn_color.sql이 모두 반영되어 기록된 것을 볼 수 있다.

 

 

 

 

 

728x90

'Java, Kotlin, Spring > Spring, Spring Boot' 카테고리의 다른 글

Spring Data - Redis  (0) 2021.01.21
Spring Data - Neo4j 사용  (0) 2021.01.20
Springboot - Spring Data JPA  (0) 2021.01.20
Spring Data - PostgreSQL  (0) 2021.01.20
Spring Data - MySQL  (0) 2021.01.20

댓글