본문 바로가기

Final Project (CODESTATES)

오늘의 기록 - sequelize 테이블 컬럼명 변경하기

팀원으로부터 컬럼명을 변경해달라는 요청을 받았다.

Users 테이블의 userName을 username으로 변경해 달라고 하셨다.

 

몇 번의 시행 착오를 거쳐 해결한 방법은 아래와 같았다.

해야 할 일은 크게 세 가지이다.

 

1. migration-skeleton 생성하기

 

알아보지 컬럼명만 수정할 수 있는 방법이 없는 듯했다.

나는 있던 컬럼을 삭제하고 새로운 컬럼을 추가하는 방식으로 수정했다.

(*알고보니 queryInterface에 renameColumn이라는 메소드가 있다...)

 

//작성자:김현영
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.removeColumn("Users", "userName");
    await queryInterface.addColumn("Users", "username", {
      type: Sequelize.STRING,
      allowNull: false,
      after: "id"
    })
  },

  down: async (queryInterface, Sequelize) => {
    await queryInterface.removeColumn("Users", "username");
    await queryInterface.addColumn("Users", "userName", {
      type: Sequelize.STRING,
      allowNull: false,
      after: "id"
    })
  }
};

 

 

2. User model에서 컬럼명 직접 수정해주기

 

처음에는 이 부분을 하지 않고 migration skeleton만 생성했더니 포스트맨에서 회원가입 요청이 정상적으로 되지 않았다.

그 때 nodemon 을 통해 바로바로 출력되는 메세지는 다음과 같았다.

 

 

 

 - 먼저 npm start를 했을 때 db 연결에 대한 메세지 중

Executing (default): CREATE TABLE IF NOT EXISTS `Users` (`id` INTEGER NOT NULL auto_increment , `userName` VARCHAR(255), `email` VARCHAR(255), `password` VARCHAR(255), `profileUrl` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `Users` FROM `pan_development`

 

npm start 시 이 메세지를 잘 살펴봤으면 테이블의 컬럼명이 수정되지 않았음을 바로 알 수 있었을 것이다. 내가 놓친 부분이다.

 

 

 

- 포스트맨에서 POST/signup 요청 시

(sequelize) Warning: Unknown attributes (username) passed to defaults option of findOrCreate

 

이 메세지를 보고 나는 username이 새로운 컬럼명으로 반영되지 않았음을 알았다.

하지만 user model에서 수정할 생각이 안 들어서 조금 헤맸지만 다행히 금방 했다.

 

user model에서 username으로 컬럼명 수정 후 npm start를 해보면

컬럼명이 username으로 정상적으로 수정되었다.

 

 

 

 

3. singup.js에서 userName이라고 작성된 컬럼명을 username으로 변경하기

 

 

수정된 결과는

  • 포스트맨에서 요청을 보냈을 때 정상적으로 회원가입이 되었음을 확인하고
  • mysql에서 SELECT * FROM Users를 통해서 회원가입된 유저 정보를 확인함으로서 알 수 있었다.

 

'Final Project (CODESTATES)' 카테고리의 다른 글

재배포 with AWS  (0) 2021.06.29
Final Project 1주차 기록  (0) 2021.05.06