๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring

Spring DB Migration Tool Flyway, Liquibase ํŠน์ง•, ์œ ์‚ฌ์ , ์ฐจ์ด์ 

by ํ‘์‹œ๋ฐ” 2023. 5. 13.

๐Ÿ“– DB Migration Tool

 

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜(migration)์ด๋ž€, ํ•œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๋‹ค๋ฅธ ์šด์˜ํ™˜๊ฒฝ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€? ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™˜๊ฒฝ์—์„œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™˜๊ฒฝ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์ด๋‹ค.

 

์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ, ๊ทธ ๊ณผ์ • ์•ˆ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์„ ํ†ตํ‹€์–ด์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด๋ผ ํ•œ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์œผ๋‚˜, ์šด์˜ ํ™˜๊ฒฝ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์„œ๋น„์Šค ๋กœ์ง๊ณผ ์Šคํ‚ค๋งˆ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ์šด์˜ ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜๊ธฐ๋กœ ์˜ฎ๊ธธ ๋•Œ ์ผ๋ถ€ ๋ˆ„๋ฝ ๋“ฑ์˜ ์‹ค์ˆ˜๋กœ ์• ๋ฅผ ๋จน๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ค€๋‹ค.

 

๋˜ํ•œ, ์—…๋ฐ์ดํŠธ ๋‚ด์—ญ์„ ํŠน์ • ํ…Œ์ด๋ธ”์— ๊ธฐ๋กํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ–ฅํ›„ ์ด๋ ฅ์„ ์ถ”์ ํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค.

 

 ๐Ÿ“• Flyway, Liquibase

 

Java์—์„œ DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํˆด์€ ๋Œ€ํ‘œ์ ์œผ๋กœ Flyway์™€ Liquibase๊ฐ€ ์žˆ๋‹ค.

 

๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฆฌํŒฉํ† ๋ง, ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ์ด๋ฉฐ ์Šคํ”„๋ง์—์„œ ๊ณต์‹์ ์œผ๋กœ ์„ค์ •์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ๋‘˜ ๋‹ค ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ผ๋ถ€ ๊ธฐ๋Šฅ์€ ์œ ๋ฃŒ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

 

 

 

Flyway๋Š” Apache ๋ผ์ด์„ ์Šค 2.0์— ๋”ฐ๋ผ ๋ผ์ด์„ ์Šค๊ฐ€ ๋ถ€์—ฌ๋œ ์˜คํ”ˆ ์†Œ์Šค ๋„๊ตฌ๋กœ, SQL ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” Java ์ฝ”๋“œ๋กœ ํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ ์ž‘์—…์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™ํ™”๋œ ๋ฒ„์ „ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ช…๋ น์ค„์„ ํ†ตํ•ด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฃผ์š” ํŠน์ง•์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ SQL ํ˜•์‹๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Java ์ฝ”๋“œ๋กœ๋„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณต์žกํ•˜๊ณ  ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Liquibase๋Š” SQL, XML, YAML ๋ฐ JSON์œผ๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋Š” changeLogs ๋ฐ changeSets ๊ฐœ๋…์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์ถ•๋œ ์˜คํ”ˆ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ์ด๋‹ค.

 

MySQL, Oracle, DB2 ๋ฐ PostgreSQL์„ ํฌํ•จํ•˜์—ฌ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง€์›ํ•œ๋‹ค.

 

๐Ÿ”Ž  Flyway, Liquibase ์œ ์‚ฌ์ 

 

- ์˜คํ”ˆ ์†Œ์Šค, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ด€๋ฆฌ, ์ถ”์  ๋ฐ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ๋„์›€
- ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๋ฒ„์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ ‘๊ทผ ๋ฐฉ์‹ ์‚ฌ์šฉ
- Java ๊ธฐ๋ฐ˜, Spring Boot ๋ฐ Vert.x์™€ ๊ฐ™์€ Java ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ์ง€์› ์ œ๊ณต

