[java] Flyway를 사용하여 Java 애플리케이션에서 데이터베이스 마이그레이션하기

많은 Java 애플리케이션에서는 데이터베이스 스키마의 변경이 필요한 경우가 종종 발생합니다. 이때 데이터베이스 마이그레이션 도구인 Flyway를 사용하면 편리하게 스키마 변경을 관리할 수 있습니다. Flyway는 버전 관리 시스템과 같은 방식으로 데이터베이스 스키마의 변경 내역을 추적하고 적용합니다.

이번 글에서는 Java 애플리케이션에서 Flyway를 이용하여 데이터베이스 마이그레이션을 수행하는 방법을 알아보겠습니다.

개요

Flyway는 데이터베이스 스키마 변경에 대한 마이그레이션 스크립트를 작성하고 실행하는 도구입니다. 스크립트는 버전이나 타임스탬프로 구분되며, Flyway는 이를 이용하여 마이그레이션의 순서를 보장합니다. 또한, Flyway는 이미 마이그레이션된 스크립트를 자동으로 스킵하고, 변경된 스크립트만 실행하므로 안전하게 마이그레이션을 수행할 수 있습니다.

설치

Flyway를 사용하기 위해서는 먼저 해당 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가하시면 됩니다:

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

Gradle을 사용하는 경우, build.gradle 파일에 다음 의존성을 추가하시면 됩니다:

implementation 'org.flywaydb:flyway-core:7.10.2'

사용 방법

Flyway를 사용하는 가장 기본적인 방법은 마이그레이션 스크립트를 src/main/resources/db/migration 디렉토리에 작성하는 것입니다. 이 디렉토리에는 각각의 마이그레이션 스크립트를 위한 디렉토리가 더 있을 수 있습니다.

마이그레이션 스크립트는 SQL로 작성되며, Flyway가 자동으로 실행합니다. 스크립트 파일은 다음과 같은 형식으로 작성되어야 합니다:

V{버전 또는 타임스탬프}__{스크립트_이름}.sql

예를들어, V1.0__create_table.sql과 같은 이름을 가진 스크립트 파일은 버전 1.0의 마이그레이션 스크립트임을 나타냅니다.

Flyway를 사용하는 Java 애플리케이션에서는 다음과 같이 Flyway 인스턴스를 생성하고 마이그레이션을 실행할 수 있습니다:

import org.flywaydb.core.Flyway;

public class Main {
    public static void main(String[] args) {
        // Flyway 인스턴스 생성
        Flyway flyway = Flyway.configure()
                .dataSource("jdbc:mysql://localhost:3306/mydb", "username", "password")
                .locations("classpath:db/migration")
                .load();

        // 마이그레이션 실행
        flyway.migrate();
    }
}

위 예제에서는 MySQL 데이터베이스를 사용하여 Flyway 인스턴스를 생성하고, classpath:db/migration 위치에 있는 마이그레이션 스크립트를 실행하도록 설정했습니다.

추가 설정

Flyway는 다양한 추가 설정을 제공하여 마이그레이션을 조정할 수 있습니다. 몇 가지 주요 설정 옵션을 살펴보겠습니다:

Flyway의 기타 설정 옵션에 대해서는 공식 문서를 참고하시기 바랍니다.

결론

Flyway를 사용하면 Java 애플리케이션의 데이터베이스 마이그레이션을 효율적으로 관리할 수 있습니다. Flyway를 사용하여 마이그레이션 스크립트를 작성하고 실행하는 방법에 대해 알아보았습니다. Flyway의 강력한 기능과 설정 옵션들을 잘 활용해서 데이터베이스 변경을 안전하게 관리하세요.

참고 자료