[java] Flyway를 사용하여 Java 애플리케이션의 데이터베이스 접근 제어하기

Flyway는 자바 애플리케이션의 데이터베이스 마이그레이션(Migration)을 쉽게 관리하기 위한 도구입니다. Flyway를 사용하면 데이터베이스의 스키마 변화를 추적하고, 이를 버전 관리하여 애플리케이션과 데이터베이스 사이의 일관성을 유지할 수 있습니다.

Flyway를 사용하여 데이터베이스 접근을 제어하는 방법을 알아보겠습니다.

1. Maven 또는 Gradle에 Flyway 의존성 추가하기

먼저, Maven 또는 Gradle 프로젝트의 의존성에 Flyway를 추가해야 합니다.

Maven:

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

Gradle:

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

Flyway의 최신 버전을 사용하기 위해서는 버전 번호를 업데이트해야 합니다.

2. 데이터베이스 마이그레이션 파일 작성하기

Flyway는 migration 디렉토리에 위치한 숫자로 시작하는 SQL 마이그레이션 파일을 실행합니다. 이 파일들은 데이터베이스의 스키마 변화를 기록하는 스크립트로서 사용됩니다.

예를 들어, V1__Create_Table.sql과 같은 형식으로 마이그레이션 파일을 작성할 수 있습니다. 이 파일은 스키마의 버전을 나타내는 숫자와 언더스코어(__)로 구분하여 작성합니다.

-- V1__Create_Table.sql

CREATE TABLE my_table (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);

3. Flyway 구성하기

Flyway를 사용하기 위해 애플리케이션에서 Flyway를 구성해야 합니다. 일반적으로 애플리케이션의 시작점인 main 메서드를 사용하여 Flyway를 초기화합니다.

import org.flywaydb.core.Flyway;

public class MyApp {
    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 메서드로 마이그레이션 파일이 위치한 경로를 지정합니다.

마지막으로 migrate 메서드를 호출하여 Flyway가 데이터베이스 마이그레이션을 실행합니다.

4. 애플리케이션 실행 및 데이터베이스 마이그레이션 확인하기

Flyway를 구성하고 애플리케이션을 실행하면 Flyway가 migration 디렉토리에 있는 마이그레이션 파일을 찾아 실행합니다. 이 때, Flyway는 데이터베이스에 마이그레이션 이력을 저장하여 중복 실행되지 않도록 합니다.

Flyway는 애플리케이션 실행 시 자동으로 마이그레이션을 수행하므로, 애플리케이션을 실행할 때마다 Flyway가 마이그레이션을 실행할 필요가 있으면 자동으로 실행됩니다.

참고 자료