Skip to content

flyway 개요와 활용법

SungSiHyung edited this page Sep 7, 2021 · 2 revisions

flyway 개요

공식문서

build.gradle

implementation 'org.flywaydb:flyway-core:6.4.2'

application.yml

spring:
  flyway:
    baselineOnMigrate: true // 베이스라인을 기준으로 시작한다.
    locations: classpath:db/migration/prod //버전 파일들의 위치. 디폴트는 main/java/resources/db/migration
    enabled: true // 플라이웨이 버전 검사 및 새로운 버전의 sql 실행 여부를 결정

flyway 의존성을 받아주고, 스프링에서 세가지의 설정을 해준다. 버전에 적용되어야 할 sql은 locations에 적어준 디렉토리, resources/db/migration/prod 에 변경해야할 스키마 및 데이터 처리 쿼리를 적어주면 된다.

실제 작성 예시

추가

  • Member에 a라는 칼럼을 추가하는 예시
public class Member {
...
    @Column
    private String a;
...

migrate sql 파일이름 양식 : V{버전명}__{상세내용}.sql (중간 언더바는 두 개여야 인식한다 __)

V2__add_column_a.sql

alter table member add a varchar(255) null; 

적용 결과

스크린샷 2021-09-07 오후 4 38 15

롤백

공식 문서에선 UNDO 태스크를 제공하지만, community 버전에선 지원하지 않는다. 대안으로, 롤백해야 되는 스키마와 DDL을 다음 버전으로 만들어 커밋하는 방법이 있다.

  • Member에서 a라는 칼럼을 삭제하는 예시
public class Member {
...
   /*
    * @Column
    * private String a;
   */
...

V3__delete_column_a.sql

alter table member drop column a; 

적용 결과

스크린샷 2021-09-07 오후 4 44 15

주의사항

  • 현재 dev와 prod는 ddl-auto : validate 이므로, 테이블 스키마와 객체 필드간의 연관관계가 틀리다면 서버가 실행되지 않는다.
ERROR [org.springframework.boot.SpringApplication.reportFailure]:871] 
    > Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' ... Schema-validation: missing column [a] in table [member]

Clone this wiki locally