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

Liquibase는 자바 기반의 오픈 소스 도구로, 데이터베이스 스키마의 변경을 관리하는 데 도움이 됩니다. 이를 통해 애플리케이션의 업데이트와 롤백을 쉽게 처리할 수 있습니다. 이번 블로그에서는 Liquibase를 사용하여 자바 애플리케이션의 데이터베이스 검색 관리하는 방법에 대해 알아보겠습니다.

1. Liquibase 설정하기

먼저, Liquibase를 사용하기 위해 Maven 또는 Gradle을 통해 의존성을 추가해야 합니다. 다음과 같이 pom.xml 파일에 의존성을 추가합니다.

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

2. Change Log 파일 생성하기

Liquibase에서는 변경 사항을 관리하는데 사용하는 Change Log 파일을 생성해야 합니다. 이 파일에는 데이터베이스 변경에 대한 한 개 이상의 ChangeSet이 포함됩니다. 각 ChangeSet은 데이터베이스의 특정 스키마 변경을 의미합니다.

다음은 Change Log 파일의 예시입니다. 이름은 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.3.xsd">

    <changeSet id="1" author="your_name">
        <!-- 스키마 변경 내용 -->
    </changeSet>

    <changeSet id="2" author="your_name">
        <!-- 스키마 변경 내용 -->
    </changeSet>

    <!-- 추가적인 ChangeSet들 -->
</databaseChangeLog>

3. 변경 내용 작성하기

각 ChangeSet 안에는 데이터베이스의 스키마 변경을 기술하는 명령문이 포함됩니다. 이 명령문은 SQL 형식일 수도 있고, 특정 데이터베이스 관리 시스템에 대한 명령어 형식일 수도 있습니다.

다음은 간단한 스키마 변경 예시입니다. 변경 사항은 createTable을 통해 새로운 테이블을 생성하는 것입니다.

<changeSet id="1" author="your_name">
    <createTable tableName="customers">
        <column name="id" type="bigint" autoIncrement="true">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="name" type="varchar(100)">
            <constraints nullable="false"/>
        </column>
        <!-- 추가적인 컬럼들 -->
    </createTable>
</changeSet>

4. Liquibase 실행하기

이제 Liquibase를 실행하여 변경을 데이터베이스에 적용할 수 있습니다. 이를 위해 명령줄 도구인 liquibase를 사용할 수도 있고, 자바 애플리케이션 내에서 직접 Liquibase를 실행할 수도 있습니다.

Liquibase를 사용하여 변경 사항을 적용하는 자바 코드는 다음과 같습니다.

import liquibase.exception.LiquibaseException;
import liquibase.Liquibase;
import liquibase.database.Database;
import liquibase.database.DatabaseFactory;
import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.ClassLoaderResourceAccessor;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class LiquibaseExample {
    public static void main(String[] args) throws SQLException, LiquibaseException {
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
        Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
        Liquibase liquibase = new Liquibase("changelog.xml", new ClassLoaderResourceAccessor(), database);
        liquibase.update("");
    }
}

위의 코드에서 jdbc:mysql://localhost:3306/mydatabase는 변경을 적용할 데이터베이스의 연결 문자열을 의미합니다. usernamepassword는 데이터베이스에 연결하기 위한 사용자 이름과 암호입니다. changelog.xml은 우리가 만든 Change Log 파일의 경로입니다.

이제 Liquibase를 실행하면 데이터베이스에 변경 내용이 적용됩니다.

결론

Liquibase를 사용하여 자바 애플리케이션의 데이터베이스 스키마를 관리하는 방법을 알아보았습니다. Liquibase를 사용하면 데이터베이스 변경을 추적하고 적용하기 쉽고 안전하게 할 수 있습니다. 이를 통해 애플리케이션의 데이터베이스를 효과적으로 관리할 수 있습니다.

참고 자료