성능 개선을 위해 고민하던 중 우테코에서느는 어떤 기술들을 사용하나 궁금해서 프로젝트 깃허브들을 훑어보며 여러가지 새롭게 알게된 것들과 이번 프로젝트에 적용하면 좋을 기술들을 찾았습니다.
그 중 하나가 이번 포스팅의 주제인 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같은 이름을 사용해주시면 됩니다.
- V(버전)__(설명).sql이 컨벤션입니다.
- 해당 컨벤션을 안지키면 flyway가 해당 파일을 인식못합니다.
해당 파일까지 작성 후 실행해 주시면 db에 flyway_schema_history 테이블이 생기며 해당 버전에 대한 기록이 남습니다.