[Problem]
Lv 4 과제를 진행 중 게시글 좋아요 API를 구성할 때 생각해보니 db의 like 컬럼에 createdAt과 updatedAt이 필요없다 생각이 들었다. 불필요한 요소를 계속해서 저장해 많은 공간을 차지할 필요없다 생각했던 것이다.
[Try]
처음에는 쉽게 생각해서 migrations의 create-likes.js부분과 models의 likes.js를 수정하면 될 거라 생각하여 두 파일의 createdAt과 updatedAt 부분을 삭제했다. 삭제 후 실행 결과....
error가 발생했다.
수정 전에는 정상적으로 작동했는데...createdAt과 updatedAt만 없앴는데 error가 발생한다. error에 대한 부분을 찾기 위해
catch (error) {
// 예외 케이스에서 처리하지 못한 에러
console.log(error)
return res
.status(400)
.json({ errorMessage: '게시글 좋아요에 실패하였습니다.' });
}
console.log로 error를 가져왔다.
분명히 지웠는데....createdAt을 만들어 낸다...
검색을 통해 학습한 결과 sequelize 특성 중 하나다. 자체적으로 createdAt과 updatedAt을 만들어 낸다. 따라서 없애는 것과 상관없이 자체적으로 발생하기 때문에 생성되지 않게 처리할 필요가 있다 생각했다.
[Solution]
likes의 model부분을 수정해야하는 것을 알게 됐다.
@수정 전
Likes.init(
{
likeId: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
},
postId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Posts',
key: 'postId',
},
},
userId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Users',
key: 'userId',
},
},
},
{
sequelize,
modelName: 'Likes',
},
);
@수정 후
Likes.init(
{
likeId: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER,
},
postId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Posts',
key: 'postId',
},
},
userId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Users',
key: 'userId',
},
},
},
{
timestamps: false,
sequelize,
modelName: 'Likes',
},
);
sequelize의 시간을 생성하는 기능인 timestamps는 기본적으로 true 설정이며, 이를 처리해주면 createdAt과 updatedAt이 처리된 다는 것을 깨닫고 timestamps: false로 처리했다.
@실행 결과
정상적으로 동작한다.
[Conclusion]
아직 습관이 안 길러진 듯 하다... sequelize 모듈을 사용하고 있지만 그냥 js 알고리즘 문제 푸는 것처럼 행동했다.
이런 부분을 모두 고려하면서 코드를 작성할 수는 없겠지만 작성할 때 잠깐만 생각하면 많은 시간을 줄일 것이라 생각한다.
mongoose에서 기본적으로 id를 제공하는 것처럼 sequelize에는 timestamp 기능이 기본 기능이라는 것을 알 수 있는 좋은 학습이었다.
모든 테이블에서 시간 생성을 없애고 싶다면 config파일에서 "timestamp": false를 넣어주면 된다.
"development": {
"username": "root",
"password": null,
"database": "database",
"host": "127.0.0.1",
"dialect": "mysql",
"define": { "timestamps": false } // 추가
},
'Self Dev. > TIL' 카테고리의 다른 글
2023.05.21 TIL - JWT를 header로 받는 이유.... (1) | 2023.05.21 |
---|---|
2023.05.16 TIL - express에 multer 모듈을 이용해 image 업로드... (0) | 2023.05.16 |
2023.05.07 TIL - MySQL 데이터베이스 (Sequelize를 이용하여 Drop하기) (0) | 2023.05.07 |
2023.04.28 TIL - mongoose ObjectId (0) | 2023.04.28 |
2023.04.26 TIL - MongoServerError: E11000 duplicate key error collection (1) | 2023.04.27 |