Backend/SpringBoot

Flyway 사용하기

Dean83 2025. 12. 4. 16:35

DB와 백앤드 서버는 아주 밀접한 연관이 되어 있다. 예전에는 DBA가 따로 있어 주로 DB를 관리해 주었는데.... 이제는 그 역할조차 백앤드에서 밀도있게 담당하는게 일반적인것 같다. 여튼, DB 테이블 생성, 관리 등에 있어서 flyway 는 여러 잇점을 가지고 있고, 많이 쓴다고 한다. 

 

버전 관리도 되고, 히스토리 관리도 되고 등등..

 

Springboot 4.0.0 버전에서는 내장되어 공식적으로 라이브러리를 제공해주는것 같으나, 3.5.8 버전에서는 그렇지가 못하다. 

이 페이지에서는 3.xx 버전에서 사용법을 다루려고 한다. 

 

Flyway의 간략한 특징은 다음과 같다. 

  • 버전 넘버링 된 sql 파일들을 순차적으로 실행한다.
  • 이미 실행한 이력이 있을경우 건너뛴다.
    • 이를 위해 테이블에 flyway_schema_history 라는 테이블을 생성하고 관리한다.

 

1. gradle 추가

  • 이 부분은 사용 환경에 따라 나뉘게 된다. 기본적으로는 implementation 'org.flywaydb:flyway-core' 를 사용한다. 그러나 이 경우 postgresql 17 버전은 지원하지 않아, 아래의 라이브러리를 사용해야 한다. 
   implementation 'org.flywaydb:flyway-database-postgresql'
  • 마찬가지로 mysql을 쓰는데 지원하지 않는 경우에는 각각 명시된 라이브러리를 사용해야 한다.  (공식문서)

 

2. application.yaml 설정 추가

  • 다른 옵션들은 크게 추가 할 것은 없고, 이 값은 true로 설정하는것이 대부분이다
  • 이미 테이블이 있는 DB 에 flyway를 적용할때 사용하는 옵션이나, 아무것도 없는 빈 DB 에서 사용해도 무방하므로 true 값으로 주는것이 좋다. 
  • false 로 주고, 이미 테이블이 있는 DB에 적용할 경우, 오류가 난다.
spring:
  flyway:
    baseline-on-migrate: true

 

3. sql 파일 추가

  • 기본적으로 resources -> db -> migration 폴더 안에 .sql 파일을 추가 하게 된다.
  • 버전으로 나누어 작성을 하게 되고, 버전이 낮은순 -> 높은순으로 순차 실행을 하게 된다 (실행이 안되었을 경우)
  • 파일 규칙은 다음과 같다.
    • 파일의 맨 앞에는 V숫자
      • 예 : V1 또는 V2 .... 처럼 버전 번호가 들어간다. V는 대문자 이다.
    • 언더바 두개 (__)
    • 파일명.sql
      • 보통 기본 파일은 V1__init.sql 로 작성한다.
  • R__파일명.sql 의 경우, 반복적으로 실행해야 할때 사용한다. 따로 버전이 없다. (예 : 리포팅 등)