[java] Flyway를 사용하여 Java 애플리케이션의 데이터베이스 패치 생성하기

Flyway는 데이터베이스 마이그레이션 도구로, Java 애플리케이션 개발자들이 데이터베이스 스키마의 변경을 쉽게 관리할 수 있도록 도와줍니다. Flyway는 간단하고 직관적인 명령어를 제공하여 데이터베이스 패치 작업을 자동화할 수 있습니다.

1. Maven 또는 Gradle에 Flyway 종속성 추가하기

Flyway를 사용하려면 먼저 Maven 또는 Gradle 빌드 도구를 사용하여 해당 종속성을 프로젝트에 추가해야 합니다. Maven의 경우, pom.xml 파일에 다음의 종속성을 추가하세요:

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

Gradle의 경우, build.gradle 파일에 다음의 종속성을 추가하세요:

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

2. 데이터베이스 설정하기

Flyway를 사용하기 위해서는 데이터베이스에 대한 설정이 필요합니다. application.properties 또는 application.yml 파일에 데이터베이스 연결 정보를 추가하세요. 예를 들어, MySQL을 사용한다면 다음과 같이 설정할 수 있습니다:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=dbuser
spring.datasource.password=dbpassword

3. 데이터베이스 마이그레이션 스크립트 생성하기

Flyway는 마이그레이션 스크립트를 통해 데이터베이스 스키마의 변경 내용을 관리합니다. 마이그레이션 스크립트는 SQL 또는 자바 파일로 작성할 수 있습니다.

3.1. SQL 마이그레이션 스크립트

SQL 마이그레이션 스크립트는 V{version}__{description}.sql 형식으로 작성되어야 합니다. version은 마이그레이션 스크립트의 버전을 의미하며, 이는 Flyway가 스크립트를 정렬하여 적용하는 순서를 결정합니다. description은 마이그레이션 스크립트의 설명을 나타냅니다.

예를 들어, V1__create_table.sql 파일을 생성하여 다음과 같이 작성할 수 있습니다:

CREATE TABLE IF NOT EXISTS mytable (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

3.2. 자바 마이그레이션 스크립트

자바 마이그레이션 스크립트는 V{version}__{description}.java 형식으로 작성되어야 합니다. 마이그레이션 스크립트는 Migration 인터페이스를 구현해야 하며, migrate() 메소드에서 변경 내용을 실행해야 합니다.

예를 들어, V2__insert_data.java 파일을 생성하여 다음과 같이 작성할 수 있습니다:

public class V2__insert_data implements Migration {

    @Override
    public void migrate(Context context) throws Exception {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(context.getConnection());
        jdbcTemplate.execute("INSERT INTO mytable (id, name) VALUES (1, 'John')");
    }
}

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

Flyway를 사용하여 데이터베이스 마이그레이션을 실행하려면 애플리케이션을 시작할 때 Flyway를 초기화하고 마이그레이션을 실행하는 코드를 추가해야 합니다.

예를 들어, Spring Boot를 사용하는 경우, 애플리케이션 클래스에 @FlywayMigration 어노테이션을 추가하여 Flyway를 자동으로 설정하고 마이그레이션을 실행할 수 있습니다:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.flywaydb.core.api.configuration.FluentConfiguration;
import org.flywaydb.core.api.configuration.Configuration;
import org.flywaydb.core.Flyway;

@SpringBootApplication
@FlywayMigration
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);

        Configuration flywayConfig = new FluentConfiguration()
                .dataSource(dataSource)
                .locations("classpath:db/migration")
                .load();
                
        Flyway flyway = new Flyway(flywayConfig);
        flyway.migrate();
    }
}

위의 코드에서 dataSource는 애플리케이션에 적합한 데이터베이스 연결을 설정해야 합니다.

결론

Flyway를 사용하여 Java 애플리케이션의 데이터베이스 패치를 생성하는 방법을 알아보았습니다. Flyway를 통해 데이터베이스 마이그레이션 작업을 쉽게 관리할 수 있으며, SQL 또는 자바를 이용하여 마이그레이션 스크립트를 작성할 수 있습니다. Flyway를 적용하여 데이터베이스 스키마 변경을 안정적으로 관리하고 애플리케이션 배포 과정을 자동화하세요.

참고 자료