[java] 자바에서 Liquibase와 함께 사용하는 인 메모리 데이터베이스 관리 방법

Liquibase는 데이터베이스 스키마 변경을 관리하기 위한 오픈소스 도구입니다. 인 메모리 데이터베이스는 메모리 내에서 데이터를 저장하고 처리하는 방식으로, 임시 또는 테스트 목적으로 자주 사용됩니다. 이번 포스트에서는 Liquibase를 사용하여 인 메모리 데이터베이스를 관리하는 방법을 알아보겠습니다.

1. 인 메모리 데이터베이스 설정

인 메모리 데이터베이스를 사용하기 위해서는 먼저 해당 데이터베이스의 종류와 버전을 선택해야 합니다. 예를 들어, H2와 같은 인 메모리 데이터베이스를 사용하려면 의존성을 추가해야 합니다. Maven을 사용한다면, pom.xml 파일에 다음과 같이 의존성을 추가할 수 있습니다.

<dependencies>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.200</version>
        <scope>test</scope>
    </dependency>
</dependencies>

2. Liquibase 설정

Liquibase를 사용하기 위해서는 먼저 Liquibase의 의존성을 추가해야 합니다. Maven을 사용한다면, pom.xml 파일에 다음과 같이 의존성을 추가할 수 있습니다.

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

Liquibase는 데이터베이스 변경을 관리하는데 사용되는 XML 또는 YAML 형식의 변경 세트 파일을 사용합니다. 이러한 파일을 작성하여 스키마 변경 내역을 정의할 수 있습니다. 예를 들어, 다음과 같은 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-3.10.xsd">

    <changeSet id="1" author="me">
        <createTable tableName="employees">
            <column name="id" type="INT">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="VARCHAR(50)"/>
        </createTable>
    </changeSet>

</databaseChangeLog>

위의 예시에서는 employees라는 테이블과 id, name 열을 생성하는 SQL 문이 정의되어 있습니다.

3. 인 메모리 데이터베이스 설정과 연동

이제 Liquibase와 인 메모리 데이터베이스를 설정 및 연동하는 작업을 진행해보겠습니다. 먼저, 다음과 같이 Liquibase를 이용하여 변경 세트를 적용하는 코드를 작성할 수 있습니다.

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;

public class LiquibaseExample {
    public static void main(String[] args) throws Exception {
        // 인 메모리 데이터베이스 연결
        Connection connection = DriverManager.getConnection("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "", "");
        Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));

        // Liquibase 인스턴스 생성 및 변경 세트 적용
        Liquibase liquibase = new Liquibase("changelog.xml", new ClassLoaderResourceAccessor(), database);
        liquibase.update("");
        
        // 인 메모리 데이터베이스 연결 종료
        connection.close();
    }
}

위의 예시에서는 H2 인 메모리 데이터베이스에 연결하고, changelog.xml을 이용하여 스키마 변경 세트를 적용하는 과정을 보여줍니다.

결론

Liquibase를 사용하여 자바에서 인 메모리 데이터베이스를 관리하는 방법을 알아보았습니다. 이를 통해 테스트나 임시 환경에서 효율적으로 데이터베이스 스키마를 관리할 수 있습니다. 더 자세한 내용은 Liquibase 공식 문서를 참고하시기 바랍니다.

참고 자료