๐Ÿ“˜ DataBase

Flyway & DB Migration ์„ ์ ์šฉ์‹œ์ผœ ๋ณด์ž

GroovyArea 2022. 5. 3. 23:28
์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‚˜๋Š” DB ํ…Œ์ด๋ธ”์„ ํ•œ ๋ฒˆ์— ๋‹ค ์ƒ์„ฑํ•˜๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•„์š”ํ•œ ๊ฒƒ์„ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ณ  Front๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— DB data๋ฅผ ์ง์ ‘ mysql์„ ์—ด์–ด ๋„ฃ์–ด์ฃผ๊ณ  ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ฐธ ๋น„ํšจ์œจ์ ์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋˜ ๋„์ค‘ Flyway๋ผ๋Š” Tool์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋งˆ์ฃผํ•˜๋ฉด ํ•ญ์ƒ ๋‚ฏ์„  ๊ธฐ๋ถ„์ด์ง€๋งŒ DDL์„ ์ž๋ฐ”์—์„œ ์ง์ ‘ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํˆด์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ๋‚˜์ฒ˜๋Ÿผ ์Šคํ‚ค๋งˆ์˜ ์žฆ์€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚  ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ด๋ณด๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด๋ณด๊ณ  ์‚ฌ์šฉํ•ด ๋ณผ ์ƒ๊ฐ์ด๋‹ค.

 

ํ˜น์‹œ๋‚˜ ํ•ด์„œ

Schema ๊ฐ€ ๋ญ์•ผ?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์™€ ์ œ์•ฝ์กฐ๊ฑด์— ๊ด€ํ•ด ์ „๋ฐ˜์ ์ธ ๋ช…์„ธ๋ฅผ ๊ธฐ์ˆ ํ•œ ๊ฒƒ!

1. ๊ฐœ๋… ์Šคํ‚ค๋งˆ - ์ „์ฒด์ ์ธ ๋ทฐ

2. ๋‚ด๋ถ€ ์Šคํ‚ค๋งˆ - ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ์žฅ์น˜์—์„œ DB๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ธฐ์ˆ ํ•œ ๊ฒƒ

3. ์™ธ๋ถ€ ์Šคํ‚ค๋งˆ - ์„œ๋ธŒ ์Šคํ‚ค๋งˆ, ์‚ฌ์šฉ์ž ๋ทฐ

 

=> ์‰ฝ๊ฒŒ ๋งํ•ด์„œ DB๋‚ด์— ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์—ˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ์กฐ๋ฅผ ์ผ์ปซ๋Š”๋‹ค.

์ฐธ์กฐ : https://itkjspo56.tistory.com/94

 

[SQL] ์Šคํ‚ค๋งˆ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์Šคํ‚ค๋งˆ(Schema)๋ž€ ๋ฌด์—‡์ธ๊ฐ€? Database๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด ์‰ฝ๊ฒŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋Š” ์šฉ์–ด ์Šคํ‚ค๋งˆ. ์Šคํ‚ค๋งˆ์˜ ์ข…๋ฅ˜์—๋Š” ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด์ž ๋จผ์ € ์Šคํ‚ค๋งˆ๋ž€? : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์™€ ์ œ์•ฝ์กฐ๊ฑด์— ๊ด€

itkjspo56.tistory.com

Migration ์ด ๋ฌด์—‡์ธ๊ฐ€?

ํ•œ ์šด์˜ ํ™˜๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์šด์˜ ํ™˜๊ฒฝ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์ž‘์—… (๋ง ๊ทธ๋Œ€๋กœ ์ด์ฃผํ•˜๋‹ค ๋ผ๋Š” ๋œป์ธ ๋“ฏ)

 

๊ทธ๋Ÿผ DB Migration ์€?

DB์—์„œ DB Migration์ด๋ž€ DB ์Šคํ‚ค๋งˆ์˜ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• (๋ฐ์ดํ„ฐ์˜ ์ „ํ™˜)

