서비스를 운영하다 보면 기존 DB 구조가 변경되어야 하는 시점이 도래한다.
컬럼이 추가되거나 삭제될 수 있고, 테이블간 관계가 생기거나 끊길 수 도 있는데
데이터베이스 특성상 안정성이 필수적이기 때문에 이러한 작업들이 쉬운일이 아니다.
이럴 때 DB 변경이력을 관리함으로써 안정적으로 DB 구조를 변경할 수 있도록 도와주는 자바 진영 DB 형상관리 툴이라고 생각할 수 있다.
개발환경 : spring boot 2.7.11, gradle, mySQL
기본적으로 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'
default 설정 상 flyway 스크립트는 main.resources.db.migration 패키지 하위에 위치시킨다.
커스텀한 위치를 설정하고 싶다면 yml 에서 spring.flyway.locations 에 값을 주어 설정 가능하다.
→ 커스텀 설정을 통해 프로파일별 스크립트를 별도로 가져갈 수 있을 것이다.
커스텀 경로는 복수개로도 설정이 가능하다.
→ prod, test 환경에서 동일한 스크립트를 읽고 싶으면서 test 환경에 추가적인 스크립트가 필요하다면 복수개 경로를 설정해 해결 가능하다.
스크립트 파일의 naming 규칙은 다음을 참고하자.
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}
flyway:
baseline-on-migrate: true
flyway:
baseline-on-migrate: false