| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 도커
- GitHub Packages
- 백엔드
- PostgreSQL
- MSA
- 마이크로서비스아키텍처
- gradle
- CS
- 백엔드면접준비
- java
- 컨테이너
- 마이그레이션
- 분산시스템
- 인프라
- Database
- docker
- Java 8
- 자바
- dockercompose
- ci/cd
- GCP
- springboot
- 멀티모듈
- 트러블슈팅
- Flyway
- SpringCloud
- 아키텍처
- github actions
- 공통모듈
- 마이크로서비스
- Today
- Total
NYO_O
JPA ddl-auto는 이제 그만! 실무에서 쓰는 DB 마이그레이션 툴 비교 (Flyway vs Liquibase) 본문
JPA ddl-auto는 이제 그만! 실무에서 쓰는 DB 마이그레이션 툴 비교 (Flyway vs Liquibase)
NYO_O 2026. 5. 20. 00:54안녕하세요! 지난 시간에는 IT 업계에서 말하는 '마이그레이션'의 기본 개념에 대해 알아보았는데요. 오늘은 조금 더 깊이 들어가서, 개발자들의 실무에 초점을 맞춘 '데이터베이스(DB) 마이그레이션'에 대해 이야기해 보려고 합니다.
특히 자바(Java) 진영에서 가장 많이 사용하는 Spring Boot + JPA 환경을 기준으로, 실무에서는 어떤 DB 마이그레이션 툴을 사용하고 있는지, 각 툴의 장단점은 무엇인지 비교해 보겠습니다.
JPA ddl-auto, 실무에서는 위험해요!
Spring Boot와 JPA를 처음 배울 때, 엔티티(Entity) 클래스만 작성하면 데이터베이스 테이블을 자동으로 생성해 주는 spring.jpa.hibernate.ddl-auto 기능에 감탄했던 기억, 다들 있으시죠?
- create, update 등을 설정해두면 개발 초기에는 정말 편리합니다.
- 하지만! 운영(Production) 환경에서 update나 create를 잘못 사용했다가는 기존 데이터가 날아가거나 DB 스키마가 꼬이는 대형 사고가 발생할 수 있습니다.
그래서 실무 환경에서는 ddl-auto를 none이나 validate로 설정하고, 데이터베이스 스키마의 변경 이력을 안전하게 관리하기 위해 DB 마이그레이션 툴을 도입합니다.
2026.05.20 - [IT 용어 사전] - IT 업계 단골 용어, '마이그레이션(Migration)' 완벽 정복! (feat. 레거시)
IT 업계 단골 용어, '마이그레이션(Migration)' 완벽 정복! (feat. 레거시)
1. 서론: 왜 갑자기 '마이그레이션'일까?"우리 회사 이번에 클라우드로 마이그레이션 한대." "기존 데이터 마이그레이션 작업 때문에 이번 주말은 반납이야..."IT 업계에서 일하시거나, 혹은 관련
ddangnyo.tistory.com
DB 마이그레이션 툴이란? 쉽게 말해 "데이터베이스를 위한 Git(버전 관리 시스템)"이라고 생각하시면 됩니다. 스키마의 생성, 변경, 삭제 이력을 코드로 관리하고 추적할 수 있게 해줍니다.
DB 마이그레이션 툴의 양대 산맥: Flyway vs Liquibase
Spring Boot 환경에서 가장 사랑받는 DB 마이그레이션 툴은 크게 Flyway(플라이웨이)와 Liquibase(리퀴베이스) 두 가지입니다. 두 툴 모두 훌륭하지만, 접근 방식과 특징이 꽤 다릅니다.
1. Flyway (플라이웨이)
Flyway는 "SQL 기반의 직관적이고 심플한 마이그레이션 툴"입니다.
- 어떻게 작동하나요? 개발자가 직접 순수 SQL문(DDL, DML)을 작성하여 파일로 저장하면(V1__init.sql, V2__add_column.sql 등), Flyway가 파일 이름의 버전을 순서대로 읽어 DB에 반영합니다.
장점
- 직관적이고 낮은 러닝 커브: SQL만 알면 누구나 바로 사용할 수 있습니다. 새로운 문법을 배울 필요가 없습니다.
- DB 고유 기능 활용 가능: 특정 DB(MySQL, PostgreSQL 등)에서만 제공하는 고유한 함수나 기능을 SQL 파일에 그대로 작성할 수 있습니다.
- 가볍고 빠름: 설정이 매우 간단하고 직관적입니다.
단점
- DB 종속성: 순수 SQL을 작성하므로, 만약 프로젝트 중간에 DB 종류를 변경(예: MySQL -> PostgreSQL)한다면 마이그레이션 스크립트를 전부 다시 작성해야 합니다.
- 롤백(Rollback)의 한계: 무료 버전에서는 자동 롤백 기능을 지원하지 않아, 롤백이 필요할 경우 직접 롤백용 SQL 스크립트를 작성하고 실행해야 하는 번거로움이 있습니다.
2. Liquibase (리퀴베이스)
Liquibase는 "DB에 종속되지 않는 유연하고 강력한 마이그레이션 툴"입니다.
- 어떻게 작동하나요? SQL뿐만 아니라 XML, YAML, JSON 등 다양한 포맷으로 스키마 변경 사항(ChangeSet)을 정의할 수 있습니다. Liquibase가 이 설정 파일을 읽어 현재 연결된 DB에 맞는 SQL로 변환하여 실행해 줍니다.
장점
- 데이터베이스 독립성: XML이나 YAML로 스키마를 정의해 두면, DB 엔진을 변경하더라도 Liquibase가 알아서 해당 DB에 맞는 쿼리로 번역해 줍니다.
- 강력한 롤백(Rollback) 기능: 오픈소스(무료) 버전에서도 롤백 기능을 기본적으로 지원합니다. add column 같은 작업은 태그를 이용해 손쉽게 이전 상태로 되돌릴 수 있습니다.
- 다양한 포맷 지원: 팀의 선호도에 따라 XML, YAML, JSON, SQL 등 원하는 형식을 선택할 수 있습니다.
단점
- 높은 러닝 커브: Liquibase만의 문법(XML/YAML 태그 등)을 새로 익혀야 합니다.
- 복잡함과 장황함: 간단한 테이블을 생성할 때도 SQL로 한 줄이면 끝날 것을, XML이나 YAML로 작성하면 코드가 상당히 길어질 수 있습니다.
한눈에 보는 비교 요약
| 특징 | Flyway | Liquibase |
| 작성 방식 | 순수 SQL (또는 Java) | XML, YAML, JSON, SQL |
| 학습 곡선 (러닝 커브) | 매우 낮음 (SQL만 알면 됨) | 다소 높음 (전용 문법 학습 필요) |
| DB 종속성 | 종속적 (작성한 SQL에 따라 다름) | 독립적 (DB가 바뀌어도 유지 가능) |
| 롤백 기능 | 무료 버전 지원 X (직접 작성해야 함) | 무료 버전 지원 O (자동/수동 롤백 용이) |
| 적합한 프로젝트 | 빠르고 직관적인 설정이 필요한 곳 | 복잡한 요구사항과 DB 변경 가능성이 있는 곳 |
그래서, 어떨 때 무엇을 사용하는 게 좋을까요?
정답은 "팀의 상황과 프로젝트의 성격에 따라 다르다"입니다.
Flyway를 추천하는 경우
- 팀원들이 SQL 작성에 매우 능숙한 경우
- 프로젝트 도중에 데이터베이스 엔진(MySQL, Oracle, PostgreSQL 등)이 바뀔 일이 거의 확정적으로 없는 경우
- 복잡한 설정 없이 직관적이고 빠르게 마이그레이션 환경을 구축하고 싶은 경우
- (실제 국내의 많은 스타트업과 IT 기업들이 직관성 때문에 Flyway를 많이 채택하고 있습니다.)
Liquibase를 추천하는 경우
- B2B 솔루션처럼 고객사마다 사용하는 데이터베이스 엔진이 달라서 여러 DB를 동시에 지원해야 하는 경우
- 마이그레이션 롤백 기능이 프로젝트 운영에 매우 중요하게 작용하는 경우
- 엔터프라이즈급의 복잡한 데이터베이스 관리 기능이 필요한 경우
마치며
초기 세팅은 조금 귀찮을 수 있지만, 한번 DB 마이그레이션 툴을 도입하고 나면 "DB 스키마 변경에 대한 두려움"이 싹 사라집니다. 개발 서버, 테스트 서버, 운영 서버의 DB 상태를 일관되게 유지할 수 있으니까요!
다음 포스팅에서는 실제로 Spring Boot 프로젝트에 Flyway(또는 Liquibase)를 적용하는 튜토리얼로 돌아오겠습니다. 감사합니다!
'Architecture' 카테고리의 다른 글
| SOLID 원칙, 좋은 객체지향 설계를 위한 다섯 가지 기준 (feat. Java) (0) | 2026.05.27 |
|---|---|
| 객체지향 프로그래밍(OOP)의 4대 원칙, (feat. Java) (0) | 2026.05.27 |
| 응집도와 결합도, 좋은 코드가 지켜야 할 두 가지 원칙 (feat. Java) (0) | 2026.05.27 |