Spring/Java

[Spring] flyway를 사용한 db 형상관리

java곰 2024. 7. 20. 22:01

성능 개선을 위해 고민하던 중 우테코에서느는 어떤 기술들을 사용하나 궁금해서 프로젝트 깃허브들을 훑어보며 여러가지 새롭게 알게된 것들과 이번 프로젝트에 적용하면 좋을 기술들을 찾았습니다.

그 중 하나가 이번 포스팅의 주제인 flyway 데이터베이스 형상 관리 라이브러리입니다.

spring에서는 jpa, hibernate를 많이 사용하고 entity들이 바뀌면 ddl-auto를 사용하여 db를 업데이트합니다.

하지만 이 방법은 테이블들에 대한 기록들이 안남아 커밋내역을 찾아봐야한다는 단점이 있습니다. 

 설치

    implementation 'org.flywaydb:flyway-core'
    implementation "org.flywaydb:flyway-mysql"

저는 mysql을 사용하므로 mysql에 관한 디펜던스도 같이 사용합니다.

flyway:
  # Flyway를 활성화합니다. false로 설정하면 Flyway가 비활성화됩니다.
  enabled: true

  # 이 옵션을 true로 설정하면, Flyway가 비어있지 않은 스키마를 마이그레이션할 때
  # 자동으로 기준선(baseline)을 설정합니다. 이는 기존 데이터베이스에 Flyway를 적용할 때 유용합니다.
  baseline-on-migrate: true

  # 마이그레이션 스크립트 파일이 위치한 경로를 지정합니다.
  # 여기서는 클래스패스의 'db/migration/local' 디렉토리에 있는 스크립트를 사용합니다.
  locations: classpath:db/migration/local

  # 기준선(baseline) 버전을 설정합니다. 
  # Flyway는 이 버전보다 높은 버전의 마이그레이션만 적용합니다.
  baseline-version: 1

  # 지정된 위치(locations)에 마이그레이션 스크립트가 없을 경우 실패하도록 설정합니다.
  # 이는 잘못된 경로 설정으로 인한 문제를 방지하는 데 도움이 됩니다.
  fail-on-missing-locations: true

환경설정에 관한 내용입니다. 간단하게 사용하려면 enabled: true만 작성해도 작동됩니다.

스크립트 작성

환경설정까지 완료 후엔 resource/db/migration 위치에 스크립트를 작성해야합니다. 해당 스크립트는 db의 table들에 대해 작성해두시면 됩니다.

파일명은 V1__init.sql같은 이름을 사용해주시면 됩니다.

  1. V(버전)__(설명).sql이 컨벤션입니다.
  2. 해당 컨벤션을 안지키면 flyway가 해당 파일을 인식못합니다.

해당 파일까지 작성 후 실행해 주시면 db에 flyway_schema_history 테이블이 생기며 해당 버전에 대한 기록이 남습니다.