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

소개

Flyway는 자바 애플리케이션의 데이터베이스 마이그레이션을 쉽게 관리할 수 있는 오픈 소스 라이브러리입니다. 이 글에서는 Flyway를 사용하여 Java 애플리케이션의 데이터베이스 테스트 계획을 작성하는 방법을 알아보겠습니다.

계획 작성 단계

  1. 데이터베이스 준비
  2. 마이그레이션 스크립트 작성
  3. 데이터베이스 테스트 계획 작성
  4. 테스트 코드 작성

1. 데이터베이스 준비

먼저, 데이터베이스를 준비해야 합니다. 이를 위해 h2 데이터베이스를 사용하여 인메모리 데이터베이스를 생성하겠습니다. 인메모리 데이터베이스는 테스트 목적으로만 사용되며, 테스트가 끝나면 데이터베이스가 자동으로 삭제됩니다.

@Configuration
@EnableTransactionManagement
public class TestDatabaseConfig {

    @Bean
    @Profile("test")
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
                .generateUniqueName(true)
                .setType(EmbeddedDatabaseType.H2)
                .setScriptEncoding("UTF-8")
                .ignoreFailedDrops(true)
                .build();
    }

}

2. 마이그레이션 스크립트 작성

Flyway는 데이터베이스 마이그레이션을 위해 SQL 스크립트를 사용합니다. 데이터베이스의 초기 상태부터 현재 상태까지의 변경사항을 기록한 스크립트를 작성해야 합니다.

-- V1__create_table.sql

CREATE TABLE IF NOT EXISTS user (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(20) NOT NULL,
  password VARCHAR(100) NOT NULL
);

3. 데이터베이스 테스트 계획 작성

데이터베이스 테스트 계획을 작성해야 합니다. 이는 테스트 시나리오, 예상 결과, 테스트 데이터 등을 정리한 문서입니다.

4. 테스트 코드 작성

마지막으로, Flyway를 사용하는 테스트 코드를 작성해야 합니다. 테스트 코드에서는 Flyway를 초기화하고 테스트에 필요한 데이터를 삽입합니다.

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class DatabaseTest {

    @Autowired
    private DataSource dataSource;

    private Flyway flyway;

    @Before
    public void setUp() {
        flyway = Flyway.configure()
                .dataSource(dataSource)
                .load();
        flyway.migrate();
    }

    @Test
    public void testUserTableCreation() {
        JdbcTemplate template = new JdbcTemplate(dataSource);
        int count = template.queryForObject("SELECT COUNT(*) FROM user", Integer.class);
        assertEquals(0, count);
    }

}

결론

Flyway를 사용하여 Java 애플리케이션의 데이터베이스 테스트 계획을 작성하는 방법에 대해 알아보았습니다. Flyway를 통해 데이터베이스 마이그레이션을 관리하면 데이터베이스의 상태 변화를 명확하게 추적할 수 있으며, 테스트 시나리오와 관련된 문서를 작성하여 효율적인 테스트를 수행할 수 있습니다.

참고 자료