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

개요

Liquibase는 자바 애플리케이션에서 데이터베이스 스키마와 버전 관리를 쉽게 할 수 있게 도와주는 도구입니다. 이를 통해 애플리케이션 개발과 배포 과정에서 데이터베이스 접근을 더욱 효율적으로 관리할 수 있습니다.

이 문서에서는 Liquibase를 사용하여 자바 애플리케이션에서 데이터베이스 접근을 제어하는 방법에 대해 소개하고 실제 예제 코드를 제공합니다.

Liquibase 설정

  1. Maven 또는 Gradle 프로젝트에 Liquibase 종속성을 추가합니다.
    • Maven:
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>4.3.5</version>
    </dependency>
    
    • Gradle:
    implementation 'org.liquibase:liquibase-core:4.3.5'
    
  2. Liquibase 설정 파일인 liquibase.properties 또는 liquibase.yml을 작성합니다. 여기에는 데이터베이스 연결 정보와 변경 로그 파일의 위치 등을 설정합니다.

  3. 변경 로그 파일을 작성합니다. 변경 로그 파일은 데이터베이스 스키마 변경을 정의하는 스크립트로서, SQL 또는 XML 형식으로 작성할 수 있습니다.

예제

다음은 Liquibase를 사용하여 데이터베이스 스키마를 초기화하고 업데이트하는 예제입니다.

  1. liquibase.properties 파일을 작성하고 다음과 같이 데이터베이스 연결 정보를 설정합니다.

    changeLogFile=db/changelog/db.changelog-master.xml
    url=jdbc:mysql://localhost:3306/mydatabase
    username=root
    password=secret
    
  2. db/changelog/db.changelog-master.xml 파일을 작성하고 다음과 같이 변경 로그를 정의합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <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="john">
            <createTable tableName="users">
                <column name="id" type="INT">
                    <constraints primaryKey="true" nullable="false"/>
                </column>
                <column name="name" type="VARCHAR(50)">
                    <constraints nullable="false"/>
                </column>
                <column name="email" type="VARCHAR(100)">
                    <constraints nullable="false"/>
                </column>
            </createTable>
        </changeSet>
    
    </databaseChangeLog>
    
  3. 애플리케이션에서 Liquibase를 사용하여 데이터베이스 스키마를 초기화하고 업데이트하는 코드를 작성합니다.

    import liquibase.Liquibase;
    import liquibase.database.Database;
    import liquibase.database.DatabaseFactory;
    import liquibase.database.jvm.JdbcConnection;
    import liquibase.exception.LiquibaseException;
    import liquibase.resource.FileSystemResourceAccessor;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class DatabaseSetup {
    
        public static void main(String[] args) {
            try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "root", "secret")) {
                Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
                Liquibase liquibase = new Liquibase("db/changelog/db.changelog-master.xml", new FileSystemResourceAccessor(), database);
                liquibase.update("");
            } catch (SQLException | LiquibaseException e) {
                e.printStackTrace();
            }
        }
    }
    

위의 예제는 Liquibase를 사용하여 users 테이블을 생성하는 변경 로그 파일을 적용합니다. 애플리케이션 실행 시 users 테이블이 없다면 생성하고, 이미 존재한다면 변경 사항을 업데이트합니다.

결론

Liquibase는 자바 애플리케이션에서 데이터베이스 접근을 제어하고 관리하는 데 유용한 도구입니다. 이 문서에서는 Liquibase 설정 방법과 간단한 예제를 제공하였습니다.

Liquibase의 자세한 내용과 다양한 기능에 대해서는 Liquibase 공식 문서를 참고하시기 바랍니다.