Spring/Spring Boot

[Spring Boot] Flyway를 이용한 DB 형상관리

JoonYong 2024. 6. 26. 22:13

1. Flyway란?

Flyway는 데이터베이스의 버전 관리 및 마이그레이션을 간편하게 도와주는 오픈 소스 라이브러리입니다. 데이터베이스 스키마와 데이터의 변경 이력을 코드로 관리할 수 있으며, 변경 사항을 쉽게 추적하고 반영할 수 있게 합니다.

 

 

2. Flyway의 주요 기능

  • 버전 관리: 데이터베이스 변경 이력을 버전별로 관리할 수 있습니다.
  • 자동 마이그레이션: 애플리케이션 시작 시 자동으로 데이터베이스 변경 사항을 적용할 수 있습니다.
  • 다양한 데이터베이스 지원: MySQL, PostgreSQL, Oracle 등 다양한 데이터베이스를 지원합니다.
  • Rollback 기능: 잘못된 마이그레이션을 쉽게 되돌릴 수 있습니다.

 

3. Flyway 설정 및 사용 방법

3.1. Flyway 의존성 추가

먼저 프로젝트에 Flyway 의존성을 추가해야 합니다. Maven이나 Gradle을 사용하여 Flyway를 프로젝트에 추가할 수 있습니다.

Gradle

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

Maven

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

 

 

 

3.2. Flyway 설정 파일 작성

Flyway의 설정 파일은 src/main/resources/application.yml 또는 application.properties에 작성합니다.

application.yml 예시

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: root
  flyway:
    enabled: true
    locations: classpath:db/migration
    baseline-on-migrate: true

 

3.3. 마이그레이션 파일 작성

Flyway는 resources/db/migration 디렉토리 아래에 SQL 파일을 두고 관리합니다. 파일명은 V{버전번호}__{설명}.sql 형식을 따릅니다.

예시: 테이블 생성

V1__create_user_table.sql

CREATE TABLE IF NOT EXISTS users (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL
);

예시: 컬럼 추가

V2__add_age_column_to_user_table.sql

ALTER TABLE users ADD COLUMN age INT;

 

3.4. 애플리케이션 실행

애플리케이션을 실행하면 Flyway가 자동으로 db/migration 디렉토리 아래의 마이그레이션 파일들을 실행하여 데이터베이스 스키마를 변경합니다.

 

 

4. Flyway의 장점

  • 자동화: 애플리케이션 시작 시 자동으로 데이터베이스 변경 사항을 적용합니다.
  • 일관성: 모든 데이터베이스 변경 이력이 코드로 관리되기 때문에 일관성을 유지할 수 있습니다.
  • 유지보수 용이: 변경 이력을 추적할 수 있어 유지보수가 용이합니다.

 

[Reference]]