์‹ค๋ฌด์—์„œ๋Š” ์Šคํ‚ค๋งˆ์˜ ๋ณ€๊ฒฝ์ด ์ •๋ง ์žฆ๋‹ค๊ณ  ํ•œ๋‹ค. 

ex) ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ณ€๊ฒฝ, ์‹œ์Šคํ…œ ์ด์ „ ์ž‘์—… ๋“ฑ๋“ฑ๋“ฑ.. => ์ƒ๊ฐ๋งŒ ํ•ด๋„ ๋”์ฐํ•˜๋‹ค.

 

ํ•˜์—ฌ DB Migration์ด๋ž€ ๊ฐœ๋ณ„ SQL ํŒŒ์ผ์„ Mysql ๊ฐ™์€ DMBS ์ฝ˜์†”์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŠน์ • ๋ช…๋ น์„ ํ†ตํ•ด ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์— ๋ฒ„์ „ ๊ด€๋ฆฌ(ํ˜•์ƒ ๊ด€๋ฆฌ)๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค!

 

Flyway๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

์•„์ง ๋‚˜๋Š” ์œ ์ง€๋ณด์ˆ˜๊นŒ์ง€ ๊ฒฝํ—˜ํ•ด๋ณธ ์ ์ด ์—†๋Š” ์ž๋ฐ”๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ํ•™์ƒ์ด๋‹ค. ๊ทผ๋ฐ ์™œ ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ ํ• ๊นŒ? 

์•ž์„œ ๋งํ–ˆ๋“ฏ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ์Šคํ‚ค๋งˆ๋ฅผ migration ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” mysql ์ฝ˜์†”์—์„œ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ์ฐธ ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์ด๋‹ค. ์™„๋ฒฝํ•œ ์‚ฌ๋žŒ์ด ์•„๋‹Œ ์ด์ƒ ํ˜ผ์ž ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์Šคํ‚ค๋งˆ์˜ ๋ณ€๊ฒฝ์ด ์ •๋ง ์žฆ์„ ์ˆ˜๋ฐ–์— ์—†์„ ๊ฒƒ์ด๋‹ค. 

์ด๋ฅผ ์ฐพ์•„ ๋งค๋ฒˆ ์ผ์ผ์ด ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ˆ˜ํ•˜๊ธฐ์—๋„ ๋”ฑ ์ข‹๋‹ค.

 

์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ DB ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋ฉด ์ข‹์ง€ ์•Š์„๊นŒ?

=> ๊ทธ๋ž˜์„œ ๋‚˜์˜จ ํˆด์ด Flyway

 

ํŠน์ง• 

- ์ง์ ‘ DB์— ์ ‘์†ํ•ด์„œ sql์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. 

- SQL์„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜๋“ฏ ํŒŒ์ผ๋กœ์„œ IDE์—์„œ ์ง์ ‘ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ ์šฉ ๊ณผ์ •

์˜์กด์„ฑ ์ถ”๊ฐ€
ํ”„๋กœํผํ‹ฐ ์„ค์ •
๊ฒฝ๋กœ ๋ฐ ์‹คํ–‰ SQL ์„ค์ •
Version1 DDL ํŒŒ์ผ

=> ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„๋ฅผ ์‹คํ–‰!

 

์„œ๋ฒ„ ์‹คํ–‰ ์‹œ SQL ํŒŒ์ผ์„ (๋ณ€๊ฒฝ ์‚ฌํ•ญ)์„ ์ฝ์–ด SQL์„ ์‹คํ–‰ํ•œ๋‹ค.

์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ๊ธฐ๋ก ์ •๋ณด
ํ…Œ์ด๋ธ”๋„ ์ž˜ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
Version2 ์นผ๋Ÿผ ์ถ”๊ฐ€
๋‹น์—ฐํžˆ ๋ฒ„์ „์€ ์ˆซ์ž๊ฐ€ ์˜ฌ๋ผ๊ฐ€์•ผํ•จ

