Liquibase는 데이터베이스 스키마 버전 관리 도구로서, 데이터베이스의 스키마 변경과 마이그레이션 작업을 관리하는 데 사용됩니다. 이 글에서는 Liquibase를 사용하여 자바 애플리케이션에서 테스트 데이터를 관리하는 방법에 대해 알아보겠습니다.
1. Liquibase 설정
먼저, Maven 프로젝트의 pom.xml
파일에 다음 의존성을 추가합니다:
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.5.0</version>
</dependency>
다음으로, Liquibase 설정 파일을 생성합니다. 기본적으로 src/main/resources
폴더에 liquibase.properties
파일을 생성하고 다음과 같이 작성합니다:
changeLogFile=db/changelog/db.changelog-master.xml
url=jdbc:mysql://localhost:3306/mydatabase
username=db_username
password=db_password
위 예제에서 changeLogFile
은 Liquibase 변경 로그 파일의 경로를, url
은 데이터베이스 연결 URL을, username
과 password
는 데이터베이스의 로그인 정보를 나타냅니다.
2. 테스트 데이터 작성
Liquibase를 사용하여 테스트 데이터를 작성하기 위해서는 변경 로그 파일에 변경 세트(change set)를 추가해야 합니다. src/main/resources/db/changelog/
폴더에 새로운 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.5.xsd">
<changeSet id="initial_data" author="your_name">
<sql>
INSERT INTO users (id, username, email) VALUES (1, 'user1', 'user1@example.com');
-- Add more data here
</sql>
</changeSet>
</databaseChangeLog>
위 예제에서 changeSet
은 테스트 데이터를 추가하는 SQL 스크립트를 포함하고 있습니다. id
와 author
는 변경 세트의 고유 식별자이며, SQL문은 sql
태그 안에 작성됩니다.
3. 테스트에서 Liquibase 사용
테스트 클래스에서 Liquibase를 사용하여 테스트 데이터를 로드하려면 다음과 같이 테스트 클래스를 작성합니다:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import liquibase.Liquibase;
import liquibase.database.DatabaseFactory;
import liquibase.database.jvm.JdbcConnection;
import liquibase.exception.LiquibaseException;
import liquibase.resource.ClassLoaderResourceAccessor;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MyTest {
private static final String CHANGELOG_FILE = "classpath:/db/changelog/db.changelog-master.xml";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mydatabase";
private static final String DATABASE_USERNAME = "db_username";
private static final String DATABASE_PASSWORD = "db_password";
@BeforeEach
public void setup() throws LiquibaseException, SQLException {
Connection connection = DriverManager.getConnection(DATABASE_URL, DATABASE_USERNAME, DATABASE_PASSWORD);
JdbcConnection jdbcConnection = new JdbcConnection(connection);
Liquibase liquibase = new Liquibase(CHANGELOG_FILE, new ClassLoaderResourceAccessor(),
DatabaseFactory.getInstance().findCorrectDatabaseImplementation(jdbcConnection));
liquibase.update("test"); // 테스트 데이터 로드
}
@Test
public void testSomething() {
// 테스트 코드 작성
}
}
위 예제에서 setup
메소드는 각 테스트가 실행되기 전에 Liquibase를 초기화하고 변경 로그 파일을 기반으로 테스트 데이터를 로드합니다. testSomething
메소드는 실제 테스트를 수행하는 메소드입니다.