[java] TestContainers와 데이터베이스 마이그레이션 도구의 통합

소개

많은 소프트웨어 개발 프로젝트에서 데이터베이스 테스트를 위해 TestContainers를 사용합니다. TestContainers는 Docker 컨테이너를 사용하여 실제 데이터베이스를 실행하고, 테스트를 위한 임시 데이터베이스를 제공합니다. 이를 통해 독립적인 테스트 환경을 구성하고, 테스트 시간을 단축할 수 있습니다.

데이터베이스 마이그레이션은 애플리케이션의 변경을 지원하기 위해 데이터베이스 스키마를 업데이트하는 프로세스입니다. 대부분의 프로젝트에서는 데이터베이스 마이그레이션 도구인 FlywayLiquibase를 사용합니다.

이번 블로그 포스트에서는 TestContainers와 데이터베이스 마이그레이션 도구를 통합하는 방법에 대해 알아보겠습니다.

통합 방법

TestContainers를 사용하여 데이터베이스를 실행한 후, 데이터베이스 마이그레이션 도구를 통해 스키마를 업데이트할 수 있습니다. 이를 위해 다음 단계를 따릅니다:

  1. 테스트 클래스에서 TestContainers를 구성하고 시작합니다.
    @Testcontainers
    public class DatabaseMigrationTest {
    
     // 데이터베이스 컨테이너 설정
     @Container
     private static final PostgreSQLContainer<?> databaseContainer = new PostgreSQLContainer<>("postgres:latest");
    
     // 데이터베이스 연결 정보
     private static String jdbcUrl;
     private static String username;
     private static String password;
    
     @BeforeAll
     static void setup() {
         // 데이터베이스 컨테이너 시작
         databaseContainer.start();
            
         // 데이터베이스 연결 정보 설정
         jdbcUrl = databaseContainer.getJdbcUrl();
         username = databaseContainer.getUsername();
         password = databaseContainer.getPassword();
     }
    
     @Test
     public void testDatabaseMigration() {
         // 데이터베이스 마이그레이션 도구 실행
         Flyway flyway = Flyway.configure()
                 .dataSource(jdbcUrl, username, password)
                 .load();
    
         flyway.migrate();
    
         // TODO: 테스트 코드 작성
     }
    
     @AfterAll
     static void cleanup() {
         // 데이터베이스 컨테이너 종료
         databaseContainer.stop();
     }
    }
    
  2. 테스트 클래스에서 데이터베이스 마이그레이션을 실행합니다.

이제 TestContainers와 데이터베이스 마이그레이션 도구를 통합하여 테스트를 수행할 수 있습니다. TestContainers는 테스트 전에 데이터베이스 컨테이너를 시작하고, 데이터베이스 연결 정보를 설정합니다. 그리고 Flyway를 사용하여 데이터베이스 마이그레이션을 실행합니다.

테스트 코드를 작성하여 데이터베이스 마이그레이션의 성공 여부를 확인할 수 있습니다.

결론

TestContainers를 사용하여 데이터베이스 테스트 환경을 구성하고, Flyway나 Liquibase와 같은 데이터베이스 마이그레이션 도구를 통합하여 데이터베이스 스키마 변경을 관리할 수 있습니다. 이를 통해 테스트의 격리성을 보장하고, 테스트 시간을 단축할 수 있습니다.

추가로, 데이터베이스 마이그레이션을 자동화하여 애플리케이션 릴리스 프로세스를 향상시킬 수 있습니다. 데이터베이스 마이그레이션 도구의 강력한 기능을 활용하여 변경 사항을 쉽고 안전하게 관리할 수 있습니다.

이처럼 TestContainers와 데이터베이스 마이그레이션 도구를 통합하여 프로젝트의 테스트 및 배포 프로세스를 강화할 수 있습니다.

참고 자료