[java] Flyway를 사용한 Java 애플리케이션의 데이터베이스 설치 및 업그레이드 전략

Flyway는 Java 개발자들이 데이터베이스에 대한 마이그레이션과 버전 관리를 쉽게 할 수 있게 도와주는 오픈소스 라이브러리입니다. 이번 블로그 글에서는 Flyway를 사용하여 Java 애플리케이션의 데이터베이스 설치 및 업그레이드 전략에 대해 알아보겠습니다.

1. Flyway 설정하기

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

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

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

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

이제 Flyway를 설정할 준비가 되었습니다.

2. 데이터베이스 마이그레이션 디렉토리 생성

Flyway에서는 데이터베이스 마이그레이션 스크립트를 migrations라는 디렉토리에 저장합니다. 프로젝트의 루트 디렉토리에 db/migration 디렉토리를 생성하고 여기에 마이그레이션 스크립트를 저장합니다.

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

마이그레이션 스크립트는 데이터베이스 스키마의 변경 내용을 기록한 SQL 파일입니다. 각각의 스크립트는 버전을 가지고 있어야 하며, 이 버전을 기준으로 Flyway가 최신 버전까지 마이그레이션을 수행합니다.

예를 들어, V1__Create_table.sql이라는 스크립트를 작성하여 첫 번째 버전의 테이블을 생성한다고 가정해봅시다. 스크립트 내용은 다음과 같을 수 있습니다.

CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

4. 데이터베이스 마이그레이션 실행

이제 Flyway를 사용하여 데이터베이스 마이그레이션을 실행할 차례입니다. Java 애플리케이션의 시작 시점에 Flyway를 초기화하고 마이그레이션을 실행해야 합니다.

import org.flywaydb.core.Flyway;

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

        flyway.migrate();
    }
}

위 예제에서는 dataSource 메서드로 데이터베이스 연결 정보를 설정하고, locations 메서드로 마이그레이션 스크립트가 있는 디렉토리를 지정합니다. load 메서드로 Flyway 객체를 초기화한 후, migrate 메서드를 호출하여 마이그레이션 작업을 수행합니다.

5. 업그레이드 전략

새로운 데이터베이스 마이그레이션을 추가하거나 기존 마이그레이션 스크립트를 수정해야 할 때는 다음과 같은 절차를 따릅니다.

  1. migrations 디렉토리에 새로운 마이그레이션 스크립트를 추가합니다. 스크립트 파일의 이름은 반드시 버전을 포함해야 합니다. 예를 들어, V2__Add_column.sql과 같이 작성합니다.
  2. Java 애플리케이션을 실행하여 Flyway를 통해 마이그레이션을 수행합니다.

Flyway는 내부적으로 schema_version 테이블을 유지하며, 각 마이그레이션 스크립트의 상태와 적용 순서를 추적합니다. 따라서 Flyway를 통해 계속해서 마이그레이션 스크립트를 실행하면, 데이터베이스 스키마를 안정적으로 유지하면서 애플리케이션의 데이터베이스 업그레이드 작업을 수행할 수 있습니다.

참고 자료

Flyway를 사용하여 데이터베이스의 설치 및 업그레이드를 관리하는 것은 Java 애플리케이션의 개발 생산성을 높이고 유지 보수를 용이하게 만드는 좋은 방법입니다. Flyway를 사용하여 데이터베이스 관리를 시작해보세요!