[java] 자바에서 Liquibase와 함께 사용하는 중앙 집중식 데이터베이스 관리 방법

대규모 애플리케이션을 개발하다보면 데이터베이스 스키마의 변경이 빈번하게 발생합니다. 이러한 변경은 여러 개발자가 함께 작업하는 경우에는 더욱 복잡해질 수 있습니다. 이런 상황에서 데이터베이스 스키마 관리를 위해 Liquibase를 사용할 수 있습니다.

Liquibase는 데이터베이스 스키마의 변경 사항을 추적하고 적용할 수 있게 해주는 오픈 소스 라이브러리입니다. 이를 통해 데이터베이스 스키마의 변경을 중앙에서 관리할 수 있어 개발자들 간에 일관된 데이터베이스 상태를 유지할 수 있습니다.

Liquibase의 설치 및 설정

Liquibase를 사용하기 위해서는 먼저 해당 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다.

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

그리고 Liquibase의 설정 파일인 liquibase.properties 파일을 프로젝트의 리소스 폴더에 생성합니다. 다음은 간단한 예시입니다.

# 데이터베이스 연결 설정
url=jdbc:mysql://localhost:3306/mydatabase
username=root
password=123456

# 변경 로그 파일 설정
changelog=classpath:db/changelog/db.changelog-master.xml

변경 로그 파일은 Liquibase가 변경 사항을 추적하는 데 사용하는 파일입니다. 이 파일을 생성하여 원하는 변경 사항을 기록할 수 있습니다.

변경 사항 기록 및 적용

변경 로그 파일에는 데이터베이스 스키마 변경 사항을 기록하는 changeSet이 포함됩니다. 각 changeSet은 특정 변경 사항에 대한 정보를 포함하고 있으며, 이 정보를 바탕으로 Liquibase가 데이터베이스 스키마를 적용합니다.

다음은 Liquibase를 사용하여 새로운 테이블을 생성하는 예시입니다.

<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 author="John Doe" id="createTableExample">
        <createTable tableName="users">
            <column name="id" type="INT">
                <constraints primaryKey="true" nullable="false" />
            </column>
            <column name="name" type="VARCHAR(100)">
                <constraints nullable="false" />
            </column>
            <column name="email" type="VARCHAR(100)">
                <constraints nullable="false" />
            </column>
        </createTable>
    </changeSet>

</databaseChangeLog>

위의 변경 로그 파일에는 users 테이블을 생성하는 changeSet이 정의되어 있습니다. 이 파일을 실행하면 데이터베이스에 users 테이블이 생성됩니다.

변경 사항 적용 및 롤백

Liquibase는 설정 파일에 지정된 데이터베이스에 대해 변경 사항을 적용하는 명령을 실행하여 데이터베이스를 갱신합니다. 변경 사항을 적용하려면 다음 명령을 실행합니다.

liquibase update

위 명령을 실행하면 Liquibase는 변경 로그 파일에서 적용되지 않은 변경 사항을 찾고, 순차적으로 데이터베이스에 적용합니다.

변경 사항을 롤백하려면 다음 명령을 실행합니다.

liquibase rollback

위 명령을 실행하면 가장 최근에 적용된 변경 사항이 롤백됩니다.

결론

Liquibase를 사용하면 여러 개발자가 함께 작업하는 상황에서도 데이터베이스 스키마의 변경을 효과적으로 관리할 수 있습니다. 이를 통해 데이터베이스 변경 사항 추적과 일관된 상태를 유지할 수 있으며, 애플리케이션의 유지 보수성을 향상시킬 수 있습니다.

참고 자료