강의

멘토링

커뮤니티

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

hib4888님의 프로필 이미지
hib4888

작성한 질문수

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

시퀄라이즈 sync + nodemon

생성된 DB는 수정이 불가능한가요?

작성

·

201

0

안녕하세요 제로초님 강의 너무 잘 듣고있습니다!!

실습진행하면서 정상적으로 DB를 생성했는데

만약 DB생성 이후에 컬럼을 추가, 모델이름 변경, 테이블관계 변경등의 변경사항이 발생된다면 그 때는 새롭게 DB를 생성해야되는건가요?

 

답변 1

0

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

테이블을 수정하시면 됩니다. 코드에서 하시면 마이그레이션을 배우셔야 하고, 워크벤치에서 직접 수정하는 방법도 있습니다.

hib4888님의 프로필 이미지
hib4888
질문자

마이그레이션을 학습해봐야겠네요

빠른 답변 감사합니다 ㅎㅎ

hib4888님의 프로필 이미지
hib4888
질문자

혹시 마이그레이션을 통해 테이블을 생성하면 id와 관계필드는 수동으로 생성해줘야 되나요?

아래와 같이 alert테이블의 관계를 정의한 뒤 테이블을 생성해서 확인해보니 마이그레이션에서 설정한 type필드외에 id, 관계컬럼이 생성되지 않아서 질문드립니다.

 

models/alert.js

const DataTypes = require('sequelize');
const { Model } = DataTypes;

module.exports = class Alert extends Model {
  static init(sequelize) {
    return super.init({      
      type: {
        type: DataTypes.STRING(10),
        allowNull: false,
      },
    }, {
      modelName: 'Alert',
      tableName: 'alerts',
      charset: 'utf8mb4',
      collate: 'utf8mb4_general_ci',
      sequelize,
    });
  }
  static associate(db) {
    db.Alert.belongsTo(db.Post);
    db.Alert.belongsTo(db.User, { as: 'Alerter' });
    db.Alert.belongsTo(db.User, { as: 'Alerted' });        
  }
};

 

마이그레이션

'use strict';

module.exports = {
  async up (queryInterface, Sequelize) {
    await queryInterface.createTable('alerts', {
      type: {
        type: Sequelize.STRING(10),
        allowNull: false,
      },      
    });
  },

  async down (queryInterface, Sequelize) {

  }
};

 

결과

image

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

네 전부 수동으로 생성해야 합니다.

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

migration이 모델을 읽을 수 있는 기능이 있나 모르겠네요.

hib4888님의 프로필 이미지
hib4888
질문자

답변 감사합니다.

마이그레이션의 모델 읽는 기능을 찾아본뒤 없으면 수동으로 id랑, 관계컬럼을 생성해야겠네요.

감사합니다!!

hib4888님의 프로필 이미지
hib4888
질문자

DB를 사용하면서 추가로 궁금한점이 있어서 질문드릴께요

제가 고차함수를 사용하다 모르고 다음과 같이 ()를 안적어줬습니다.

const onClickBtn = useCallback((data) => {
  console.log(data);
});

<Button onClick={onClickBtn(data)}>Click</Button>

 

이후에 오류를 해결하고 mysql 워크벤치에서 관련 테이블을 클릭하니까 워크벤치가 자동으로 꺼지더라고요

단기간의 에러인것같아서 워크벤치 재실행 및 재부팅을 했는데도 동일하게 워크벤치 접속후에 테이블명만 클릭하면 자동을 워크벤치가 종료됩니다.

혹시 해당 이유에대해서 알수있을까요?

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

이건 워크벤치 에러라사 워크벤치를 먼저 재설치해보아야 할 것 같슴니다.

hib4888님의 프로필 이미지
hib4888
질문자

답변 정말 감사합니다.

혹시 워크벤치를 재설치하게되면 기존에 생성, 설정되어있던 테이블과 관계들이 사라지게되나요?

재설치를 해본적이 없어서 어떤 작업을 추가해야될지 궁금해서 질문드립니다.

배포직전이라 좀 조심스러워서요

 

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

워크벤치는 단순히 조회만 하는 도구라 영향을 끼치지 않습니다.

hib4888님의 프로필 이미지
hib4888
질문자

몰랐던 정보였는데 감사합니다.

근데 위 문제가 발생했을 때 특정 액션이 반복해서 실행됬습니다.

해당 액션은 로그인한 사용자의 알람정보를 db에서 검색한 뒤 가져오는 액션입니다

이 액션의 반복 실행으로 인해 많은 쿼리문 생성 및 실행되서 위와 같은 오류가 발생할수도 있을까요?

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

아뇨 그럴 것 같지는 않습니다. 저희는 데이터가 천만개 넘고 1초에 쿼리 실행이 천번 넘게 발생하는데도 워크벤치 잘 켜집니다.

hib4888님의 프로필 이미지
hib4888
질문자

그렇군요 모든 답변들 감사합니다!!

hib4888님의 프로필 이미지
hib4888
질문자

워크벤치를 재설치하고 동일하게 문제가 발생해서 질문드립니다.

문제가 해결되지 않아 이후에 mysql comment에서 프로세스를 확인해보니 다음과 같이 결과가 나왔습니다.

혹시 이벤트스케줄러의 time이 너무 많아서 해당 문제가 발생한 것 일까요?

구글링을해도 해당 오류에 대한 원인을 찾을 수 없어 질문드리겠습니다.

 

image

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

전혀 감이 잡히는 게 없네요 ㅠ

hib4888님의 프로필 이미지
hib4888
질문자

곤란한 질문드려서 죄송합니다.

개발을 하는데는 지장이 없으니 추후에 관련 정보를 찾아서 해결해보겠습니다,

답변들 감사합니다

hib4888님의 프로필 이미지
hib4888

작성한 질문수

질문하기