[java] Liquibase를 사용하여 자바 애플리케이션의 데이터베이스 크롤링 로깅 관리하기

최근에 데이터베이스 크롤링을 사용하여 웹 사이트의 정보를 수집하는 자바 애플리케이션을 개발하고 있습니다. 이를 위해 애플리케이션의 데이터베이스 스키마를 관리할 필요가 있었고, Liquibase를 사용하여 이 작업을 수행하기로 결정했습니다.

Liquibase는 데이터베이스 스키마를 관리하기 위한 오픈 소스 도구로, 변경 세트를 정의하고 데이터베이스 스키마를 적용하거나 롤백하는 작업을 자동화할 수 있습니다. 이를 통해 우리는 애플리케이션의 스키마 변경을 추적하고 관리할 수 있습니다.

Liquibase 설정

먼저, 프로젝트의 의존성에 Liquibase를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가해주세요:

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <version>{Liquibase 버전}</version>
</dependency>

Liquibase를 설정하기 위해, liquibase.properties 파일을 생성하고 다음과 같이 설정해주세요:

driver=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/mydatabase
username=myusername
password=mypassword

변경 세트 작성

Liquibase를 사용하여 데이터베이스 스키마를 변경하려면, 변경 세트를 작성해야 합니다. 변경 세트는 데이터베이스 변경 내용을 기술한 XML 또는 SQL 파일로 구성됩니다.

새로운 변경 세트를 작성하기 위해 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.8.xsd">

    <!-- 변경 내용 작성 -->
    <changeSet id="1" author="me">
        <createTable tableName="employees">
            <column name="id" type="INT" autoIncrement="true">
                <constraints primaryKey="true"/>
            </column>
            <column name="name" type="VARCHAR(50)"/>
            <column name="age" type="INT"/>
        </createTable>
    </changeSet>

</databaseChangeLog>

변경 내용 적용

변경 세트를 작성한 후, Liquibase를 사용하여 변경 내용을 데이터베이스에 적용할 수 있습니다. 이를 위해 다음과 같은 코드를 작성해주세요:

import liquibase.Liquibase;
import liquibase.database.DatabaseFactory;
import liquibase.database.jvm.JdbcConnection;
import liquibase.resource.ClassLoaderResourceAccessor;

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

public class DatabaseUpdater {

    public static void main(String[] args) {
        try {
            // 데이터베이스 연결 설정
            Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/mydatabase?user=myusername&password=mypassword");
            JdbcConnection jdbcConnection = new JdbcConnection(connection);

            // Liquibase 인스턴스 생성
            Liquibase liquibase = new Liquibase("changelog.xml", new ClassLoaderResourceAccessor(), jdbcConnection);

            // 변경 내용 적용
            liquibase.update("");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

이 코드는 Liquibase를 사용하여 changelog.xml에 정의된 변경 내용을 데이터베이스에 적용하는 과정을 보여줍니다. 애플리케이션의 초기 실행 시에 이 코드를 실행하면, 변경 내용이 데이터베이스에 적용됩니다.

변경 내용 롤백

Liquibase를 사용하여 이전에 적용한 변경 내용을 롤백하는 것도 가능합니다. 롤백하려는 변경 세트의 아이디를 지정하여 다음과 같이 코드를 수정해주세요:

// 변경 내용 롤백
liquibase.rollback("1", "");

이 코드는 아이디가 “1”인 변경 세트를 롤백하는 예시입니다. 롤백하게 되면 changelog.xml에 정의된 변경 내용이 이전 상태로 되돌아갑니다.

결론

Liquibase를 사용하면 자바 애플리케이션의 데이터베이스 스키마를 관리하고 변경 내용을 추적할 수 있습니다. 변경 세트를 작성하고 Liquibase를 사용하여 변경 내용을 적용하거나 롤백함으로써 데이터베이스 크롤링을 위한 로깅 관리를 간편하게 수행할 수 있습니다.

참고 자료