[java] Flyway를 사용하여 Java 애플리케이션의 데이터베이스 시드 데이터 관리하기

Flyway는 데이터베이스 마이그레이션 도구로써, Java 애플리케이션의 데이터베이스 스키마와 초기 데이터를 관리하는 데 효과적입니다. Flyway를 사용하면 쉽게 데이터베이스 변경 스크립트를 관리하고, 애플리케이션을 배포하거나 업데이트할 때 데이터베이스를 업그레이드할 수 있습니다.

Flyway 설정하기

Flyway를 사용하기 위해서는 먼저 Maven 또는 Gradle과 같은 빌드 도구를 통해 Flyway를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다:

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

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

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

데이터베이스 마이그레이션 스크립트 작성하기

Flyway를 사용하여 데이터베이스 스키마와 초기 데이터를 관리하려면 마이그레이션 스크립트를 작성해야 합니다. 마이그레이션 스크립트는 V{버전}_{설명}.sql 형식으로 작성되며, Flyway는 이를 기반으로 스키마 및 데이터베이스 변경을 관리합니다.

예를 들어, V1__create_table.sql이라는 파일을 작성하여 테이블을 생성하고, V2__insert_data.sql이라는 파일을 작성하여 초기 데이터를 삽입할 수 있습니다.

Flyway 사용하기

Flyway를 사용하려면 애플리케이션의 시작 시점에 Flyway를 초기화해야 합니다. 일반적으로 Spring Framework를 사용하는 경우 @PostConstruct 어노테이션을 사용하여 초기화할 수 있습니다.

import org.flywaydb.core.Flyway;

import javax.annotation.PostConstruct;

public class DatabaseMigration {
    
    @PostConstruct
    public void migrateDatabase() {
        Flyway flyway = Flyway.configure()
                .dataSource("jdbc:postgresql://localhost:5432/mydatabase", "username", "password")
                .load();
        
        flyway.migrate();
    }
}

dataSource 메서드의 인자로 데이터베이스의 URL, 사용자 이름 및 암호를 지정합니다. Flyway의 migrate 메서드를 호출하면 Flyway는 마이그레이션 스크립트를 차례대로 실행하여 데이터베이스를 업그레이드합니다.

데이터베이스 롤백하기

Flyway를 사용하면 데이터베이스 변경을 롤백할 수도 있습니다. 롤백은 특정 버전 이전으로 돌아가는 작업을 의미하며, 롤백할 마이그레이션 스크립트를 작성하여 Flyway를 사용하여 실행할 수 있습니다.

flyway.clean();
flyway.migrate();

위의 코드를 사용하면 Flyway는 현재 버전에서 가장 최근 버전까지의 마이그레이션 스크립트를 롤백한 후 다시 실행합니다.

결론

Flyway를 사용하면 Java 애플리케이션의 데이터베이스 시드 데이터를 효과적으로 관리할 수 있습니다. 마이그레이션 스크립트를 작성하여 데이터베이스의 스키마와 초기 데이터를 쉽게 관리하고, Flyway를 사용하여 애플리케이션을 업그레이드하는 동안 데이터베이스를 자동으로 업그레이드할 수 있습니다.

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