본문 바로가기
스프링 부트3

스프링 부트 3와 Flyway: 데이터베이스 마이그레이션을 위한 완벽한 조합

by 굿센스굿 2024. 12. 6.
반응형

 


스프링 부트 3와 Flyway의 만남

스프링 부트(Spring Boot)는 빠르고 간편하게 애플리케이션을 개발할 수 있도록 돕는 프레임워크로, 특히 스프링 부트 3는 최신 기술과 성능 개선을 바탕으로 더욱 강력해졌습니다. 여기에 데이터베이스 스키마 관리를 책임지는 Flyway를 결합하면 복잡한 데이터베이스 마이그레이션 작업도 손쉽게 처리할 수 있습니다.

이 블로그에서는 스프링 부트 3와 Flyway의 기본 개념, 설정 방법, 그리고 실제 예제를 통해 데이터베이스 마이그레이션 과정을 단계별로 설명합니다.


Flyway란 무엇인가?

Flyway는 데이터베이스 스키마 버전 관리와 마이그레이션을 자동으로 처리해주는 오픈소스 라이브러리입니다.
주요 특징은 다음과 같습니다:

  1. 버전 관리: SQL 스크립트를 통해 데이터베이스의 변경 사항을 체계적으로 관리합니다.
  2. 자동 마이그레이션: 애플리케이션 시작 시 자동으로 스키마를 최신 상태로 유지합니다.
  3. 다양한 데이터베이스 지원: MySQL, PostgreSQL, Oracle 등 여러 DBMS와 호환됩니다.
  4. 간단한 설정: 별도의 복잡한 설정 없이 쉽게 통합 가능합니다.

스프링 부트 3와 Flyway의 설정 방법

스프링 부트 3에서 Flyway를 사용하는 기본 설정 과정을 알아봅시다.

1. 의존성 추가

스프링 부트 3 프로젝트에 Flyway를 사용하려면 build.gradle 또는 pom.xml 파일에 Flyway 의존성을 추가해야 합니다.

Gradle:

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

Maven:

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

2. 데이터베이스 설정

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

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

Flyway는 기본적으로 db/migration 경로에 있는 SQL 스크립트를 실행합니다. 스크립트 이름은 버전 번호를 포함한 형식을 따라야 합니다.
예: V1__Create_users_table.sql

V1__Create_users_table.sql:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4. 애플리케이션 실행

애플리케이션을 실행하면 Flyway가 db/migration 폴더의 스크립트를 읽어 데이터베이스를 자동으로 마이그레이션합니다.


실전 예제: 다양한 상황에서의 Flyway 활용

예제 1: 기존 프로젝트에서 Flyway 도입

기존 데이터베이스가 있는 프로젝트에 Flyway를 추가하려면 현재 스키마를 기반으로 초기화하는 작업이 필요합니다.

  • Flyway의 baseline 기능을 사용하여 현재 스키마 상태를 기준으로 설정합니다.
flyway:
  baseline-on-migrate: true
  baseline-version: 1

예제 2: 다중 데이터베이스 마이그레이션

프로젝트에서 두 개 이상의 데이터베이스를 사용하는 경우, Flyway는 데이터베이스별로 별도의 설정을 지원합니다.

spring:
  flyway:
    datasource1:
      url: jdbc:mysql://localhost:3306/db1
      username: user1
      password: pass1
    datasource2:
      url: jdbc:mysql://localhost:3306/db2
      username: user2
      password: pass2

예제 3: 커스텀 스크립트 경로

기본 경로 외에 다른 경로에서 스크립트를 로드해야 한다면, locations 속성을 수정하면 됩니다.

flyway:
  locations: filesystem:/custom/sql

Flyway의 주요 이점

  1. 자동화된 마이그레이션
    개발자가 수동으로 데이터베이스를 관리할 필요가 없어 생산성을 높입니다.
  2. 일관성 보장
    모든 변경 사항이 버전 관리되므로 개발, 테스트, 배포 환경에서 데이터베이스 상태가 항상 일관성을 유지합니다.
  3. 유연한 확장성
    새로운 테이블 추가, 수정 작업을 손쉽게 관리할 수 있어 애플리케이션 확장이 용이합니다.

마무리

스프링 부트 3와 Flyway는 현대 애플리케이션 개발에서 데이터베이스 스키마 관리의 복잡성을 해결하는 강력한 도구입니다. Flyway를 통해 마이그레이션을 자동화하고, 버전 관리를 체계화하며, 애플리케이션 개발 속도를 한층 높일 수 있습니다.

이제 스프링 부트 3와 Flyway를 활용하여 데이터베이스 관리의 효율성을 극대화해 보세요!

반응형