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를 적용하여 데이터베이스 스키마 변경을 안정적으로 관리하고 애플리케이션 배포 과정을 자동화하세요.
참고 자료
- Flyway 공식 문서: https://flywaydb.org/documentation/
- Spring Boot와 Flyway 통합 가이드: https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.data-initialization.flyway