[DB migration] Springboot & Flyway - 개발환경과 로컬환경의 DB가 다를 때 DB 마이그레이션 하기

여러 환경을 두고 개발하는 일은 매우 일반적이다.

  • 로컬, 개발, QA, 운영 ...

환경마다 사용하는 DB가 다를 수 있다.
개발환경에서는 가볍게 사용할 수 있는 H2를 사용하고 로컬에서는 운영환경에서 사용할 MySQL을 붙여서 DB와의 통합 테스트를 진행할 수 있다.

H2MySQL은 문법적으로 매우 비슷하지만 완전히 똑같지는 않다.
MySQLOracle이라면?? 문법적으로 다른 점이 더 많을 것이다.

hibernate의 도움을 받아 마이그레이션 할 때는 dialect라는 것에 도움을 받았다.
dialect는 방언이라는 뜻으로 각 DB에 해당하는 문법으로 SQL문을 만드는 기능이다.

직접 DDL을 작성해야 하는 경우 dialect의 도움을 받을 수 없다.

flyway를 사용하는 경우 flyway는 어떤 vendor의 DB를 사용할 지 모른다.
flyway에게 특정 vendor의 DB를 사용할 때 지정한 경로의 스크립트가 사용되도록 알려줘야 한다.


📌 설정

개발환경에서는 H2를 사용하고 운영환경에서 사용할 MySQL을 붙여서 테스트 하기 위해 MySQL을 사용하는 로컬환경을 운영할려고 한다.

flyway가 기본으로 스크립트 파일을 찾는 경로는 아래와 같다.

resouces/db/migration/V1__init.sql

flyway가 스크립트를 찾는 두번째 방법이 있다.
두번째 방법을 적용키기 위해 application.properties에 설정을 추가한다.

spring.flyway.locations=classpath:db/migration/{vendor}

이제 아래와 같은 경로에 스크립트를 위치시키면 사용되는 DB 종류에 따라 그에 맞는 경로의 스크립트가 실행될 것이다.

resouces/db/migration/mysql/V1__init.sql

resouces/db/migration/h2/V1__init.sql

같은 작업을 하지만 DB 문법이 달라서 다른 경로에 작성하는 경우 위와 같이 버전정보는 맞춰줘야 한다.

좋은 웹페이지 즐겨찾기