Database ( DB )/Database

springboot에 flyway 사용

노루아부지 2020. 11. 2. 13:43

개발환경

  • OS: windows 10
  • java version: openjdk-1.8
  • Gradle version: 7.0
  • Springboot Version: 2.3.5
  • flyway version: 6.4.2
  • Database: MariaDB 1.5.6

 

 

 

 

 

Flyway란?

 

  • Flyway는 Open Source Migration Tool 입니다.
  • Java나 c++같은 프로그램의 소스 코드는 svn/git 과 같은 형상관리 툴로 쉽게 관리할 수 있지만, Database는 위와 같은 툴로 변경이력을 관리할 수 없습니다.

 

Spring Boot에서 Flyway 사용하기

 

의존성 추가

- maven이나 gradle에 아래와 같이 의존성을 추가합니다.

 

1) maven

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

 

2) gradle

dependencies {
    implementation 'org.flywaydb:flyway-core:6.4.2'
}

 

 

sql 파일 생성

  • resources/db/migration 폴더를 생성 후, V1_init.sql 파일을 생성합니다.
    • 만약 경로를 변경하고 싶을 경우에는 application.properties 파일에 spring.flyway.location=파일위치 를 사용합니다.
  • 위 파일은 꼭 따라야 하는 네이밍 규칙이 있습니다. 그에 관련된 내용은 아래와 같습니다.

flyway file naming

  • File Naming
    • 왼쪽부터 prefix, version, description, suffix 순
    • prefix: devault로 V는 버전 마이그레이션, R은 반복 마이그레이션 용 접두사(반드시 V또는 R로 시작해야 flyway가 인식)
    • version: version은 버전 마이그레이션에서만 사용되며, 숫자와 Dots(점)이나 underscore(언더바) 조합으로 구성(반복 마이그레이션에서 version을 명시하면 file name 제약 위반으로 에러 발생)
    • version과 description 사이의 __(언버바 2개)는 반드시 있어야 함(1개면 에러 발생)
    • descriptiuon: schema_version 테이블에 저장 시 설명으로 사용
    • suffix: 확장자 기본은 .sql

 

application.properties 파일에 아래 내용 추가

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/mysql
spring.datasource.username=username
spring.datasource.password=password

# FLYWAY (FlywayProperties)
spring.flyway.baseline-on-migrate=true
spring.flyway.baseline-version=0
spring.flyway.useMysqlMetadata=true
  • spring.flyway.baseline-on-migrate
    • 기본값: false
    • false:로 하려면 flyway_schema_history 테이블이 생성되어 있어야 함
    • true로 하면 flyway_schema_history 테이블이 없는 경우 생성함
  • spring.flyway.baseline-version
    • 기본값: 1
    • 보통 버전파일이 V1__의 형태로 버전 1부터 시작하기 때문에 0으로 하는 것을 추천
  • gradle에 flyway 플러그인을 설정하는 것은 gradle을 통해서 flyway 명령어를 실행하기 위한 설정으로, flyway명령을 gradle을 통해서 쓸 것이 아니라면 딱히 설정할 필요 없음
  • flyway는 url을 파싱하여 드라이버를 자동 선택함

 

 

Spring boot Run

spring boot를 run하면 접속한 DB 스키마(여기서는 mysql)에 flyway_schema_history 테이블이 생성됩니다.

 

 

 

 

[참고] 에러

Flyway 10.1 is no longer supported by Flyway Community Edition, but stil supported by Flyway Pro Edition.

> MariaDB의 버전을 10.2 이상으로 올리면 해결됩니다.

728x90

'Database ( DB ) > Database' 카테고리의 다른 글

CentOS 7에 MariaDB 설치  (0) 2021.01.02
mssql] Adding an identity to an existing column  (0) 2021.01.01
HikariCP Dead lock  (0) 2020.10.18
HikariCP 소개  (0) 2020.10.17
Spring boot Data JPA 2.0에서 auto_increment 문제 해결  (2) 2020.10.14
loading