팀원으로부터 컬럼명을 변경해달라는 요청을 받았다.
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 |