[java] Flyway와 Java 애플리케이션의 테스트 데이터 관리 방법

Flyway는 데이터베이스 스키마 버전 관리를 위한 도구로, 데이터베이스 마이그레이션을 쉽게 할 수 있도록 도와줍니다. Java 애플리케이션과 함께 사용할 때, Flyway를 사용하여 테스트 데이터도 손쉽게 관리할 수 있습니다.

Flyway 설정

먼저, 프로젝트의 pom.xml 파일에 Flyway 의존성을 추가해야 합니다. 아래는 Maven 의존성 설정 예시입니다.

<dependencies>
  <dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>7.7.3</version>
  </dependency>
  <!-- other dependencies -->
</dependencies>

다음으로, application.properties (혹은 application.yml) 파일에 Flyway 관련 설정을 추가해야 합니다. 아래는 예시입니다.

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

# Flyway 설정
flyway.enabled=true
flyway.locations=classpath:db/migration, classpath:db/test-data

여기서 flyway.locations 설정은 마이그레이션 스크립트와 테스트 데이터의 위치를 나타냅니다. db/migration 폴더에는 마이그레이션 스크립트가, db/test-data 폴더에는 테스트 데이터가 위치하도록 합니다.

테스트 데이터 추가

테스트 데이터를 추가하기 위해서는 db/test-data 폴더에 SQL 스크립트 파일을 작성해야 합니다. 예를 들어, db/test-data/initialize_data.sql 파일에 다음과 같은 내용을 넣을 수 있습니다.

INSERT INTO users (id, name, email) VALUES (1, 'John Doe', 'john@example.com');
INSERT INTO users (id, name, email) VALUES (2, 'Jane Smith', 'jane@example.com');
-- 더 많은 데이터 추가 가능

테스트 데이터 파일의 파일명에는 일련의 숫자나 버전 정보를 넣을 수도 있습니다. Flyway는 파일들을 순서대로 실행하므로, 파일명에 일련의 숫자를 사용하면 실행 순서를 조절할 수 있습니다. 예를 들어 db/test-data/V1__initialize_data.sqldb/test-data/V2__additional_data.sql 파일이 있다면, V1__initialize_data.sql 파일이 먼저 실행되고, 그 다음으로 V2__additional_data.sql 파일이 실행됩니다.

테스트 시 데이터 초기화

Flyway를 사용하여 테스트 데이터를 초기화하는 방법은 간단합니다. JUnit 테스트에서 @Before 어노테이션을 사용하여 테스트 메서드가 실행되기 전에 데이터베이스를 초기화합니다. 아래는 예시입니다.

import org.flywaydb.core.Flyway;
import org.junit.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import javax.sql.DataSource;

@SpringJUnitConfig
@SpringBootTest
@ActiveProfiles("test")
public class MyTest {

  @Autowired
  private DataSource dataSource;

  @Before
  public void setup() {
    Flyway flyway = Flyway.configure().dataSource(dataSource).schemas("testdb").load();
    flyway.clean();
    flyway.migrate();
  }

  // 테스트 메서드 작성
}

setup 메서드에서 Flyway를 설정하고, 데이터베이스를 초기화한 후 마이그레이션 스크립트와 테스트 데이터를 실행합니다. @ActiveProfiles("test") 어노테이션은 테스트 환경에서만 실행되도록 설정합니다.

결론

Flyway를 사용하여 Java 애플리케이션의 테스트 데이터를 관리하는 방법에 대해 알아보았습니다. Flyway를 사용하면 데이터베이스 스키마 버전 관리뿐만 아니라 테스트 데이터의 관리도 편리하게 할 수 있습니다. Flyway의 자세한 사용법은 공식 문서를 참고하시기 바랍니다.