[java] Flyway와 Java 프로젝트의 통합 테스트 전략

Flyway는 데이터베이스 마이그레이션 툴로, Java 프로젝트에서 데이터베이스 스키마를 유지하고 업데이트하는 데 사용됩니다. 이번 블로그 포스트에서는 Flyway를 사용하는 Java 프로젝트의 통합 테스트 전략에 대해 알아보겠습니다.

1. 통합 테스트 환경 설정

통합 테스트를 위해 데이터베이스 환경을 구성해야 합니다. 일반적으로는 개발 환경과 별도로 복제된 테스트용 데이터베이스를 사용하는 것이 좋습니다. 이렇게 하면 테스트가 실제 데이터베이스에 영향을 주지 않고 안전하게 실행될 수 있습니다.

2. Flyway 설정

Flyway를 사용하기 위해 프로젝트에 Flyway 종속성을 추가해야 합니다. Maven을 사용하는 경우 pom.xml에 다음과 같은 의존성을 추가하세요.

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>7.7.4</version>
</dependency>

또한, Flyway 구성을 위해 application.properties 파일에 데이터베이스 연결 정보와 Flyway 관련 설정을 추가해야 합니다.

# 데이터베이스 설정
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=pass

# Flyway 설정
spring.flyway.enabled=true
spring.flyway.locations=classpath:/db/migration

위의 예시에서 spring.flyway.locations 속성은 마이그레이션 스크립트가 위치한 디렉토리를 지정합니다.

3. 통합 테스트 작성

통합 테스트를 작성할 때, Flyway의 마이그레이션 스크립트를 적용하기 위해 테스트 시작 전에 데이터베이스를 초기화해야 합니다. 이를 위해 다음과 같은 어노테이션을 사용할 수 있습니다.

import org.flywaydb.core.Flyway;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.junit.jupiter.api.BeforeEach;

@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
@ExtendWith(SpringExtension.class)
public class MyIntegrationTest {
    
    @BeforeEach
    public void setupDatabase() {
        Flyway flyway = Flyway
                .configure()
                .dataSource(dataSource)
                .baselineOnMigrate(true)
                .locations("classpath:/db/migration")
                .load();
        flyway.clean();
        flyway.migrate();
    }
    
    // 테스트 메소드 작성
}

위의 예시에서 @BeforeEach 어노테이션을 사용하여 각 테스트가 실행되기 전에 데이터베이스를 초기화합니다. Flyway를 사용하여 마이그레이션 스크립트를 실행한 후, 테스트를 진행합니다.

4. 테스트 실행

JUnit 또는 다른 테스트 프레임워크를 사용하여 테스트를 실행할 수 있습니다. 테스트를 실행하면 Flyway가 자동으로 마이그레이션 스크립트를 실행하고, 테스트가 데이터베이스를 사용하는 동안 올바르게 작동하는지 확인할 수 있습니다.

결론

Flyway를 사용하는 Java 프로젝트에서 통합 테스트를 작성하는 방법에 대해 알아보았습니다. Flyway를 사용하면 데이터베이스 스키마를 관리하고 업데이트하는 과정을 자동화할 수 있으며, 테스트를 통해 애플리케이션의 기능을 안정적으로 검증할 수 있습니다.

더 자세한 내용은 Flyway 공식 문서를 참조하시기 바랍니다.