[java] Liquibase를 사용하여 데이터베이스 마이그레이션 수행하기

데이터베이스 스키마의 변경이 필요할 때, Liquibase는 유용한 도구입니다. Liquibase는 데이터베이스 스키마 관리를 위한 오픈 소스 도구로, 데이터베이스 마이그레이션을 쉽게 수행할 수 있게 해줍니다.

1. Liquibase 설정하기

Liquibase를 사용하기 위해 먼저 프로젝트에 Liquibase를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <version>4.5.0</version>
</dependency>

Gradle을 사용하는 경우, build.gradle 파일에 다음과 같이 의존성을 추가합니다.

implementation 'org.liquibase:liquibase-core:4.5.0'

2. Liquibase 변경셋 작성하기

Liquibase를 사용하려면 변경셋(change set)을 작성해야 합니다. 변경셋은 데이터베이스에 적용할 변경 내용을 정의하는 스크립트입니다. 예를 들어, 테이블을 생성하거나 컬럼을 추가하는 등의 작업을 변경셋에 포함할 수 있습니다.

변경셋은 XML 또는 YAML 형식으로 작성할 수 있습니다. 아래는 db-changelog.xml 파일에 작성된 예제입니다.

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                                       http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.5.xsd">

    <changeSet id="1" author="me">
        <createTable tableName="employees">
            <column name="id" type="int" autoIncrement="true" primaryKey="true"/>
            <column name="name" type="varchar(100)"/>
            <column name="age" type="int"/>
        </createTable>
    </changeSet>

    <changeSet id="2" author="me">
        <addColumn tableName="employees">
            <column name="email" type="varchar(100)"/>
        </addColumn>
    </changeSet>

</databaseChangeLog>

변경셋을 작성할 때, 각 change set에는 고유한 id(식별자)와 author(작성자)를 지정해야 합니다. 변경셋은 순차적으로 실행되므로, id는 변경셋 간의 순서를 정하는 데 사용됩니다.

3. Liquibase 실행하기

Liquibase는 명령줄 도구를 통해 변경셋을 데이터베이스에 적용합니다. 다음 명령어를 사용하여 Liquibase를 실행할 수 있습니다.

liquibase --changeLogFile=db-changelog.xml --url=jdbc:mysql://localhost:3306/mydatabase --username=myuser --password=mypassword update

위 명령어에서 --changeLogFile 매개변수는 변경셋 파일의 경로를 지정하고, --url, --username, --password 매개변수는 데이터베이스 연결 정보를 제공합니다. update 명령어는 변경셋을 데이터베이스에 적용하는 역할을 합니다.

Liquibase는 변경셋을 실행하면서 데이터베이스 스키마를 버전 관리하는데, 변경이 필요할 때마다 새로운 변경셋을 작성하여 버전을 관리할 수 있습니다.

추가 리소스