- Maven ๋ฐ Gradle๊ณผ ๊ฐ™์€ ๋นŒ๋“œ ๋„๊ตฌ์™€์˜ ํ†ตํ•ฉ ์ง€์›
- ์ œ๊ณต๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ๋ช…๋ ฌ ์ค„๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰
- ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ง€์›

 

๐Ÿ”Ž  Flyway, Liquibase ์ฐจ์ด์ 

 

(1) ๋ณ€๊ฒฝ ์ •์˜

 

Flyway๋Š” SQL์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ •์˜ํ•œ๋‹ค. ๋ฐ˜๋ฉด์— Liquibase๋Š” XML, YAML ๋ฐ JSON๊ณผ ๊ฐ™์€ SQL์„ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

 

Liquibase๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ์–ธ์–ด๋กœ ์ž‘์—…ํ•˜๊ณ  ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ ํ˜•์— ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

(2) Java API ์ œ๊ณต

 

Flyway๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Java API๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. BLOB, CLOB ๋ณ€๊ฒฝ ๋˜๋Š” ๊ณ ๊ธ‰ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง€์›ํ•œ๋‹ค.

 

(3) ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ฐจ์ด(diff) ์ƒ์„ฑ

 

diff๋ž€, ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋ณ€๊ฒฝ๋œ ๊ฒƒ๋งŒ ํŒŒ์•…ํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค.

 

Flyway๋Š” ์œ ๋ฃŒ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.

Liquibase์—์„œ๋Š” diff๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

(4) Rollback

 

Flyway๋Š” ์œ ๋ฃŒ ๋ฒ„์ „์—์„œ๋งŒ ๋กค๋ฐฑ์„ ์ง€์›ํ•œ๋‹ค.

Liquibase๋Š” ๋ฌด๋ฃŒ ๋ฒ„์ „์—์„œ๋„ ๋กค๋ฐฑ์„ ์ง€์›ํ•˜๋ฉฐ, ์œ ๋ฃŒ ๋ฒ„์ „์—์„œ๋Š” ์ข€ ๋” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค.

 

(5) ๋ณ€๊ฒฝ ์ˆœ์„œ ๊ด€๋ฆฌ

 

Flyway๋Š” ์„ ํ˜•์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. ์ฆ‰, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์ˆœ์„œ๊ฐ€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋ช…๋ช…๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

 

Liquibase๋Š” ์ „์ฒด ๋ณ€๊ฒฝ ๋กœ๊ทธ ํŒŒ์ผ์˜ ํŠน์ • ๋ณ€๊ฒฝ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. ๋ณ€๊ฒฝ ๋กœ๊ทธ ๋‚ด์—์„œ ์–ด๋–ค ์ˆœ์„œ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋„ฃ์œผ๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์ˆœ์„œ๋กœ ์ ์šฉ๋œ๋‹ค.

 

(6) ์Šค๋ƒ…์ƒท

 

Flyway๋Š” ์Šค๋ƒ…์ƒท ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

Liquibase๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ˜„์žฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์Šค๋ƒ…์ƒท์„ ์ฐ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•ด ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์žฅ์•  ์กฐ์น˜ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต์ œ์™€ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์šฉํ•˜๋‹ค.

 

REFERENCE

https://www.liquibase.com/liquibase-vs-flyway

 

Liquibase vs. Flyway

Understand the differences and similarities of two database migration tools, Liquibase and Flyway, so you can decide which one will work best for you.

www.liquibase.com

https://dzone.com/articles/flyway-vs-liquibase

 

Database Migration tools: Flyway vs Liquibase - DZone

Learning and choosing a migration tool for yor project? Deepening your knowledge about Flyway and Liquibase will give you new insight for efficient workflow.

dzone.com

https://blog.knoldus.com/flyway-vs-liquibase/

 

Flyway vs Liquibase

Introduction There are two open source-based tools for database version control Liquibase and Flyway. These are popular options for organizing database chang

blog.knoldus.com

https://www.baeldung.com/liquibase-vs-flyway

 

๋Œ“๊ธ€