회사 프로젝트 규모가 커지고 팀원이 많아질수록 데이터베이스(이하 DB) 싱크를 맞추는게 생각보다 쉽지가 않았다. 이로 인한 스트레스를 줄이고자 코드를 형상 관리해주는 Git과 같은 좋은 툴이 있나 찾아보았고, 최종적으로 Spring 진영에서 많이들 사용하고 있는 Flyway
를 적용해보기로 결정하였다.
앞서 설명한 것처럼 Flyway는 DB의 형상 관리를 담당해주는 오픈소스 DB Migration Tool이다.
Flyway가 읽어들이는 SQL 스크립트의 경우 정해져있는 네이밍 규칙이 있다.
현재 진행 중인 프로젝트에 Flyway를 적용하려면 아래와 같은 과정을 거쳐야한다.
implementation("org.flywaydb:flyway-core")
runtimeOnly("org.flywaydb:flyway-sqlserver")
flyway:
enabled: true
baseline-on-migrate: true #flyway_schema_history 자동 생성
baseline-version: 1 # 시작 버전
locations: classpath:db/migration # default
아래와 같이 path directory 설정 (flyway.locations)
classpath:db/migration/local
과 같이 yml 파일에 설정해줘야 함DB 형상 관리를 추적하기 위한 SQL 스크립트 작성
-- V202406111208__init.sql 파일 내부
-- init Flyway SQL Script
-- 기존에 존재하는 DB에 Baseline을 설정해주기 위한 공백 파일
flyway_schema_history
테이블에 저장된 checksum
값을 보고 형상 관리를 수행하기에 삭제를 하면 추적이 불가능해짐연도, 월, 일, 시간, 분
을 합쳐 Version으로 표기현재까지 Flywaya를 적용하고 나서의 만족도는 매우 크다. 물론 아직까지 적용 초기 단계이고 모든 팀원들이 DB 변경에 참여하고 있지는 않아 발견되지 않은 문제들이 많겠지만, 개발 후 실서버 배포 시점에 항상 느꼈던 스트레스가 현저히 줄었고 Human Risk 또한 확실하게 줄어든게 체감이 된다.
Flyway 도입을 망설이고 계시거나 도입을 하려고 하지만 선뜻 방법을 모르시겠는 개발자분들에게 도움이 되셨으면 좋겠습니다!!