Skip to main content
Migration์„ ๋กค๋ฐฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กค๋ฐฑ ์ˆ˜๋‹จ

Sonamu UI

Migrations ํƒญ์˜ ๋กค๋ฐฑ ๋ฒ„ํŠผ ์ตœ๊ทผ batch ๋กค๋ฐฑ

runAction()

Migrator API ์ง์ ‘ ํ˜ธ์ถœ ์Šคํฌ๋ฆฝํŠธ/์ž๋™ํ™”์šฉ

migrate status

๋กค๋ฐฑ ์ „ ์ƒํƒœ ํ™•์ธ batch ํ™•์ธ

down ํ•จ์ˆ˜

Migration ํŒŒ์ผ์˜ ์—ญ์ž‘์—… ๋กค๋ฐฑ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ •
๋กค๋ฐฑ ์ „์šฉ CLI ๋ช…๋ น์€ ์—†์Šต๋‹ˆ๋‹ค. sonamu migrate๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„œ๋ธŒ์ปค๋งจ๋“œ๋Š” run, apply, generate, status ๋„ค ๊ฐ€์ง€๋ฟ์ž…๋‹ˆ๋‹ค. ๋กค๋ฐฑ์€ Sonamu UI ๋˜๋Š” Migrator.runAction("rollback", ...) ์œผ๋กœ๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋กค๋ฐฑ

Sonamu UI์—์„œ ๋กค๋ฐฑ

  1. API ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(pnpm dev).
  2. http://localhost:34900/sonamu-ui์˜ Migrations ํƒญ์„ ์—ฝ๋‹ˆ๋‹ค.
  3. ๋กค๋ฐฑํ•  DB ์ปค๋„ฅ์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋กค๋ฐฑ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ํ™•์ธ ๋ชจ๋‹ฌ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋กค๋ฐฑ์€ ์„ ํƒํ•œ DB์˜ ๊ฐ€์žฅ ์ตœ๊ทผ batch์— ์†ํ•œ ๋ชจ๋“  Migration์„ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ์—์„œ ๋กค๋ฐฑ

CI๋‚˜ ์šด์˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” Migrator๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
src/scripts/rollback-migration.ts

ํ˜„์žฌ ์ƒํƒœ ํ™•์ธ

์ถœ๋ ฅ:

๋กค๋ฐฑ ๋ฐฉ์‹

Batch ๋‹จ์œ„ ๋กค๋ฐฑ

๋กค๋ฐฑ์˜ ๋‹จ์œ„๋Š” batch์ž…๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์˜ ๋กค๋ฐฑ์€ ๊ฐ€์žฅ ์ตœ๊ทผ batch์— ์†ํ•œ Migration์„ ๋ชจ๋‘ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ batch ๋˜๋Œ๋ฆฌ๊ธฐ

Migration ํ•˜๋‚˜๋งŒ ๊ณจ๋ผ์„œ ๋˜๋Œ๋ฆฌ๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ batch๋ฅผ ํ•œ ๋ฒˆ์— ๋˜๋Œ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์€ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ๊ณผ๊ฑฐ๋กœ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด ๋กค๋ฐฑ์„ batch ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๊ณ , ๊ฐ ํšŒ์ฐจ ์‚ฌ์ด์— pnpm sonamu migrate status๋กœ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
๋กค๋ฐฑ์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ฒฐ๊ตญ ์ดˆ๊ธฐ ์Šคํ‚ค๋งˆ(๋ชจ๋“  ํ…Œ์ด๋ธ” ์‚ญ์ œ)๊นŒ์ง€ ๋˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ๋Š” ๊ฐ ํšŒ์ฐจ๋งˆ๋‹ค ์˜ํ–ฅ ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

down ํ•จ์ˆ˜

๊ธฐ๋ณธ ๊ตฌ์กฐ

CREATE TABLE ๋กค๋ฐฑ

ALTER TABLE ๋กค๋ฐฑ

FOREIGN KEY ๋กค๋ฐฑ

๋กค๋ฐฑ ์‹œ๋‚˜๋ฆฌ์˜ค

์‹œ๋‚˜๋ฆฌ์˜ค 1: ์ž˜๋ชป๋œ Migration ์ˆ˜์ •

