Skip to content

[BE] DB flyway

xrabcde edited this page Aug 3, 2021 · 8 revisions

Flyway란?

  • Flyway는 오픈소스 마이그레이션 툴이다.
  • 소스코드를 형상관리하는 Git과 같이 Flyway는 버전 관리 목적인 SCHEMA_VERSION 테이블을 통해 SQL 스크립트의 변화를 추적하면서 자동적으로 DB를 관리한다.

준비

  • 스프링 부트 build.gradle에서 의존성을 추가한다.
dependencies {
    implementation 'org.flywaydb:flyway-core:6.4.2'
}
  • application.properties에 아래 설정을 추가한다.
# flyway
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으로 하는 것을 추천

flyway 적용 후 DB 변경방법

  1. sql 파일 생성
  • resources/db/migration 위치에 sql 파일을 생성한다.
  • 파일의 네이밍 규칙은 다음과 같다.
    naming
    • 왼쪽부터 prefix, version, description, suffix 순
    • prefix : default로 V는 버전 마이그레이션, R은 반복 마이그레이션 용 접두사 (반드시 V 혹은 R로 시작)
    • version : version은 버전 마이그레이션에서만 사용되며 숫자나 언더바 조합으로 사용
    • version과 description 사이의 __ (언더바 2개)는 반드시 있어야 함 (1개면 에러 발생)
    • description : schema_version 테이블에 저장시 설명으로 사용
    • suffix : 확장자, 기본은 .sql
  1. 파일에 DB에 변경하고자 하는 내용의 SQL문을 작성한다.
  • 컬럼 추가
ALTER TABLE table_name ADD COLUMN ex_column varchar(20) NOT NULL;
  • 컬럼 변경
ALTER TABLE table_name MODIFY COLUMN ex_column varchar(20) NULL;
  • 컬럼 이름까지 변경
ALTER TABLE table_name CHANGE COLUMN ex_column ex_column2 varchar(20) NULL;
  • 컬럼 삭제
ALTER TABLE table_name DROP COLUMN ex_column;
  1. 작성한 sql 문과 함께 기능에 대한 PR을 날린 뒤, dev에 머지가 되면 빌드시 DB에 변경사항이 반영된다.
Clone this wiki locally