티스토리 뷰
제목 : springboot에 flyway라이브러리 사용
※ 개발환경
- windows10
- java version "1.8.0_171"
- Intellij 버전 2018.1.3
- Gradle 버전 4.7
- Spring Boot 버전 2.0.2.RELEASE
- flyway 5.0.7
- MySQL 5.5.59 (예제 Database는 www.mysqltutorial.org에서 제공하는 mysql용 예제 classicmodels 를 사용하였습니다.)
Database Schema를 좀 더 쉽게 관리하게 도와주는 툴, 라이브러리이다. https://flywaydb.org/ 에서 배포한다.
flyway의 스키마 관리 방법은 DB접속정보를 flyway의 설정파일에 기록하여 접근하도록 한 후, flyway 명령어를 통해 SQL 파일의 내용을 마이그레이션 하는것이다.
첫번째는 flyway baseline 으로 해당 DB에 flyway_schema_history 테이블을 생성한다.
그후 프로젝트의 src/main/resources/db/migration 디렉토리에 특정 패턴의 파일명을 가진 .sql파일을 만들어 migrate명령어를 사용하여 해당 sql문을 실행하는 방식이다.
기본적인 사용방법은 위에서 기술한것과 같으나, 이 툴은 프로그램으로도 존재하며 API, MAVEN, Gradle, Ant, SBT로 사용 가능하다. 여러가지 실행 모드 DB에 접근하는 설정방법도 실행모드에 따라 다르다. 기본 설정을 재정의 할 수도 있다.
이 글에선 windows에서 Ubuntu서버에 설치되어 있는 mysql5.5버전의 DB를 설정하였으며, gradle 프로젝트(Spring 기반)에서 사용하는 방법을 기술한다.
1. start.spring.io 에서 기본 골격 생성
web, Flyway, MySQL, MyBitis 를 Dependencies 로 선택한다.
2. application.properties 에 DB 접속 정보 작성
이 부분은 실제 flyway의 설정과 관련은 없다. DB관련 설정이 각각 기술되어야 한다는것을 알리기 위함이다.
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://172.30.1.43:3306/classicmodels spring.datasource.username=<너의 ID> spring.datasource.password=<너의 PASSWORD> mybatis.mapper-locations=classpath*:/mapper/*.xml mybatis.configuration.map-underscore-to-camel-case=true mybatis.type-handlers-package=com.github.magicdol
3. build.gradle 내용 추가
flyway는 이 설정의 DB를 사용한다. 최신 버전에서는 multiple databases 에 대해 설정하는 방법도 설명하고 있다.
plugins { id "org.flywaydb.flyway" version "5.0.7" }
flyway { url = 'jdbc:mysql://172.30.1.43:3306/classicmodels' user = 'magicdol' password = 'magicdol1' }
4. src/main/resources/db/migration 디렉토리 생성
이곳에 sql 파일을 작성하면 gradle flywayMigrate 명령으로 sql 파일 내용을 DB에 적용 시킬 수 있다. 파일명 규칙을 따르면 어플리케이션이 재실행 될때 flyway_schema_history 테이블을 참조하여 자동으로 마이그레이션이 적용된다.
5. gradle flywayBaseline -i 실행
처음 DB 에 flyway_schema_history 테이블을 생성하는 명령어이다. build.gradle 에 설정되어 있는 DB에 해당 테이블을 생성하여 스키마 버전관리를 시작한다.
※ 참고자료
※ 소스