만들면서 많은 많은 문제가 있었지만 대표적으로 먼저 Lv4에서 좋아요 기능을 추가하기 위해서 ERD를 구상하는 것부터 고민이 되었다. 관계 설정을 어떻게 해야할까.
이 문제에 대해서 그 안에 무슨 내용이 필요한가에 대해서 유저 정보와 게시글 정보가 필요했고 이를 관계 설정을 어떻게 하냐에 대해서 각 DB에 들어가는 데이터가 중복 되는게 있냐를 기준으로 생각을 했다. 예를 들면 유저 한 명이 여러개의 게시글에 좋아요를 누를 경우에 좋아요DB에는 각각 다른 게시물이지만 같은 유저 정보가 중복되어 들어간다. 하지만 유저DB에는 각 유저는 유저별로 하나씩을 저장하기에 1: N관계를 설정해서 같은 유저가 같은 게시물에 다시 좋아요 요청을 하는 경우 좋아요가 취소되게 만들었다.
const likes = await Likes.findOne({
where: {
[Op.and]: [{ UserId: userId }, [{ PostId: postId }]]
}
}
);
if (!likes) {
await Likes.create({ UserId: userId, PostId: postId });
return res
.status(200)
.json({ Message: "게시글의 좋아요를 등록하였습니다." });
} else {
await Likes.destroy({
where: {
[Op.and]: [{ UserId: userId }, [{ PostId: postId }]]
}
})
return res
.status(200)
.json({ Message: "게시글의 좋아요를 취소하였습니다." });
}
기존에 mongoDB와 다르게 시퀄라이즈를 이용한 mySQL에선 관계 설정을 통해서 다른 DB를 참조할 수 있어서 DB별로 정해진 컬럼만을 사용할 수 있다는 불편한 점은 있지만 다른 DB의 컬럼들 관계 설정을 통해서 불필요한 정보를 줄일 수 있었다. 그러나 mongoDB는 컬럼을 필요에 따라 자유롭게 추가할 순 있지만 필요한 데이터를 한 객체에 다 담아야한다는 단점이 있었다. 그리고 속도 부분에서도 차이가 난다고 하는데 내가 많은 데이터를 다루지 않기에 그 부분에 대해서는 아직 느낄 수 없었기에 아쉬웠다.
'오늘 뭐했냐 > 끄적끄적' 카테고리의 다른 글
| 23.07.12 git Flow 연습 (0) | 2023.07.13 |
|---|---|
| 23.07.02 LV2 API 테스트 (0) | 2023.07.02 |
| 23.07.01 LV2 과제 중 (1) | 2023.07.01 |
| 23.06.29 주특기 2주차 강의 보는 중 (0) | 2023.06.30 |
| 23. 06.27 LV1 과제 완료 (0) | 2023.06.27 |