====== Liquibase ======
* https://www.liquibase.org/
* 오픈소스 [[java:database:migration|Java Database Migration]]
===== 기본 =====
* ''DATABASECHANGELOG'' 라는 테이블로 changeset 트래킹
===== Gradle =====
* https://github.com/liquibase/liquibase-gradle-plugin
plugins {
id 'org.liquibase.gradle' version '2.0.3'
}
// JDBC 드라이버 등 관련 의존성을 일일이 따로 걸어주거나 아래처럼 runtime에서 그대로 가져온다.
// 공식문서에는 runtime 을 상속하라고 돼 있지만 실제로는 runtimeClasspath 여야 작동했음. Gradle 6.5.x
configurations {
liquibaseRuntime.extendsFrom runtimeClasspath
}
// java 9 이상 버전 사용시에 jaxb 명시적 설정 필요.
liquibaseRuntime group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
// 혹시 logback 을 안사용한다면 추가 필요.
liquibaseRuntime("ch.qos.logback:logback-core:1.2.3")
liquibaseRuntime("ch.qos.logback:logback-classic:1.2.3")
// hibernate diff 모듈을 사용한다면,
liquibaseRuntime 'org.liquibase.ext:liquibase-hibernate5:3.6'
liquibaseRuntime sourceSets.main.output
liquibase {
activities {
main {
changeLogFile 'src/migration/changelog-main.xml'
url "jdbc:url..."
username "username"
password "password"
}
}
}
===== ChangeLog 관리 =====
* main changelog 관리 XML을 만들고, 거기서 각각 단일 changeset 을 가지는 다른 xml 들을 include 하는 형태로 관리하는 것이 좋다.
* 하나의 chagelog 파일은 하나의 changeset 만 가지는 것이 좋다.
* ''changelog-main.xml''
* ''changelog-1.0.xml'' ...
===== Change Set Types =====
==== sql ====
* https://docs.liquibase.com/change-types/community/sql.html
* SQL 구문을 있는 그대로 넣을 수 있다.
* 기본 delimiter가 '';'' 인데, 이 경우 Stored Procedure 구문등에 '';''가 있으면 구문을 나눠서 실행해서 문법 오류가 발생한다.
* ''endDelimiter'' 속성을 다른 값으로 변경하고, 해당값을 여러 구문을 구분하는 요소로 사용하도록 한다.
What about Bob?
===== 참조 =====
* [[https://www.liquibase.org/get-started/best-practices|Getting Started | Liquibase Best Practices | Liquibase.org]]
* [[https://www.youtube.com/watch?v=SyrjSPC8EZ8|Version based database migration with Liquibase - YouTube]]
* [[https://dzone.com/articles/managing-your-database-with-liquibase-and-gradle|Managing Your Database With Liquibase and Gradle - DZone Database]]
* [[https://joont92.github.io/etc/liquibase/|liquibase | 기록은 기억의 연장선]]
* [[https://www.baeldung.com/liquibase-vs-flyway|Liquibase vs Flyway | Baeldung]]