flyway 로 DB 형상관리하기

김종하·2023년 6월 15일
0

flyway 란 무엇인가?

서비스를 운영하다 보면 기존 DB 구조가 변경되어야 하는 시점이 도래한다.

컬럼이 추가되거나 삭제될 수 있고, 테이블간 관계가 생기거나 끊길 수 도 있는데

데이터베이스 특성상 안정성이 필수적이기 때문에 이러한 작업들이 쉬운일이 아니다.

이럴 때 DB 변경이력을 관리함으로써 안정적으로 DB 구조를 변경할 수 있도록 도와주는 자바 진영 DB 형상관리 툴이라고 생각할 수 있다.

flyway 사용 방법

개발환경 : spring boot 2.7.11, gradle, mySQL

1. 새로운 프로젝트를 시작할 때 flyway 적용하려는 경우

기본적으로 flyway 는 스크립트를 기준으로 DB 변경이력들을 관리하게 된다는 점을 인식하고 시작하자.

  • 프로젝트 의존성 추가

mySQL 을 사용함으로 당연히 mySQL 드라이버에 대한 의존성이 필요하다.

이외에 flyway 의존성을 추가한다.

implementation 'mysql:mysql-connector-java:8.0.33'
implementation 'org.flywaydb:flyway-core:9.8.1'
implementation 'org.flywaydb:flyway-mysql:9.8.1'
  • flyway 스크립트 작성

default 설정 상 flyway 스크립트는 main.resources.db.migration 패키지 하위에 위치시킨다.
커스텀한 위치를 설정하고 싶다면 yml 에서 spring.flyway.locations 에 값을 주어 설정 가능하다.
→ 커스텀 설정을 통해 프로파일별 스크립트를 별도로 가져갈 수 있을 것이다.
커스텀 경로는 복수개로도 설정이 가능하다.
→ prod, test 환경에서 동일한 스크립트를 읽고 싶으면서 test 환경에 추가적인 스크립트가 필요하다면 복수개 경로를 설정해 해결 가능하다.

스크립트 파일의 naming 규칙은 다음을 참고하자.

  • YML 에 flyway 설정
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/study
    username: {userName}
    password: {passWord}
  flyway:
    locations: classpath:db/migration/test
    url: jdbc:mysql://localhost:3306/study
    username: {userName}
    password: {passWord}

2. flyway 를 사용하지 않던 프로젝트에 새로 도입해야하는 경우

  • YML 에 flyway 설정 추가
flyway:
    baseline-on-migrate: true
  • 스크립트 추가
    빈 스크립트를 작성해서 설정한 패키지 하위에 작성해두면 된다. (스크립트를 작성해둬도 괜찮다.)
    하지만 빈 스크립트이던 스키마를 작성해놓은 스크립트이던 필수적으로 스크립트 파일은 있어야 한다

2.1 flyway_schema_history 테이블이 있는 경우

  • YML 에 flyway 설정 추가
flyway:
    baseline-on-migrate: false
  • 히스토리에 있는 내역보다 높은 버전의 스크립트를 작성해서 이어나갈 수 있다.

0개의 댓글