๐ง ์ํฉ
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
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/017.gif)
์ฌ์ค up์ ์๊ฒ ๋๋ฐ down์ ๊ทธ๋์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๊ฑด์ง ์ดํด๊ฐ ์๊ฐ๋ค.
๋๋๋ฆฌ๋ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ ์ง ๋ชฐ๋ผ์ ๋์ค์ ๋ค์ ์ฐพ์๋ณด๋,
down ํจ์๋ up ํจ์์์ ์ํํ ๋ณ๊ฒฝ ์์ ์ ์ญ์์ผ๋ก ๋๋๋ฆฌ๋ ์ญํ ์ ํ๋ค.
up ํจ์์์ ์ํํ ์์ ์ ์ญ์ผ๋ก ๋๋๋ฆฌ๋ ๊ตฌ๋ฌธ์ down ํจ์์ ๊ตฌํํ์ฌ ์ด์ ์ํ๋ก ๋๋๋ฆด ์ ์๋ค.
๋ฐ๋์ ์ ์ํ ํ์๋ ์์ผ๋ฉฐ,
์ค์ ํ๋ก๋์ ํ๊ฒฝ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ณ๊ฒฝ์ ์คํจํ ๊ฒฝ์ฐ ์ด์ ์ํ๋ก ์ฝ๊ฒ ๋กค๋ฐฑ ํ ์ ์๋ค.
๋ง์ฝ ์ ์ํ์ง ์๋๋ค๋ฉด, ์๋์ผ๋ก ๋๋๋ ค์ผ ํ๋ฉฐ, ์ค์ ํ๋ฅ ์ด ๋์์ง๋ค.
๋น์ฅ์ ํ์ํ์ง ์์ง๋ง,
์ข๋ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ , ์ปจํ๋กค ํ๊ธฐ ์ํด์๋ ์ฌ์ฉํ๋๊ฒ ์ข๊ฒ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ฐธ๊ณ ํ ์ฌ์ดํธ
https://sequelize.org/docs/v6/other-topics/migrations/
Migrations | Sequelize
Just like you use version control systems such as Git to manage changes in your source code, you can use migrations to keep track of changes to the database. With migrations you can transfer your existing database into another state and vice versa: Those s
sequelize.org