[java] Liquibase를 사용하여 자바 애플리케이션의 데이터베이스 압축 관리하기

많은 Java 애플리케이션은 데이터베이스를 사용하여 데이터를 저장하고 관리합니다. 애플리케이션의 개발 및 업데이트 과정에서 데이터베이스 스키마 변경이 필요한데, 이러한 변경 사항을 관리하고 배포하는 것은 중요한 과정입니다. 이를 위해 Liquibase라는 도구를 사용할 수 있습니다.

Liquibase는 자바 기반의 데이터베이스 마이그레이션 도구로, 데이터베이스 스키마를 버전 관리하고 변경 사항을 추적하는 데 도움을 줍니다. Liquibase를 사용하면 애플리케이션 개발 및 배포 과정에서 데이터베이스의 구조를 쉽게 변경할 수 있습니다.

Liquibase 설정하기

Liquibase를 이용하기 위해서는 먼저 의존성을 추가해야 합니다. Maven 기반의 프로젝트라면 pom.xml 파일에 아래와 같이 의존성을 추가하세요:

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

Liquibase는 다양한 데이터베이스 시스템을 지원합니다. 적절한 데이터베이스 시스템에 대한 드라이버를 추가해야 합니다. 예를 들어, MySQL을 사용한다면 아래와 같이 드라이버 의존성을 추가하세요:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>

Liquibase는 변경 사항을 기록하는데 필요한 테이블을 생성하기 위해 초기 실행이 필요합니다. 이를 위해 liquibase.properties 파일을 작성하고, 데이터베이스 연결 정보를 설정하세요. 예를 들어, MySQL에 연결하기 위해 아래와 같이 설정할 수 있습니다:

driver: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydatabase
username: myuser
password: mypassword

변경 사항 정의하기

Liquibase에서는 변경 사항을 changeSet이라는 단위로 정의합니다. changeSet은 데이터베이스 스키마 변경 작업 하나를 의미합니다. 변경 사항은 XML, YAML, JSON 또는 SQL로 정의할 수 있습니다. 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.0.xsd">

    <changeSet author="myname" id="create_table">
        <createTable tableName="mytable">
            <column name="id" type="int">
                <constraints primaryKey="true"/>
            </column>
            <column name="name" type="varchar(255)"/>
        </createTable>
    </changeSet>

</databaseChangeLog>

위 예제에서는 mytable이라는 테이블을 생성하는 변경 사항을 정의하였습니다.

Liquibase 실행하기

Liquibase를 실행하려면 애플리케이션을 시작하는 동안 적절한 스크립트를 실행해야 합니다. 보통은 애플리케이션의 시작 시점 또는 배포 스크립트에서 실행합니다.

import liquibase.Liquibase;
import liquibase.database.Database;
import liquibase.database.DatabaseFactory;
import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.FileSystemResourceAccessor;

import java.sql.Connection;
import java.sql.DriverManager;

public class LiquibaseRunner {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");

            Connection connection = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/mydatabase",
                    "myuser",
                    "mypassword"
            );
            Database database = DatabaseFactory.getInstance()
                    .findCorrectDatabaseImplementation(new JdbcConnection(connection));

            Liquibase liquibase = new Liquibase("changelog.xml",
                    new FileSystemResourceAccessor(),
                    database);
            liquibase.update("");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위 예제에서는 MySQL 데이터베이스에 연결하고 changelog.xml 파일을 기반으로 변경 사항을 적용하는 Liquibase를 생성하고 실행합니다.

결론

Liquibase를 사용하면 Java 애플리케이션의 데이터베이스 스키마 변경을 효율적으로 관리할 수 있습니다. 변화에 따라 데이터베이스를 업데이트할 때마다 변경 사항을 추적하고, 이력을 관리하고, 롤백을 수행할 수 있습니다. Liquibase는 다양한 데이터베이스 시스템과 호환되며, 변경 사항을 간단히 정의하고 실행할 수 있는 기능을 제공합니다.

더 자세한 내용은 Liquibase 공식 웹사이트를 참조하세요.


참고: