[java] 자바에서 Liquibase를 사용하여 초기 데이터 로딩하기

Liquibase는 데이터베이스 스키마를 관리하기 위한 오픈 소스 도구입니다. 이를 사용하여 데이터베이스 스키마의 변경 사항을 추적하고 관리할 수 있습니다. 이번 포스트에서는 Liquibase를 사용하여 자바 애플리케이션에서 초기 데이터를 로딩하는 방법을 알아보겠습니다.

1. Liquibase 설정

먼저, 프로젝트에 Liquibase를 추가하고 설정해야 합니다. 프로젝트의 pom.xml 파일에 다음 종속성을 추가하세요:

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

2. ChangeSet 생성

데이터베이스에 초기 데이터를 로딩하기 위해 Liquibase ChangeSet을 생성해야 합니다. src/main/resources/db/changelog 디렉토리에 data.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.3.xsd">

    <changeSet id="1" author="you">
        <createTable tableName="users">
            <column name="id" type="INT">
                <constraints primaryKey="true"/>
            </column>
            <column name="name" type="VARCHAR(255)"/>
            <column name="email" type="VARCHAR(255)"/>
        </createTable>
    </changeSet>

    <!-- 추가할 초기 데이터 -->
    <changeSet id="2" author="you">
        <insert tableName="users">
            <column name="id" value="1"/>
            <column name="name" value="John Doe"/>
            <column name="email" value="john@example.com"/>
        </insert>
        <insert tableName="users">
            <column name="id" value="2"/>
            <column name="name" value="Jane Smith"/>
            <column name="email" value="jane@example.com"/>
        </insert>
    </changeSet>
</databaseChangeLog>

위의 예제에서는 users 테이블을 생성하고 두 개의 초기 데이터를 삽입합니다.

3. Liquibase 실행

이제 애플리케이션에서 Liquibase를 실행하여 초기 데이터를 로딩할 차례입니다. App.java 파일을 만들고 다음과 같이 내용을 작성하세요:

import liquibase.Liquibase;
import liquibase.database.DatabaseFactory;
import liquibase.database.Database;
import liquibase.database.DatabaseConnection;
import liquibase.database.DatabaseConnectionConnection;
import liquibase.database.DatabaseFactory;
import liquibase.exception.LiquibaseException;
import liquibase.resource.ClassLoaderResourceAccessor;

public class App {
    public static void main(String[] args) {
        try {
            DatabaseConnection databaseConnection = new DatabaseConnectionConnection(yourDataSource.getConnection());
            Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(databaseConnection);
            Liquibase liquibase = new Liquibase("db/changelog/data.xml", new ClassLoaderResourceAccessor(), database);
            liquibase.update("");
        } catch (LiquibaseException e) {
            e.printStackTrace();
        }
    }
}

위의 예제에서 yourDataSource는 데이터베이스 연결을 위한 DataSource 객체입니다. 이를 알맞게 설정하여 사용하세요.

4. 애플리케이션 실행

이제 애플리케이션을 실행하여 Liquibase를 통해 초기 데이터를 로딩해보세요. App.java를 실행하면 Liquibase가 실행되고 users 테이블이 생성되며, 초기 데이터가 삽입될 것입니다.

이렇게 Liquibase를 사용하여 자바 애플리케이션에서 초기 데이터를 로딩할 수 있습니다. Liquibase를 통해 데이터베이스 스키마를 유지 및 관리하는 것은 애플리케이션의 개발과 유지 보수에 매우 유용합니다.

참고 자료