두 번째 이슈, 주문 API 구성
이슈의 목적
쇼핑몰이니 당연히 구매도 할 수 있어야 했다! 하지만 NoSql을 이번에 처음 써보는 나로서는 스키마 구성이 너무 어려웠다. 그래도 차근차근 주문, 주문 내역 확인, 주문 리스트, 주문 취소, 주문 업데이트 등의 기능을 완성해갔다.
겪었던 이슈
하지만! 큰 문제가 계속 생겼다. 바로 주문을 했을 때 상품을 어떻게 참조할 것인지였다. MongoDb에서 내장과 참조가 다른 점이 무엇인지부터 공부를 해 나가기 시작했다.
좋은 페이지가 있어 이것을 기반으로 공부했다.
https://devhaks.github.io/2019/11/30/mongodb-model-relationships/
MongoDB 데이터 관계 모델링
NoSQL의 대표적인 mongoDB 데이터 관계를 모델링하는 방법
devhaks.github.io
주문을 했을 때는 주문 내역이 생기고, 그 주문 내역에 주문을 한 물건과 물건의 갯수가 들어간다. 주문을 한 물건과 물건의 갯수는 따로 스키마가 생성되고 그 물건은 기존에 있는 물건 스키마를 참조한다. 이렇게 말하면 어려우니 스키마를 그냥 올려 두겠다.
당연히 참조하는 방식으로 하여 필요한 때에 populate를 해와 해당 물건의 정보를 알아낼 셈이었다. 저런 경우에는 order 스키마를 불러오고, 그 다음에 이미 주문한 물건들에 대한 스키마를 참조하고, 그 스키마에서 다시 물건에 관련된 스키마를 참조해서 주문한 물건에 대한 정보를 볼 수 있다.
그런데 이럴 수가...! 기껏 Reference 방식으로 populate를 했는데 참조가 안 된다고 했다. 중첩 populate 방식이 문제였나 했는데 아무리 검색을 해도 다 나와 동일한 방식으로 populate를 했다. 그래서 하루 동안 온갖 문서를 뒤지고 검색을 했는데도 풀리지 않아 엘리스 트랙 코치님께 제발 도와달라고 간곡히 요청을 했다... 그래서 친절히 도와주셨다!!
이슈 해결 방법
이유는 바로 위에 관련 스키마를 import 해주지 않았기 때문이었다... 이것도 코치님께서 알아봐 주셨다. mongoose에 대해 기초가 제대로 되지 않았다는 것을 깨달았다... 좀 더 제대로 알아보고 싶었는데 검색 실력이 부족해서인지 관련 정보에 대해서는 알아내지 못했다.
아쉬운 부분
mongoose나 mongodb에 대해 제대로 알고 있었다면 이런 일 때문에 시간 낭비를 하지 않았을 것 같다.
또 스키마를 처음부터 제대로 기획을 했다면 성능이 향상됐을 것 같다. 지금이야 작은 프로젝트니 중첩 populate를 하지만 실제로 서비스가 된다면 성능이 엄청 저하될지도 모른다. 1억개의 데이터를 2억개의 데이터와 populate한다고 생각하니 끔찍하다... 그래도 이번에는 서비스 규모가 아직 작으니 덕분에 중첩 populate 방식이나 db를 다루는 법을 배운 것 같다.
다음에는 내장 방식으로 하여 도큐먼트를 늘리는 대신 쿼리를 줄이는 방법도 괜찮을 것 같다. 역시 그때그때 맞는 방법을 찾아야 한다!
'웹 개발' 카테고리의 다른 글
맥북 MacBook hosts 파일 수정 (0) | 2023.01.13 |
---|---|
AWS3 사진 등록 (0) | 2022.07.18 |
쿠키와 세션 (0) | 2022.06.24 |
쥬얼리샵 Usually 회고글 - 첫 번째 이슈 (0) | 2022.06.06 |