TIL
📌 Issues encountered
Issue #1
MySQL로 자신의 전체 채팅 내역을 조회할 때 쿼리 시간이 너무 오래걸린다. Postman으로 테스트시 2.xx초가 걸린다.
Issue #2
MongoDB 추가 연결하기
📌 What I tried
Issue #1
- MySQL에서 Chats table과 join해아하는 table이 2개나 되고, 전체 채팅 내역을 조회하는 부분은 특히나 service layer에서 map을 돌면서 반환해줄 객체를 가공해주어야 했기 때문에 쿼리문 실행도 너무 많고 시간도 그만큼 많이 걸렸다.
- 따라서, MySQL의 Chats table을 MongoDB로 변경하는 것으로 결정하였고, Chats schema와 Messages schema 두 개의 스키마를 만드는 것으로 결정하였다.
- Chat 관련 DB는 MongoDB이고, 나머지는 모두 MySQL DB이기 때문에 Chat CRUD를 할 때 최대한 MySQL과 병행하며 데이터를 가져오는 부분을 줄이기 위해 Chats schema에 MySQL에서 다루는 데이터들을 담아주었다.
- Chats -> title, is_sold, product_id, members, members_nickname, address가 담긴다.
- Messages -> chat_id, sender_id, text가 담긴다.
- 실제로 MongoDB로 Chat 부분을 변경하니, 조회 시간이 2.xx초에서 약 600 ms로 확 줄었다.
Issue #2
utils/mongodb.js
에 다음과 같이 mongoDB에 연결하는 부분을 정의해주었다.
const mongoose = require("mongoose");
const { mongodb } = require("../config/config.js");
const db_url = `mongodb+srv://${mongodb.id}:${mongodb.password}@${mongodb.cluster}/${mongodb.db}?retryWrites=true&w=majority`;
const connectToMongoDB = async (app) => {
mongoose
.connect(db_url)
.then(() => {
console.log("MongoDB connected")
})
.catch((err) => {
throw err;
});
};
module.exports = connectToMongoDB;
- app.js에서 mongoDB를 다음과 같이 불러준다.
const connectToMongoDB = require("./utils/mongodb");
connectToMongoDB(app);
- schema 폴더에 Chats와 Messages 스키마를 정의해주고 이 스키마가 쓰일 repository에서 이 스키마들을 불러서 사용하였다.