강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

원피스를 찾아서님의 프로필 이미지
원피스를 찾아서

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

쿠키/세션과 전체 로그인 흐름.

시퀄라이즈에서 마이그레이션 폴더

작성

·

309

2

npx sequelize init으로 만들어진 폴더 중 마이그레이션 폴더의 
역할 및 마이그레이션뜻이 궁금합니다.

구글링을 해도 막 와 닿지 않네요 ....

어떤식으로 쉽게 이해하면 될까요?

답변 8

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

나중에 테이블 컬럼을 변경하거나 추가/제거할 때 models 안에 파일을 바꾼다고 그대로 반영되지 않습니다. migrations를 통해서 실제 테이블을 변경해주어야 DB에 반영됩니다. migrations 문서를 작성해두면 좋은게 나중에 문제가 생겼을 때 롤백을 할 수 있습니다.

0

thanks zero!

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 한번에 다 하려면 db:migrate:all이었던 것 같고 롤백하려면 db:migrate:undo였던 것 같네요.

0

답변 감사합니다.

마지막 질문으로 마이그레이션을 진행된다는게  db:migrate 로 마이그레이션을 실행하면 되나요??

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

마이그레이션 폴더 안에 저런 파일들을 만드는 거고요. 마이그레이션 폴더에 기록은 남지 않습니다.

마이그레이션 폴더 안에 파일들을 보고 마이그레이션이 진행됩니다. 진행 후에는 직접 models를 수동으로 수정도 해줘야합니다.

0

마이그래이션 폴더로 이전상태로 변경하거나 수정사항을 변경한다고 생각하면 될까요?

찾아보니 마이그레이션을 실행시키면 마이그레이션 폴더에 기록이 남는다고 하는데 잘못 이해하고 있는건가요?

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

const fs = require('fs');
const parse = require('csv-parse/lib/sync');

module.exports = {
up: (queryInterface, Sequelize) => {
/*
Add altering commands here.
Return a promise to correctly handle asynchronicity.

Example:
return queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
queryInterface.addColumn(
'male_lower_input_items',
'korean',
{
type: Sequelize.STRING(20),
allowNull: true,
comment: '한글 브랜드명',
},
)
.then(() => {
const text = fs.readFileSync('lower_item.csv');
const records = parse(text.toString('utf-8'));
return Promise.all(records.map(record => (
queryInterface.sequelize.query(
`
UPDATE male_lower_input_items
SET korean = :korean
WHERE code = :code
`,
{
replacements: {
code: record[7],
korean: record[9],
},
},
)
)));
});
},

down: (queryInterface) => {
/*
Add reverting commands here.
Return a promise to correctly handle asynchronicity.

Example:
return queryInterface.dropTable('users');
*/
queryInterface.removeColumn(
'male_lower_input_items',
'korean',
);
},
};

이렇게 작성해놓으면 up 호출하면 마이그레이션을 진행하고, down을 호출하면 롤백됩니다.

0

migrations를 통해서 실제 테이블을 변경해주어야 DB에 반영됩니다. 

이렇게 말씀을 하셨는데 예를들면 어떤식으로 되어있는건가요??

원피스를 찾아서님의 프로필 이미지
원피스를 찾아서

작성한 질문수

질문하기