Liquibase

데이터베이스 스키마의 변경 이력을 코드로 관리하고 버전을 추적할 수 있게 해주는 DB 마이그레이션 도구입니다.

핵심 개념

동작 방식

코드 변경 → Changelog 작성 → 애플리케이션 실행
                                    ↓
              DATABASECHANGELOG 테이블 확인
                    ↓               ↓
              미적용 Changeset     이미 적용됨
                    ↓
              DB에 순서대로 적용

Changelog 예시

<!-- db/changelog/db.changelog-master.xml -->
<databaseChangeLog>

    <!-- v1: 테이블 생성 -->
    <changeSet id="1" author="kim">
        <createTable tableName="user">
            <column name="id" type="BIGINT" autoIncrement="true">
                <constraints primaryKey="true"/>
            </column>
            <column name="email" type="VARCHAR(255)">
                <constraints nullable="false" unique="true"/>
            </column>
        </createTable>
    </changeSet>

    <!-- v2: 컬럼 추가 -->
    <changeSet id="2" author="kim">
        <addColumn tableName="user">
            <column name="name" type="VARCHAR(100)"/>
        </addColumn>
    </changeSet>

</databaseChangeLog>
// Spring Boot - build.gradle
implementation 'org.liquibase:liquibase-core'

// application.yml
spring:
  liquibase:
    change-log: classpath:db/changelog/db.changelog-master.xml
    enabled: true

Liquibase vs Flyway

항목LiquibaseFlyway
파일 형식XML, YAML, JSON, SQLSQL, Java
롤백O 지원X 유료 플랜만
학습 난이도높음낮음
유연성높음낮음
Spring 통합OO

장단점

장점

단점

주의: 한번 적용된 Changeset은 수정하지 말 것. 변경이 필요하면 새 Changeset을 추가해야 합니다.

CSLOG에서 보기