๐ง ์ํฉ
sequelize-cli ์, aws rds๋ฅผ ์ด์ฉํด ๊ฐ์ธ๊ณผ์ ๋ฅผ ์งํํ๋ ์ค,
์ด๋ฏธ ๋ง๋ ํ ์ด๋ธ์ ์์ ํ๊ณ ์ถ์๋ค.
birth_year, birth_day, birth_month, ์ด ์ธ๊ฐ์ง์ ์ปฌ๋ผ์ ์ญ์ ํ๊ณ ,
birth_date ๋ผ๋ ์ปฌ๋ผ์ ์ถ๊ฐํ๋ฉฐ, ํ์ ๋ date๋ก ๋ฐ๊พธ๊ณ ์ถ์๋ค.
๐ ์ก์
Sequelize ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด๋, ์๋์ ๋ช ๋ น์ด๋ฅผ ํตํด ์์ ํ์ผ์ ๋ง๋ค ์ ์๋ค๊ณ ํ๋ค.
npx sequelize-cli migration:generate --name ํ์ผ์ด๋ฆ์ ๊ธฐ-ํ ์ด๋ธ๋ช
์์
npx sequelize-cli migration:generate --name modify-user
๊ทธ๋ผ ์๋์ ๊ฐ์ ํ์ผ์ด ์์ฑ๋๋๋ฐ, up์๋ ์๋ก ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ๋ด์ฉ์ ์์ฑํ๋ฉด ๋๋ค.
down ์์๋ undo๋ฅผ ์ด์ฉํด ๋ง์ด๊ทธ๋ ์ด์ ์ ๋๋๋ฆด๋ ์ํํ ๋ก์ง์ ์์ฑํ๋ฉด ๋๋ค.
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Person', {
name: Sequelize.DataTypes.STRING,
isBetaMember: {
type: Sequelize.DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Person');
}
};
๋ด ๊ฒฝ์ฐ ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ user, product 2๊ฐ์๊ณ ,
product ํ ์ด๋ธ์์ user_id ๋ผ๋ ์ปฌ๋ผ์ด user ํ ์ด๋ธ์์ ๊ฐ์ ธ์จ ์ธ๋ํค์๊ธฐ ๋๋ฌธ์,
user ํ ์ด๋ธ์ด ๋จผ์ ์กด์ฌ ํ ๋ค product ํ ์ด๋ธ์ด ์์ด์ผ๋ง ํ๋ค.
ํ ์ด๋ธ์ ๋ค์ ํ๋ ค๋ฉด undo ๋ช ๋ น์ด๋ฅผ ํตํด ๋๋ฆฐ ๋ค์ ๋ค์ ๋ง์ ธ์ผ ํ๋ค๋ ๊ธ์ ๋ด์
๋๊ฐ์ ํ ์ด๋ธ์ undo ํ ๊ฑฐ๋ฉด, ๊ทธ๋ฅ drop ํด์ผํ๋ ๊ณ ๋ฏผํ์ง๋ง,
์ผ๋จ์ modify ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์์ ์ปฌ๋ผ ์ญ์ ๋ฐ ์ถ๊ฐ๋ฅผ ์งํํด ๋ณด๊ธฐ๋ก ํ๋ค.
๋จผ์ ๊ธฐ์กด ํ ์ด๋ธ์ ๋ด์ฉ๋ฌผ์ ๋ค ์ญ์ ํด ์ฃผ๊ณ ๋น ํ ์ด๋ธ๋ก ๋ง๋ค์ด ์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ์์ฑํ ๋ค,
๋ด ๊ฒฝ์ฐ์๋ up์๋ง ์์ฑํด ์ฃผ์๋ค.
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.removeColumn('User', 'birth_year');
await queryInterface.removeColumn('User', 'birth_month');
await queryInterface.removeColumn('User', 'birth_day');
await queryInterface.addColumn('User', 'birth_date', {
type: Sequelize.DATE
});
},
async down(queryInterface, Sequelize) {
}
};
์ด๋ ๊ฒ ์์ฑํ ํ์, ๋ชจ๋ธ ํ์ผ๋ ๋์ผํ๊ฒ ์์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
์ดํ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด์ ํ ์ด๋ธ์ ๋ค์ ์์ฑํด ์ฃผ๋ฉด ๋๋ค.
npx sequelize db:migrate
์ฌ์ค up์ ์๊ฒ ๋๋ฐ down์ ๊ทธ๋์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๊ฑด์ง ์ดํด๊ฐ ์๊ฐ๋ค.
๋๋๋ฆฌ๋ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ ์ง ๋ชฐ๋ผ์ ๋์ค์ ๋ค์ ์ฐพ์๋ณด๋,
down ํจ์๋ up ํจ์์์ ์ํํ ๋ณ๊ฒฝ ์์ ์ ์ญ์์ผ๋ก ๋๋๋ฆฌ๋ ์ญํ ์ ํ๋ค.
up ํจ์์์ ์ํํ ์์ ์ ์ญ์ผ๋ก ๋๋๋ฆฌ๋ ๊ตฌ๋ฌธ์ down ํจ์์ ๊ตฌํํ์ฌ ์ด์ ์ํ๋ก ๋๋๋ฆด ์ ์๋ค.
๋ฐ๋์ ์ ์ํ ํ์๋ ์์ผ๋ฉฐ,
์ค์ ํ๋ก๋์ ํ๊ฒฝ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ณ๊ฒฝ์ ์คํจํ ๊ฒฝ์ฐ ์ด์ ์ํ๋ก ์ฝ๊ฒ ๋กค๋ฐฑ ํ ์ ์๋ค.
๋ง์ฝ ์ ์ํ์ง ์๋๋ค๋ฉด, ์๋์ผ๋ก ๋๋๋ ค์ผ ํ๋ฉฐ, ์ค์ ํ๋ฅ ์ด ๋์์ง๋ค.
๋น์ฅ์ ํ์ํ์ง ์์ง๋ง,
์ข๋ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ , ์ปจํ๋กค ํ๊ธฐ ์ํด์๋ ์ฌ์ฉํ๋๊ฒ ์ข๊ฒ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ฐธ๊ณ ํ ์ฌ์ดํธ
https://sequelize.org/docs/v6/other-topics/migrations/