====== 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]]