[java] Flyway를 사용한 Java 애플리케이션의 데이터베이스 버전 관리 전략

데이터베이스 스키마의 변경은 Java 애플리케이션 개발 시 빈번하게 발생하는 일입니다. 이러한 변경 사항을 관리하고 추적하기 위해 데이터베이스의 버전 관리 전략이 필요합니다. Flyway는 Java 애플리케이션의 데이터베이스 버전 관리를 용이하게 해주는 오픈 소스 라이브러리입니다. 이번 글에서는 Flyway를 사용하여 Java 애플리케이션의 데이터베이스 버전을 관리하는 전략을 알아보겠습니다.

Flyway란?

Flyway는 Java 애플리케이션에서 사용할 수 있는 데이터베이스 마이그레이션 도구입니다. Flyway는 데이터베이스 스키마의 변경 사항을 코드로 표현하여 관리하며, 간단한 명령어로 스키마를 업데이트하고 롤백할 수 있습니다. Flyway는 SQL 파일을 사용하여 스키마 변경 사항을 정의하고, 자동으로 변경을 적용합니다.

Flyway 설정

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

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

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

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

Flyway 설정은 flyway.conf 파일을 사용하여 정의할 수 있습니다. 이 파일은 다음과 같은 내용을 포함해야 합니다.

flyway.url=jdbc:mysql://localhost:3306/mydatabase
flyway.user=myuser
flyway.password=mypassword

위의 설정에서 flyway.url은 데이터베이스의 연결 정보를 나타내며, flyway.userflyway.password는 데이터베이스에 접근하기 위한 사용자 이름과 비밀번호입니다. Flyway는 이 설정을 기반으로 데이터베이스와의 연결을 설정합니다.

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

Flyway에서는 각각의 데이터베이스 스키마 변경 사항을 마이그레이션 스크립트라고 부릅니다. 마이그레이션 스크립트는 SQL 파일로 작성되며, Flyway는 이 파일을 사용하여 데이터베이스 스키마를 수정합니다.

마이그레이션 스크립트의 파일명은 다음과 같은 형식을 따르는 것이 좋습니다.

V{버전 번호}__{스크립트 이름}.sql

여기서 {버전 번호}는 마이그레이션 스크립트의 우선 순위를 나타내며, {스크립트 이름}은 스크립트의 내용을 요약한 이름입니다. 예를 들면, V1__initial_schema.sql과 같은 형식입니다.

마이그레이션 스크립트는 스키마 변경에 따른 SQL 문을 포함하며, Flyway가 자동으로 이를 실행합니다. Flyway는 마이그레이션 스크립트를 검사하여 수행되지 않은 스크립트를 자동으로 찾고 실행합니다.

Flyway 실행

Flyway를 실행하는 방법은 여러 가지가 있습니다. 가장 간단한 방법은 Java 애플리케이션의 시작 시점에서 Flyway를 초기화하는 것입니다. 다음은 Flyway를 사용하여 데이터베이스 마이그레이션을 수행하는 Java 코드의 예입니다.

import org.flywaydb.core.Flyway;

public class App {
    public static void main(String[] args) {
        // Flyway 설정 가져오기
        Flyway flyway = Flyway.configure().load();

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

        // 애플리케이션 실행 코드
    }
}

위의 코드에서 migrate() 메서드를 호출하여 Flyway가 데이터베이스 마이그레이션을 수행합니다. Flyway는 자동으로 마이그레이션 스크립트를 찾고, 수행되지 않은 스크립트를 실행합니다.

마이그레이션 롤백

Flyway를 사용하면 스키마 변경 사항을 롤백할 수도 있습니다. 롤백은 이전 버전의 마이그레이션 스크립트를 실행하여 데이터베이스를 이전 상태로 돌리는 것입니다. Flyway는 롤백 기능을 제공하며, 롤백을 수행하려면 flyway.rollback() 메서드를 호출하면 됩니다.

// 롤백 실행
flyway.rollback();

결론

Flyway를 사용하면 Java 애플리케이션의 데이터베이스 버전 관리를 쉽게 할 수 있습니다. Flyway는 데이터베이스 스키마 변경 사항을 마이그레이션 스크립트로 관리하고, 자동으로 변경사항을 적용하거나 롤백할 수 있습니다. Flyway를 사용하여 일관된 데이터베이스 버전 관리 전략을 구축하면 개발 과정에서 발생할 수 있는 문제를 줄이고, 데이터베이스의 안정성을 향상시킬 수 있습니다.

참고 자료