sequelize : How to use migration๐Ÿค”

์‹œ์œ ์•ผยท2023๋…„ 7์›” 25์ผ

1.Migration

๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ ํ˜•์‹, ์ปฌ๋Ÿผ ์ถ”๊ฐ€, ์ œ๊ฑฐ, ํ…Œ์ด๋ธ” ์ถ”๊ฐ€, ํ…Œ์ด๋ธ” ์ œ๊ฑฐ์™€ ๊ฐ™์€ ์šด์˜์ค‘์ธ ์„œ๋ฒ„ ์—์„œ DB ๋ณ€๊ฒฝ ์ž‘์—… ์‹œ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋„์™€์ค€๋‹ค.

2.์ด์šฉ ๋ฐฉ๋ฒ• :

model ๋จผ์ € ์ˆ˜์ • ํ•˜๊ณ  ์ง„ํ–‰ํ•œ๋‹ค.

ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ์ˆ˜์ • ํ•˜๋ฉด์„œ ์“ฐ์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ์ด ์ƒ๊ธธ ๋•Œ ๋งˆ๋‹ค Migration์„ ์ƒ์„ฑํ•˜์—ฌ ์ด์šฉํ•œ๋‹ค.

์ƒ์„ฑ

๋ช…๋ น์–ด ์ž…๋ ฅ์„ ํ•ด์„œ migrationํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด

sequelize migration:create --name ์ƒ์„ฑํ•˜๋Š” migration ์ด๋ฆ„

ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ์ ์šฉ๋œ .js ํŒŒ์ผ์ด ์ƒ์„ฑ์ด ๋œ๋‹ค.

ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด

module.exports = {
  up: async (queryInterface, Sequelize) => {

  },

  down: async (queryInterface, Sequelize) => {

  }
}

์ด ์žˆ๊ณ  up = ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ down = ๋กค๋ฐฑ ์˜ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค.

  • ํ…Œ์ด๋ธ” ์ƒ์„ฑ, ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ๊ฐ™์€ ๋””๋น„ ์†์„ฑ์ด ๋ณ€๊ฒฝ ๋˜๋Š” ๊ธฐ๋Šฅ์€ up์— ์ž‘์„ฑ ํ•˜๊ณ 

  • ์ปฌ๋Ÿผ ์‚ญ์ œ, ์ „ ์†์„ฑ์œผ๋กœ ๋กค๋ฐฑ ํ•˜๋Š” ๊ธฐ๋Šฅ์€ down์— ์ž‘์„ฑ์„ ํ•œ๋‹ค.

migrate ์ ์šฉ

๋ณ€๊ฒฝ ์ ์šฉ

sequelize db:migrate

๋ณ€๊ฒฝ ํ•œ migration๋ฅผ ๋””๋น„์— ์ ์šฉ ์‹œํ‚จ๋‹ค.

--env ์†์„ฑ

์†์„ฑ์„ ์ฃผ์–ด์„œ ๊ฐœ๋ฐœDB, ํ”„๋กœ๋•์…˜DB, ํ…Œ์ŠคํŠธDB ๋”ฐ๋กœ ๋”ฐ๋กœ migration์„ ์ ์šฉ ์‹œ์ผœ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

default๋กœ๋Š” development ๋กœ ์„ค์ • ๋˜์–ด ์žˆ๋‹ค.

ex)

sequelize db:migrate --env development
sequelize db:migrate --env test
sequelize db:migrate --env production

๋กค๋ฐฑ

--env ์†์„ฑ ์ ์šฉ ๊ฐ€๋Šฅ

sequelize db:migrate:undo

์ „์ฒด ๋กค๋ฐฑ

--env ์†์„ฑ ์ ์šฉ ๊ฐ€๋Šฅ

๋ชจ๋“  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋˜๋Œ๋ฆฐ๋‹ค.

sequelize db:migrate:undo:all

์ผ€์ด์Šค๋ณ„ ์‚ฌ์šฉ๋ฒ•

1. ํ…Œ์ด๋ธ”์„ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋•Œ

createTable() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ

// await queryInterface.createTable(ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช…:๋ฐ์ดํ„ฐ(์†์„ฑ,์˜ต์…˜) ...)
await queryInterface.createTable('goodsLogs', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      userIndex: {
        type: Sequelize.STRING,
        allowNull: false
      }
    })
 

2. ํ…Œ์ด๋ธ”์„ drop ์‹œํ‚ฌ ๋•Œ

dropTable() ํ•จ์ˆ˜ ์‚ฌ์šฉ

//ํ…Œ์ด๋ธ” ๋ช…
await queryInterface.dropTable('goodsLogs')

3. ํ…Œ์ด๋ธ”์— ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ ํ•  ๋•Œ

addColumn() ํ•จ์ˆ˜ ์‚ฌ์šฉ


//await queryInterface.addColumn(ํ…Œ์ด๋ธ”๋ช…, ์ถ”๊ฐ€ํ•˜๋Š” ์ปฌ๋Ÿผ๋ช…, {
//      type: ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ ์†์„ฑ
//    })
await queryInterface.addColumn('goodsLogs', 'test2', {
      type: Sequelize.INTEGER
    })
 

4. ํ…Œ์ด๋ธ”์— ์ปฌ๋Ÿผ์„ ์ œ๊ฑฐ ํ•  ๋•Œ

removeColumn() ํ•จ์ˆ˜ ์‚ฌ์šฉ

//await queryInterface.removeColumn(ํ…Œ์ด๋ธ”๋ช…, ์ œ๊ฑฐํ•˜๋Š” ์ปฌ๋Ÿผ ๋ช…)
await queryInterface.removeColumn('goodsLogs', 'test2')

5. ์ปฌ๋Ÿผ ๋ช… ๋ณ€๊ฒฝ

renameColumn() ํ•จ์ˆ˜ ์‚ฌ์šฉ


//await queryInterface.renameColumn(ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ ์ด๋ฆ„ ๋ณ€๊ฒฝ ์ „ , ์ปฌ๋Ÿผ ์ด๋ฆ„ ๋ณ€๊ฒฝ ํ›„ )
await queryInterface.renameColumn('goodsLogs', 'test2', 'test1')

6. ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ ์†์„ฑ๊ฐ’ ๋ณ€๊ฒฝ

changeColumn() ํ•จ์ˆ˜ ์‚ฌ์šฉ

// await queryInterface.changeColumn(ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช…, {
//      ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ ์†์„ฑ,
//      ์ปฌ๋Ÿผ ์˜ต์…˜
//  })

await queryInterface.changeColumn('goodsLogs ', 'test2', {
      type: Sequelize.INTEGER,
      allowNull: true
    })

์ถœ์ฒ˜ :
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜Š
https://crispypotato.tistory.com/156

https://jeonghwan-kim.github.io/sequelize-migration/

https://stackoverflow.com/questions/62667269/sequelize-js-how-do-we-change-column-type-in-migration

https://stackoverflow.com/questions/55114922/change-column-name-sequilize

profile
i'm happy enough.

0๊ฐœ์˜ ๋Œ“๊ธ€