TIL #9 Flyway

eunseo·2022년 4월 9일
0

TIL

목록 보기
9/9
post-thumbnail

flyway는 데이터베이스의 형상관리를 목적으로 하는 툴입니다.

데이터베이스의 DDL의 이력을 쌓아서 DDL이 어떻게 변화되었는지 관리하는 툴로 사용할 수 있습니다. 또한 seed 데이터를 삽입 시킬 수도 있습니다. DDL 뿐만 아니라 Seed 데이터도 flyway로 관리할 수 있습니다.

의존성 추가

implementation 'org.flywaydb:flyway-core'

YAML 파일 설정

flyway:
    enabled: true
    baseline-on-migrate: true
    locations: classpath:db/migration, classpath:db/seed

마이그레이션 파일
flyway에서는 데이터베이스에 일어나는 모든 행위를 마이그레이션이라고 표현하고 있습니다.
이러한 마이그레이션은 파일로 관리되어 집니다. 파일의 이름은 지정하는 형식이 있으며 이를 따라야 합니다.

  • Prefix - V, U, R 중 하나를 입력하게 됩니다. V는 Verion, U는 undo, R은 Repeatable 입니다.
  • Version - 버전 정보입니다. 정수, 소수, 날짜 등이 가능합니다.
  • Seperator - __ ( underscore 2개를 이용합니다. )
  • Description - 추가되는 설명입니다. _ (underscore)가 space를 대신합니다.

flyway_schema_history 테이블

  • checksum은 파일의 내용을 hashing한 것입니다. 만약 파일의 내용이 달라지면 이 체크섬이 달라지게 됩니다.

Q. v6까지 만들고 v7을 했을 때 플라이웨이는 v6까지 된것을 알고 7부터 수행을 할까?
A. 플라이웨이를 실행하면 플라이웨이 스키마 히스토리 테이블이 생성됩니다. 히스토리 테이블과 마이그레이션을 비교합니다. 버전 번호가 현재로 표시된 버전보다 낮거나 같으면 무시됩니다. 각 마이그레이션이 적용될 때마다 히스토리 테이블이 그에 따라 업데이트됩니다. 따라서 버전 6이 이미 있고 7 마이그레이션을 실행했을 때 7만 수행되는 것입니다.

Q. v7을 잘못적용시켜서 v7을 수정하면 어떤일이 발생할까?
A. 적용된 마이그레이션을 변경할 경우 checksum이 달라서 Flyway가 불일치를 감지하기 때문에 에러가 발생합니다.
해결방법
1) history 테이블의 해당 row를 포함한 이후 row를 삭제하고 다시 마이그레이션을 실행합니다.
2) 해당 파일에 대한 체크섬에 대해 repair이 필요합니다.

참조
https://sabarada.tistory.com/193

profile
backend developer

0개의 댓글