전체 검색

제목·요약·본문으로 찾아보세요.

문제 해결1분Flyway

배포 환경에서만 거부되는 Flyway 마이그레이션

배포 환경 DB에 더 높은 버전이 이미 적용되어 새 스크립트가 지나간 버전으로 판정된 것이며, 그 스크립트가 어느 환경에 적용됐는지에 따라 버전 조정과 보정 마이그레이션 중에서 고른다.

목차

로컬에서는 잘 적용되던 Flyway 마이그레이션이 개발계에 배포할 때 Detected resolved migration not applied to database: <version> 오류를 내며 부팅을 거부했다.

두 환경의 마이그레이션 이력이 갈린 것이 원인이다. 개발계 DB에는 이미 더 높은 버전이 적용되어 있는데, 새로 추가한 스크립트의 버전 번호가 그보다 낮았다. Flyway는 적용된 버전보다 낮은 스크립트를 이미 지나간 버전으로 판정한다. 브랜치를 병합하거나 코드를 이관하는 과정에서 흔히 생기는 상황이다.

환경별 적용 이력 확인

아직 공유 환경에 적용하지 않았고 폐기해도 되는 로컬 DB만 사용했다면, 로컬 DB를 다시 만드는 것을 조건으로 뒤쪽 버전으로 조정할 수 있다. outOfOrder=true는 누락된 낮은 버전을 뒤늦게 적용하는 선택지다. 다만 기존 변경과 실행 순서가 바뀌어도 결과가 안전한지 검증한 뒤에 써야 한다. 버전 리네임과 outOfOrder 중 어느 하나가 언제나 안전한 것은 아니다.

확인 범위

Flyway의 버전 판정과 outOfOrder 동작은 위 공식 문서로 확인했다. 실제 사례에서는 스크립트가 공유 환경에 적용되기 전이라 버전 번호를 뒤로 조정해 해결했고, outOfOrder는 쓰지 않았다.

배포 환경에서만 거부되는 Flyway 마이그레이션