๐ 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
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Boot 3 + JPA๋ฅผ ํ์ฉํ Liquibase ์ค์ตํ๊ธฐ (2) (0) | 2023.05.20 |
---|---|
Spring Boot 3 + JPA๋ฅผ ํ์ฉํ Liquibase ์ค์ตํ๊ธฐ (1) (0) | 2023.05.14 |
ObjectMapper ์ฌ์ฉํ ๋ Validator ํ์ฉํ๊ธฐ (0) | 2023.05.01 |
[Spring] Redis ์ธ์ ๋ก๊ทธ์์, ๋ง๋ฃ์ ๊ด๋ จ ์ฒ๋ฆฌ ์์ ํ๊ธฐ (0) | 2023.04.16 |
Spring Redis Session ์ค์ , ํน์ง, ๋ฐ์ดํฐ ์กฐํ (0) | 2023.04.08 |
๋๊ธ