[java] TestContainers와 Flyway의 통합

서론

TestContainers는 컨테이너화된 데이터베이스를 사용하여 Java 애플리케이션의 통합 테스트를 수행하는 데 도움이 되는 도구입니다. Flyway는 데이터베이스 마이그레이션을 관리하고 실행하는 데 사용되는 도구입니다. 이 두 가지 도구를 함께 사용하면 애플리케이션의 통합 테스트 및 데이터베이스 마이그레이션 관리를 효과적으로 수행할 수 있습니다. 이번 블로그에서는 TestContainers와 Flyway의 통합에 대해 알아보겠습니다.

TestContainers 소개

TestContainers는 Docker 컨테이너를 사용하여 테스트용 데이터베이스를 자동으로 시작하고 정리하는 기능을 제공합니다. 이를 통해 애플리케이션에 대한 통합 테스트를 수행할 수 있습니다. TestContainers는 Java, Kotlin, Groovy 등 다양한 언어와 프레임워크에서 사용될 수 있습니다.

Flyway 소개

Flyway는 데이터베이스 스키마의 버전 관리를 위한 도구입니다. 마이그레이션 스크립트를 작성하여 데이터베이스의 스키마 변경을 추적하고 적용하는 데 사용됩니다. Flyway는 다양한 데이터베이스 시스템과 연동할 수 있으며, 간편하게 데이터베이스 스키마를 유지 및 관리할 수 있습니다.

TestContainers와 Flyway의 통합

TestContainers와 Flyway를 함께 사용하면 통합 테스트 시에 데이터베이스 마이그레이션을 자동으로 수행할 수 있습니다. 이를 통해 테스트 시점의 데이터베이스 스키마를 적용하고, 테스트가 끝난 후에는 데이터베이스를 정리할 수 있습니다.

아래는 TestContainers와 Flyway의 통합을 위한 예제 코드입니다.

import org.flywaydb.core.Flyway;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;

@Testcontainers
public class FlywayIntegrationTest {

    @Container
    public static MongoDBContainer mongoDBContainer = new MongoDBContainer();

    @BeforeAll
    static void setUp() {
        // TestContainers를 사용하여 MongoDB 컨테이너 시작
        mongoDBContainer.start();

        // Flyway 설정
        Flyway flyway = Flyway.configure()
                .dataSource(mongoDBContainer.getReplicaSetUrl(), mongoDBContainer.getUsername(), mongoDBContainer.getPassword())
                .locations("classpath:db/migrations") // 마이그레이션 스크립트 위치
                .load();

        // Flyway 마이그레이션 실행
        flyway.migrate();
    }

    @Test
    void testSomething() {
        // 마이그레이션된 데이터베이스를 사용하여 테스트 수행
        // ...
    }
}

위의 예제 코드에서는 FlywayIntegrationTest 클래스를 정의하고 @Testcontainers 애노테이션을 사용하여 TestContainers의 기능을 활성화합니다. 그리고 @Container 애노테이션을 사용하여 MongoDB 컨테이너를 시작하고, @BeforeAll 메서드에서 Flyway를 구성하고 실행합니다. 이렇게 하면 MongoDB 컨테이너가 시작될 때 Flyway가 마이그레이션을 실행하게 됩니다. 마지막으로 @Test 메서드에서는 마이그레이션된 데이터베이스를 사용하여 애플리케이션의 통합 테스트를 수행할 수 있습니다.

결론

TestContainers와 Flyway는 데이터베이스를 사용하는 애플리케이션의 통합 테스트와 데이터베이스 마이그레이션 관리를 효과적으로 수행할 수 있는 도구입니다. 이번 블로그에서는 이 두 가지 도구의 통합 방법에 대해 알아보았습니다. TestContainers와 Flyway의 통합을 통해 테스트 시에 안정적인 데이터베이스 환경을 제공하고, 데이터베이스 스키마의 변경을 쉽게 관리할 수 있습니다.


참고 자료