[java] Liquibase와 함께 사용하는 자바 애플리케이션의 데이터베이스 마이그레이션 테스트 방법

개요

많은 자바 애플리케이션에서는 데이터베이스를 사용하여 데이터 저장 및 조회 기능을 구현합니다. 데이터베이스 스키마의 변경이 필요한 경우, Liquibase를 사용하여 데이터베이스 마이그레이션을 수행할 수 있습니다. 이 글에서는 Liquibase를 사용하는 자바 애플리케이션의 데이터베이스 마이그레이션을 테스트하는 방법을 소개합니다.

Liquibase란?

Liquibase는 데이터베이스 스키마의 변경을 관리하기 위한 오픈 소스 도구입니다. XML 또는 YAML 형식으로 작성된 변경 세트 파일을 기반으로 실제 데이터베이스에 대한 변경 작업을 수행할 수 있습니다. 또한, 버전 관리를 통해 데이터베이스 스키마의 변경 이력을 관리할 수 있습니다. Liquibase를 사용하면 데이터베이스 마이그레이션 작업을 쉽고 안전하게 수행할 수 있습니다.

자바 애플리케이션에서 Liquibase 사용하기

자바 애플리케이션에서 Liquibase를 사용하려면 다음 단계를 따르면 됩니다.

  1. 의존성 추가
    • Maven을 사용하는 경우, pom.xml 파일에 Liquibase 의존성을 추가합니다. ```xml
    org.liquibase liquibase-core 4.3.1

    ```

  2. 변경 세트 파일 작성
    • src/main/resources/db/changelog 디렉토리에 변경 세트 파일을 작성합니다. 변경 세트 파일은 XML 또는 YAML 형식으로 작성할 수 있습니다. 파일 이름을 changelog-*.xml 또는 changelog-*.yaml로 지정합니다.
  3. 애플리케이션에서 Liquibase 실행
    • 애플리케이션 구동 시점에 Liquibase를 실행하여 데이터베이스 마이그레이션을 수행합니다. 다음은 Spring Boot를 사용하는 경우의 예시입니다.
    import liquibase.Liquibase;
    import liquibase.integration.spring.SpringLiquibase;
    import javax.sql.DataSource;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    import org.springframework.core.io.ClassPathResource;
    
    @SpringBootApplication
    public class MyApplication {
        @Bean
        public Liquibase liquibase(DataSource dataSource) throws Exception {
            SpringLiquibase liquibase = new SpringLiquibase();
            liquibase.setChangeLog("classpath:db/changelog/changelog.xml");
            liquibase.setDataSource(dataSource);
            return liquibase;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    

데이터베이스 마이그레이션 테스트 방법

Liquibase를 사용하는 자바 애플리케이션의 데이터베이스 마이그레이션을 테스트하기 위해서는 아래와 같은 절차를 따를 수 있습니다.

  1. 테스트용 데이터베이스 환경 설정
    • 테스트를 위한 별도의 데이터베이스 환경을 구성합니다. 메모리 DB인 H2 등을 사용하면 편리합니다.
  2. 테스트용 변경 세트 파일 작성
    • src/test/resources/db/changelog 디렉토리에 테스트용 변경 세트 파일을 작성합니다. 변경 세트 파일의 이름은 실제 변경 세트 파일과 동일하게 작성합니다. 다만, 변경 내용이 테스트용 데이터베이스에만 적용되도록 설정합니다.
  3. 테스트 코드 작성
    • JUnit 등의 테스트 프레임워크를 사용하여 테스트를 작성합니다. 테스트 코드에서는 테스트용 데이터베이스에 마이그레이션이 정상적으로 수행되는지 확인합니다.

예시 테스트 코드:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import static org.junit.jupiter.api.Assertions.assertTrue;

@SpringBootTest
public class MyApplicationTests {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    public void testDatabaseMigration() {
        // 테스트용 데이터베이스에 마이그레이션이 정상적으로 수행되는지 확인하는 테스트 코드 작성
        // 예: 데이터 조회 쿼리 실행하여 결과를 확인
        int count = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM my_table", Integer.class);
        assertTrue(count > 0);
    }
}

결론

Liquibase를 사용하여 자바 애플리케이션의 데이터베이스 마이그레이션을 테스트하는 방법에 대해 알아보았습니다. 테스트를 통해 정상적인 마이그레이션을 확인하고 데이터베이스 스키마의 변경 작업을 안전하게 관리할 수 있습니다.

참고 자료