Flyway란?
flyway는 데이터베이스 형상관리를 위한 오픈소스 툴입니다.
장점
- flyway는 데이터베이스의 스키마를 버전별로 관리하며 이를 통해 변경 이력을 쉽게 추적할 수 있습니다.
- 데이터베이스의 변경사항이 생길 때 쉽게 처리할 수 있습니다.
- 서로 다른 환경에서의 database 변경사항을 자동으로 손쉽게 처리할 수 있습니다.

How to use
의존성
implementation 'org.flywaydb:flyway-core'
gradle에서 flyway를 사용하기 위한 의존성입니다.
yml 설정
flyway: enabled: true baseline-on-migrate: true
yml 파일의 flyway 설정입니다.
- enabled
flyway를 사용하겠다는 설정으로 기본값은 true이며 명시적으로 사용한다는 것을 보여주기 위해 추가 합니다.
- baseline-on-migrate
flyway는 버전 정보를 flyway_shcema_history 라는 테이블에서 관리하는데 해당 테이블을 자동으로 생성해주는 옵션입니다.
기본값은 false로 히스토리 테이블이 이미 존재할 때 사용합니다.
Convention

- Prefix
파일명 앞에 붙는 접두사로 반드시 V또는 R 혹은 U로 시작해야만 flyway가 인식합니다
- Version
버전은 버전 마이그레이션에서 사용되며, 숫자와 .(점)이나 underscore 조합으로 구성됩니다.
- Repeatable
반복 가능한 마이그레이션에서 사용 되며 버전에 상관없이 매번 실행되는 스크립트로 버전 명시가 필요 없습니다.
예시로 테스트를 위해 매번 더미데이터를 넣을 때 사용합니다.
- Undo
실행 취소를 의미하며 현재 버전을 이전 버전으로 되돌리는 경우 사용합니다.
- Separator
설명부분을 구분하기 위한 구분자이며 반드시 undersocre를 2개( __ ) 써야합니다.
- Description
보통 테이블에 저장시 설명으로 사용되며 밑줄이나 공백으로 단어를 구분합니다.
- Suffix
접미사로 보통 .sql을 사용합니다.
Scripts convention
V20220808__ALTER_COLUMN_BOOKSTORE;
사용 예시
예제
Book.java 도메인에 bookstore 컬럼을 추가한다고 가정합니다.
@Column(length = 500) private String bookStore;
해당 코드를 추가 합니다.
네이밍 컨벤션에 맞는 DDL 파일을 resources.db.migration에 추가합니다.
ALTER TABLE book ADD book_store varchar(500);
유의 사항
flyway로 등록된 순간을 기준으로 flyway가 DB버전 관리를 하게 되므로 해당 스크립트를 수정, 삭제를 하면 안됩니다.
즉 flyway로 관리하는 시점 이후로는 데이터베이스에 변경 내역이 생기면, flyway DDL을 만들어 관리해주어야 합니다.
또 새로 스크립트를 작성한다면, 스크립트의 버전을 이전보다 꼭 높게 적어야 합니다.
이전보다 낮은 숫자를 쓰면, Flyway가 이를 무시하고 적용하지 않기 때문입니다.