๋‹ค์‹œ ์„œ๋ฒ„ ์‹คํ–‰!

๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ ์šฉ์ด ์ž˜ ๋˜์—ˆ๋‹ค.
์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ๊ธฐ๋ก ์ž˜ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

 

Flyway๋Š” ๋งŒ๋Šฅ์ธ ๊ฑธ๊นŒ?

DBMS ์„œ๋ฒ„๋ฅผ ์™”๋‹ค ๊ฐ”๋‹ค ์•ˆ ํ•ด๋„ ์ˆœ์ˆ˜ํžˆ ์ฟผ๋ฆฌ ํŒŒ์ผ๋กœ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ํ˜‘์—…์—์„œ๋Š” ๋˜ ๋‹ค๋ฅธ ์–˜๊ธฐ๊ฐ€ ๋œ๋‹ค.

  1. ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๋Š” ๋ฌธ์ œ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์ฆํ•ด์•ผ ํ•จ
  2. ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๋ฅผ ์–ผ๋งˆ๋“ ์ง€ ๋‚จ๋“ค์ด ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  3. ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ DB ๋ณ€๊ฒฝ์— ์˜ํ–ฅ์„ ์ฃผ์—ˆ๋Š”์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  4. ์•ฑ์€ ์ด์ „ ๋ฒ„์ „๊ณผ ์‹ ๊ทœ ๋ฒ„์ „์ด ๊ณต์กดํ•  ์ˆ˜ ์žˆ๋‹ค.

=> ๊ฒฐ๊ตญ ๊ทœ์น™์ด ์ œ์ผ ์ค‘์š”

 

ํŠนํžˆ, Production Level ์ฆ‰ ๋ฐฐํฌ ๋‹จ๊ณ„์—์„œ๋Š” ๊ทธ๋ฆฌ ์ข‹์€ ์„ ํƒ์€ ์•„๋‹ˆ๋‹ค.

์–ด๋–ค DDL์€ dB ๊ฑด์ˆ˜์™€ DB์— ๋”ฐ๋ผ ์ˆ˜์‹ญ ์‹œ๊ฐ„ ์ •๋„ ๊ฑธ๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฑด์ˆ˜๊ฐ€ ์ ์€ ๊ฒฝ์šฐ๋Š” ์„œ๋น„์Šค ์˜ํ–ฅ์ด ๋ฏธ๋ฏธํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ๋‹จ์œ„๊ฐ€ ์ปค์ง€๋ฉด ๋‹จ์ˆœํ•œ ์นผ๋Ÿผ ์ถ”๊ฐ€๋„ ์ˆ˜์‹ญ ๋ถ„ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

 

-> ์ด๋Š” ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ ๋œ๋‹ค. 

 

๋Œ€์•ˆ : ํ”„๋กœ๋•์…˜์—์„œ๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ธฐ๋Šฅ์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. (๋ณ„๋„์˜ ์œ„ํ‚ค ํŽ˜์ด์ง€๋กœ ๋ฐ˜์˜ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๊ณ  ๊ด€๋ฆฌ)

 

์ฐธ์กฐ : https://medium.com/@slothink/flyway-%EB%A1%9C-%EA%B0%99%EC%9D%B4-%EC%9D%BC-%ED%95%98%EA%B8%B 0-30a33f123b4e

 

Flyway ๋กœ ๊ฐ™์ด ์ผ ํ•˜๊ธฐ

Flyway ๊ธฐ๋Šฅ์€ ํ’๋ถ€ํ•˜๊ณ , ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค.

medium.com

์ฐธ์กฐ : https://sabarada.tistory.com/193

 

[flyway] flyway๋ฅผ ํ†ตํ•ด DDL ํ˜•์ƒ๊ด€๋ฆฌ๋ฅผ ํ•˜์ž - Spring Boot (Java API) ํŽธ

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

sabarada.tistory.com

 

๋ฐ˜์‘ํ˜•