์‹œ๋‚˜๋ฆฌ์˜ค 2: ํ”„๋กœ๋•์…˜ ๊ธด๊ธ‰ ๋กค๋ฐฑ

ํ”„๋กœ๋•์…˜ DB๋Š” Sonamu UI๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ, ๋กค๋ฐฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
NODE_ENV๊ฐ€ local์ด ์•„๋‹ˆ๋ฉด ํ•ด๋‹น ํ™˜๊ฒฝ๊ณผ ์ด๋ฆ„์ด ๊ฐ™์€ DB ์ปค๋„ฅ์…˜๋งŒ ์ž‘์—… ๋Œ€์ƒ์œผ๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋Œ€์ƒ์„ ๋„˜๊ธฐ๋ฉด ์—๋Ÿฌ๋กœ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค 3: ๋ถ€๋ถ„ ๋กค๋ฐฑ

๋ฐ์ดํ„ฐ ๋ณด์กด

๋กค๋ฐฑ ์‹œ ๋ฐ์ดํ„ฐ ์†์‹ค

๋ฐ์ดํ„ฐ ์†์‹ค ์ฃผ์˜!์ปฌ๋Ÿผ/ํ…Œ์ด๋ธ” ์‚ญ์ œ ์‹œ ๋ฐ์ดํ„ฐ๋Š” ๋ณต๊ตฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ๋Š” ๋ฐฑ์—… ํ•„์ˆ˜!

์•ˆ์ „ํ•œ ๋กค๋ฐฑ ํŒจํ„ด

๋กค๋ฐฑ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

๋ฐ์ดํ„ฐ ๋ณ€ํ™˜

๋ฐ์ดํ„ฐ ์‚ญ์ œ

๋กค๋ฐฑ ์ „๋žต

1. ๋ฐฑ์—… ์šฐ์„ 

2. ์Šคํ…Œ์ด์ง• ํ…Œ์ŠคํŠธ

3. ์ ์ง„์  ๋กค๋ฐฑ

์—๋Ÿฌ ์ฒ˜๋ฆฌ

๋กค๋ฐฑ ์‹คํŒจ

๋กค๋ฐฑ ์ค‘ down ํ•จ์ˆ˜๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—๋Ÿฌ:
์›์ธ:
  • Migration์ด ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์ ์šฉ๋จ
  • down ํ•จ์ˆ˜๊ฐ€ up๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Œ
  • ์ˆ˜๋™์œผ๋กœ DB ๋ณ€๊ฒฝํ•จ
ํ•ด๊ฒฐ:
  1. DB ์ƒํƒœ ์ˆ˜๋™ ํ™•์ธ
  2. knex_migrations ํ…Œ์ด๋ธ” ์ˆ˜์ •
  3. down ํ•จ์ˆ˜ ์ˆ˜์ • ํ›„ ์žฌ์‹œ๋„

๊ฐ•์ œ ๋กค๋ฐฑ

๋กค๋ฐฑ ๋กœ๊ทธ

์‹คํ–‰ ๊ฒฐ๊ณผ ํ™•์ธ

runAction("rollback", ...)์€ ๋Œ€์ƒ ์ปค๋„ฅ์…˜๋ณ„๋กœ batch ๋ฒˆํ˜ธ์™€ ๋กค๋ฐฑ๋œ ํŒŒ์ผ ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Sonamu UI์—์„œ ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ ๊ฐ™์€ ๋‚ด์šฉ์ด ๊ฒฐ๊ณผ ๋ชจ๋‹ฌ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋กค๋ฐฑ ๊ธฐ๋ก ์กฐํšŒ

์‹ค์ „ ํŒ

1. down ํ•จ์ˆ˜ ๊ฒ€์ฆ

2. ๋กค๋ฐฑ ๊ณ„ํš ๋ฌธ์„œํ™”

3. ์ž๋™ ๋กค๋ฐฑ ์Šคํฌ๋ฆฝํŠธ

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

์ „๋žต

์•ˆ์ „ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํ–‰

migrate run์œผ๋กœ ์ ์šฉ

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑ

Sonamu UI์—์„œ ์ƒ์„ฑ

๋™์ž‘ ์›๋ฆฌ

์ž๋™ ์ƒ์„ฑ ์ดํ•ดํ•˜๊ธฐ