[java] Flyway를 사용하여 Java 애플리케이션의 데이터베이스 로 테스트 데이터 생성하기

Flyway는 데이터베이스 마이그레이션 도구로서, 개발자가 애플리케이션의 데이터베이스 스키마를 관리하고 업데이트하는 데 도움을 줍니다. Flyway를 사용하면 테스트 데이터베이스에 초기 데이터를 쉽게 추가할 수 있습니다. 이 글에서는 Flyway를 사용하여 Java 애플리케이션의 데이터베이스에 테스트 데이터를 생성하는 방법에 대해 알아보겠습니다.

Flyway 설정

Flyway를 사용하려면 먼저 프로젝트에 Flyway를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같은 의존성을 추가합니다:

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

Gradle을 사용하는 경우, build.gradle 파일에 다음과 같은 의존성을 추가합니다:

dependencies {
    implementation 'org.flywaydb:flyway-core:6.4.4'
}

Flyway를 프로젝트에 추가한 후, 데이터베이스 연결 정보를 application.properties 파일에 설정해야 합니다. 다음은 H2 데이터베이스를 사용하는 예시입니다:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.flyway.locations=classpath:db/migration

위 설정에서 spring.flyway.locations는 Flyway 마이그레이션 스크립트(.sql 파일)를 위치시킬 폴더를 지정합니다. 여기서는 src/main/resources/db/migration 폴더를 사용합니다.

테스트 데이터 추가

테스트 데이터는 Flyway 마이그레이션 스크립트를 생성하여 데이터베이스에 추가할 수 있습니다. 마이그레이션 스크립트의 이름은 V<버전>__<설명>.sql 형식을 따라야 합니다. <버전>은 스크립트의 순서와 관련된 숫자이고, <설명>은 마이그레이션 스크립트의 목적을 나타내는 문자열입니다.

예를 들어, V1__insert_test_data.sql 파일을 생성하여 다음과 같은 SQL 스크립트를 작성할 수 있습니다:

INSERT INTO users (id, name, email) VALUES (1, 'Alice', 'alice@example.com');
INSERT INTO users (id, name, email) VALUES (2, 'Bob', 'bob@example.com');

위 스크립트는 users 테이블에 두 개의 테스트 사용자를 추가합니다. Flyway는 자동으로 해당 스크립트를 실행하여 데이터베이스에 테스트 데이터를 추가합니다.

테스트 실행

Flyway 설정과 테스트 데이터 스크립트를 작성한 후에는 애플리케이션을 실행하여 Flyway가 테스트 데이터를 데이터베이스에 추가하는지 확인할 수 있습니다.

@SpringBootTest
@AutoConfigureTestDatabase
public class DatabaseTest {

    @Test
    public void testInsertTestData() {
        // Test your application logic here
        // ...
    }
}

위 코드는 Spring Boot 프레임워크를 사용하여 테스트를 실행하는 예시입니다. Flyway는 애플리케이션을 실행할 때 자동으로 마이그레이션 스크립트를 실행하므로, testInsertTestData() 메소드를 실행할 때 테스트 데이터가 이미 데이터베이스에 추가되어 있을 것입니다.

이제 Flyway를 사용하여 Java 애플리케이션의 데이터베이스로 테스트 데이터를 생성하는 방법에 대해 알아보았습니다. Flyway는 개발자가 데이터베이스 스키마를 관리하고 초기 데이터를 관리하는데 매우 유용한 도구입니다.

참고 자료