[java] Flyway와 Java 애플리케이션의 데이터베이스 모의 테스트 전략

Flyway는 데이터베이스 마이그레이션 툴로, 애플리케이션의 데이터베이스 스키마를 관리하는 데 사용됩니다. Flyway를 사용하면 데이터베이스에 변경 사항을 적용하고 업그레이드할 수 있습니다. 그러나, Flyway를 사용하여 데이터베이스를 모킹하여 애플리케이션을 테스트하는 것은 좀 더 복잡한 과정입니다.

이 블로그에서는 Flyway와 Java 애플리케이션의 데이터베이스 모의 테스트 전략을 알아보겠습니다.

Flyway와 데이터베이스 모의 테스트의 동작

Flyway는 애플리케이션이 시작될 때 데이터베이스의 스키마를 업데이트합니다. 이것은 개발 환경이나 통합 테스트 환경에서는 큰 문제가 되지 않지만, 단위 테스트에서는 데이터베이스 상태를 모킹하고 싶은 경우 불편함을 초래할 수 있습니다.

Flyway의 동작을 변경하여 단위 테스트에서 데이터베이스를 모킹하려면 아래의 전략을 따를 수 있습니다.

데이터베이스 모킹 전략

  1. Flyway 설정 변경하기

Flyway는 flyway.locations 프로퍼티를 사용하여 마이그레이션 스크립트를 찾습니다. 이 프로퍼티를 사용하여 단위 테스트용 마이그레이션 스크립트 위치를 지정할 수 있습니다. 단위 테스트에서는 모킹된 데이터베이스 스키마를 사용해야 하므로, 모킹된 스키마를 가리키도록 flyway.locations 값을 변경해야 합니다.

  1. 테스트 케이스 작성하기

이제 Flyway 설정이 변경되었으므로, 단위 테스트를 작성할 수 있습니다.

예를 들어, JUnit 테스트 케이스에서 Flyway 데이터베이스 모킹을 수행하는 방법은 다음과 같습니다.

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class MyTest {
    
    @Autowired
    private DataSource dataSource;
    
    @Before
    public void setup() {
        // 모킹된 스키마로 데이터베이스 초기화
        Flyway flyway = Flyway.configure()
                                .dataSource(dataSource)
                                .locations("classpath:mocking/migrations")
                                .load();
        flyway.migrate();
    }
    
    @Test
    public void myTest() {
        // 모킹된 데이터베이스를 사용하여 테스트 수행
    }
    
    @After
    public void cleanup() {
        // 테스트 이후에 데이터베이스 정리
        Flyway flyway = Flyway.configure()
                                .dataSource(dataSource)
                                .locations("classpath:cleanup/migrations")
                                .load();
        flyway.migrate();
    }
}

이 예제에서는 @Before 메소드에서 Flyway를 사용하여 모킹된 스키마로 데이터베이스를 초기화하고, @After 메소드에서 다시 원래의 스키마로 데이터베이스를 정리합니다. 이렇게 하면 단위 테스트 케이스를 실행할 때마다 실제 데이터베이스 상태를 변경하지 않고도 모킹된 스키마로 테스트를 수행할 수 있습니다.

결론

Flyway를 사용하여 Java 애플리케이션의 데이터베이스를 모의 테스트하는 것은 가능합니다. Flyway 설정을 변경하고, 테스트 케이스에서 Flyway를 사용하여 모의 테스트 데이터베이스를 생성하고 정리하는 전략을 따르면 됩니다. 이를 통해 단위 테스트에서도 데이터베이스 모의 테스트를 수행할 수 있습니다.

참고 자료