ZIO 로 간단한 프로젝트를 따라하며 배우던 중, DB migration 툴인 flyway를 설정하다가 빌드가 되지 않아 원인을 찾느라 고생하고 있었다.
위의 사진과 같은 에러를 뿜고있었고, 에러 로그를 보며 처음에는
Exception in thread "zio-fiber-8" sttp.client3.DeserializationException: sttp.client3.DeserializationException: (expected '[' got '<')
라고 써있는 빨간 글씨에 집중했지만, 이내 다른 곳을 보니 의미있는 문장을 찾을 수 있었다.
WARN o.f.core.internal.command.DbValidate No migrations found. Are your locations set up correctly?
즉 migration 의 location 설정이 잘못되어있다는 것이다.
나는 분명 그대로 따라했었던것같은데..?
내 디렉토리 설정은 아래와 같이 되어있었다.
설마 저 resources.db.migration
을 계층폴더로 인식 못하는걸까..
가정이 맞았다. 사진과 같이 디렉토리를 제대로 설정해주고, resources 디렉토리로도 잘 지정해주었다. (이름을 바꾸니 자동으로 적용되었었다.)
다시 테스트코드를 작동시키니 아래와 같은 로그와 함께 migration이 잘 작동하는 것을 확인할 수 있었다.
00:05:51.196 [ZScheduler-6] INFO o.f.core.internal.command.DbValidate Successfully validated 1 migration (execution time 00:00.009s)
00:05:51.206 [ZScheduler-6] INFO o.f.core.internal.command.DbMigrate Current version of schema "public": 001
00:05:51.208 [ZScheduler-6] INFO o.f.core.internal.command.DbMigrate Schema "public" is up to date. No migration necessary.
그나저나 flyway는 테스트코드로 동작시켰을 때는 테스트가 종료되기 전 롤백을 하나보다. 데이터 삽입 쿼리가 있는데 해당 데이터가 테스트 이후에 DB에서 조회되지 않는다.