HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
👩‍👩‍👦‍👦
[팀01] 김팽박이
/
🌝
What we learn
/
🎰
Flyway 를 사용한 데이터베이스 형상관리
Flyway 를 사용한 데이터베이스 형상관리
🎰

Flyway 를 사용한 데이터베이스 형상관리

PERSON
STATUS
완료

데이터베이스도 git 과 같은 데이터베이스를 위한 형상관리 도구가 존재한다.

 
Flyway
깃-들다 프로젝트를 진행하며 DB 형상관리를 위해 Flyway를 도입했다. 여기서 DB 형상관리와 Flyway가 무엇일까? 이번 글에서 한번 알아보자. Flyway 공식 문서에서는 Flyway를 다음과 같이 소개한다. Flyway is an open-source database migration tool. Flyway는 오픈소스 DB 마이그레이션 도구로, DB 형상관리를 위한 도구이다. 개발을 하며 한번 쯤은 형상관리 도구를 사용해본 경험이 있을 거다.
Flyway
https://tecoble.techcourse.co.kr/post/2021-10-23-flyway/
Flyway
Liquibase vs. Flyway
While both tools are based on Martin Fowler's Evolutionary Database, there are many differences in what these tools offer. Here's where Liquibase and Flyway differ. The bottom line is that Liquibase is more powerful and flexible - covering more database change and deployment use cases than Flyway.
Liquibase vs. Flyway
https://www.liquibase.com/liquibase-vs-flyway
Liquibase vs. Flyway

데이터베이스의 형상관리가 필요한 이유??

배포를 완료하고 서비스를 운영하던 도중 데이터베이스의 구조가 변경될 가능성이 존재한다. 하지만 운영 환경에서는 ddl-auto 와 옵션을 줄 수 없기 때문에 일일이 SQL 을 날려줘야 한다. 이렇게 데이터베이스의 유지보수를 하는 과정에 명령어 누락과 같은 실수로 인해 오류가 발생할 가능성이 커지기 때문에 데이터베이스도 형상관리가 필요하다.

자바에서 사용되는 형상관리 도구는 대표적으로 Flyway 와 Liquibase 가 있다. 둘 다 오픈소스이며 무료, 유료 버전이 존재한다.

Flyway vs Liquibase

notion image
notion image
  • Flyway 는 주로 SQL, Liquibase 는 JSON, YAML, XML 등으로 데이터베이스의 변경사항을 정의할 수 있다.
  • Liquibase 는 데이터베이스의 현재 상태에 대한 스냅샷을 찍을 수 있다.
  • 두 도구 모두 자바에서 사용하기 좋지만 자바 코드를 사용하여 데이터베이스를 변경하는 것은 Flyway 에서만 지원된다.
  • Flyway 는 유료 버전에서만 롤백을 지원하지만 Liquibase 는 무료버전에서도 롤백을 지원한다.
이 외에 Liquibase 가 기본적으로 제공해주는 기능들이 더 다양하다.

Flyway 를 선택한 이유

  • Flyway 를 다루는 글들을 보다 쉽게 찾아볼 수 있었기 때문에 문제가 생겼을 경우 정보를 찾아보기 수월할 것 같다고 생각했다.
  • Liquibase 에서 무료로 제공하는 기능들이 더 많다고는 하지만 이러한 기능들을 다 사용할 일이 없을 것 같았다.

Flyway 설정

Flyway - DB Migration Tool
Java 진영에서의 Database Migration Tool에는 대표적으로 Flyway, Liquibase가 있다. 두 가지 도구 모두 데이터베이스 리팩토링 및 버전 관리를 위한 도구이며, 스프링 부트에서 공식적으로 자동 설정을 지원해준다. 그리고 둘 다 오픈소스이며 무료, 유료 버전이 있다. 위 사진은 Spring Initialzr 에서 Dependencies를 확인한 모습이다. Flyway by Redgate - Database Migration Made Easy.
Flyway - DB Migration Tool
https://velog.io/@banjjoknim/DB-Migration-Tool
Flyway - DB Migration Tool
build.gradle
implementation 'org.flywaydb:flyway-core'
 
application.yml
flyway: enabled: true baseline-on-migrate: true
  • baseline-on-migrate: flyway_schema_history 가 이미 존재한다면 false 처음이라면 true 로 설정해준다.
  • Flyway 를 적용할 때는 ddl-auto 옵션을 none 또는 validate 를 사용해야 한다.
    • ddl-auto 옵션이 실행될 때 중복되서 테이블을 생성하면서 already exists ' ' table 과 같은 에러가 발생하기 때문이다.
    •  

Flyway 에서 SQL을 사용하기 위해서는 파일 규칙이 존재한다.

Migration Script Naming Rule

물론 yaml 파일에서 설정을 통해서 변경할 수 있다.
물론 yaml 파일에서 설정을 통해서 변경할 수 있다.

Script Locations

작성된 파일은 classpath:db/migration 디렉터리에 두어야 한다.
작성된 파일은 classpath:db/migration 디렉터리에 두어야 한다.
 
flyway_schema_history 테이블이 정상적으로 생성된다.
flyway_schema_history 테이블이 정상적으로 생성된다.
 

주의사항!!

기존에 있던 sql 파일들은 수정하거나 삭제해서는 안된다. 수정할 일이 생기면 새로운 버전의 sql 파일을 새로 만들어서 추가해야 한다. 만약 문제가 생기면 history 테이블을 수정해야 한다.
 

JPA Buddy 플러그인을 설치하면 SQL 파일을 만드는 작업을 자동으로 할 수 있음!!