Skip to main content
Migration ํƒญ์€ Entity์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๊ณ , ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉํ•˜๋Š” ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.

๋น„๊ตยท์ƒ์„ฑ

๊ธฐ์ค€ DB์—๋Š” ๋ชจ๋“  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ ์šฉ๋œ ์—ฐ๊ฒฐ๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. Sonamu๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‹ค์ œ ์Šคํ‚ค๋งˆ๋ฅผ Entity ์ •์˜์™€ ๋น„๊ตํ•ด ์ƒ์„ฑํ•  ๋ณ€๊ฒฝ์‚ฌํ•ญ๊ณผ ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  1. ๊ธฐ์ค€ DB๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•„์š”ํ•˜๋ฉด ๋ชจ๋‘ ํŽผ์น˜๊ธฐ๋กœ ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑ์„ ๋ˆŒ๋Ÿฌ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
ํŒŒ์ผ ์ƒ์„ฑ ํ›„์—๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ Pending ์ƒํƒœ๊ฐ€ ๋‹ค์‹œ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒํƒœ

ํ–‰์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ, ์—ด์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ž…๋‹ˆ๋‹ค. ๊ฐ ์…€์€ APPLIED ๋˜๋Š” PENDING์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์€ ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ์กฐํšŒ๋˜๋ฏ€๋กœ ๋А๋ฆฌ๊ฑฐ๋‚˜ ์‹คํŒจํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋‹ค๋ฅธ ์—ด์˜ ํ‘œ์‹œ๋ฅผ ๋ง‰์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์—ด ๋จธ๋ฆฌ๊ธ€์ด๋‚˜ ์…€์„ ๋ˆŒ๋Ÿฌ ์‹คํ–‰ ๋Œ€์ƒ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ž์„ธํžˆ๋ฅผ ์ผœ๋ฉด host, database, remote ์—ฌ๋ถ€์™€ ์—ด ์ƒˆ๋กœ๊ณ ์นจ ๋ฒ„ํŠผ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ์˜ค๋ฅ˜์˜ ์˜ค๋ฅ˜ ๋ฐฐ์ง€๋ฅผ ๋ˆ„๋ฅด๋ฉด ์„œ๋ฒ„๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ์›์ธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹ ์œผ๋กœ ์ ์šฉ

์ตœ์‹ ์œผ๋กœ ์ ์šฉ์€ ์„ ํƒํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด knex.migrate.latest()๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ ์šฉ๋˜๋Š” ํŒŒ์ผ์€ ํ•˜๋‚˜์˜ Knex batch๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ฐฝ์€ ๋‹ค์Œ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
  1. ๊ฒ€ํ† : ๋Œ€์ƒ๊ณผ Pending ํŒŒ์ผ์„ ํ™•์ธํ•˜๊ณ  Shadow ๊ฒ€์ฆ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šน์ธ: ์„ค์ •๋œ ์›๊ฒฉ ๋Œ€์ƒ์ด ์žˆ์œผ๋ฉด Slack ์Šน์ธ์„ ์š”์ฒญํ•˜๊ณ  2์ดˆ๋งˆ๋‹ค ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ์ ์šฉ: ํŒŒ์ผ๋ณ„ ์‹คํ–‰ ์ง„ํ–‰๋ฅ ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„ ์™„๋ฃŒ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
Shadow๋ฅผ ์ผœ๋ฉด ์ ์„  Shadow ๊ฒ€์ฆ ์นด๋“œ๊ฐ€ ๋Œ€์ƒ ๋ชฉ๋ก ๋งจ ์œ„์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ ์šฉ์„ ์‹œ์ž‘ํ•˜๋ฉด ๊ฐ™์€ ์นด๋“œ๊ฐ€ ์‹ค์ œ ๊ฒ€์ฆ ์ง„ํ–‰๋ฅ ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉฐ, Shadow ๊ฒ€์ฆ์ด ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‹ค์ œ ๋Œ€์ƒ ์ ์šฉ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ๋ณ„ ์‹คํ–‰๋จ ํ‘œ์‹œ๋Š” ํ•ด๋‹น migration ํ•จ์ˆ˜๊ฐ€ ๋๋‚ฌ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ „์ฒด batch๊ฐ€ ํ™•์ •๋œ ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์นด๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ๋’ค์ž…๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ € ์—ฐ๊ฒฐ์ด ๋Š๊ฒจ๋„ ์„œ๋ฒ„์—์„œ ์‹œ์ž‘ํ•œ migration์€ ๊ณ„์†๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์ง€ ๋ง๊ณ  ์ƒํƒœ๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•ด ์‹ค์ œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋กค๋ฐฑ

Rollback์€ ํŒŒ์ผ ํ–‰ ์„ ํƒ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ, ์„ ํƒํ•œ ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐ€์žฅ ์ตœ๊ทผ Knex batch ์ „์ฒด๋ฅผ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค. down()์€ Knex๊ฐ€ ์ œ๊ณตํ•œ ์—ญ์ˆœ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํŒŒ๊ดด์ ์ธ ๋™์ž‘์ด๋ฏ€๋กœ ๋กค๋ฐฑ ๋ฒ„ํŠผ์„ ์ฒ˜์Œ ๋ˆ„๋ฅด๋ฉด ํ™•์ธ ๋ฌธ๊ตฌ๋กœ ๋ฐ”๋€Œ๊ณ , ํ•œ ๋ฒˆ ๋” ๋ˆŒ๋Ÿฌ์•ผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋„์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ์—์„œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋กค๋ฐฑ ํŠธ๋žœ์žญ์…˜๋„ ์ทจ์†Œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™”๊ฐ€ ์—†์–ด ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กค๋ฐฑ์€ ์ตœ์‹  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ, ์ด๋ ‡๊ฒŒ ์ค‘๊ฐ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋กค๋ฐฑ์œผ๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋กค๋ฐฑ์€ ์ปฌ๋Ÿผ์ด๋‚˜ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์‹คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Production์—์„œ๋Š” ๋ฐฑ์—…๊ณผ down() ๊ตฌํ˜„์„ ๋จผ์ € ํ™•์ธํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„

Scaffolding ํƒญ

Model ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ

migrate CLI

CLI๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ด€๋ฆฌ