Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

258 mongo entity 리팩토링 #259

Open
wants to merge 34 commits into
base: develop
Choose a base branch
from

Conversation

eugene225
Copy link
Collaborator

@eugene225 eugene225 commented Oct 31, 2024

🧙 PR 타입

  • 기능 추가
  • 기능 삭제
  • 버그 수정
  • 의존성, 환경 변수, 빌드 관련 코드 업데이트

🤨 Motivation

Resolved #258

🔑 Key Changes

  • 기존에 채팅방 id 별로 collection 관리 방식 변경 -> chatMessageMongo document에 chatRoomId 필드 추가
  • 채팅방의 페이지네이션 조회 시 커서 값, 정렬기준 updated_at 필드로 변경
  • 채팅방 메시지의 페이지네이션 조회 시 커서 값, 정렬기준 _id 필드로 변경
  • 기존에 chat_participants 엔터티에 추가되었던 lastReadMsgId 정보를 MongoDB의 chat_activity collection으로 이전
  • getAllChatRoom 메서드 실행 시 발생하는 쿼리
    1. userId 기준 참여중인 chatRoom 목록 조회 (MySQL)
    2. chatRoomId 리스트로 채팅방별 마지막 메시지 정보 조회 (MongoDB)
    3. chatRoomId 리스트로 chat_activity 컬렉션 조회 : 채팅방별 lastReadMsgId 확인
    4. chatRoomId 리스트로 chat_messages 컬렉션 조회 : 채팅방별 unReadMsgCnt 집계
    5. 현재는 마지막 메시지를 전송한 사용자 정보(MySQL) 또한 필요해서 채팅방별 마지막 메시지 리스트를 기준으로 user 를 조회하는 쿼리가 한 번 더 발생하고 있는데, 모각코 및 채팅방 썸네일을 적용하면 이 쿼리는 필요 없을 것 같습니당
  • 기존에 채팅방별로 읽지 않은 메시지 수를 집계하는 쿼리가 10개씩 발생했는데, MongoDB의 Aggregation Pipeline을 적용해서 3번+4번 두번의 쿼리로 최적화 할 수 있었습니다
  • 채팅방 1개에 대해서 확인됐던 테스트코드 채팅방 2개로 늘려서 추가 작성

🙏 To Reviewers

너무 길어졌어요....죄송합니다.............
저번에 고민했던 chat_participant 테이블과 participant 테이블 두가지의 필요성에 대한 부분을 lastReadMsgId 필드를 아예 MongoDB로 이전하면서 조금 풀렸습니다. chat_participant 엔터티를 삭제하는 리팩토링을 따로 이슈를 파서 진행하면 좋을 것 같습니다..! 코드 보시고 같은
의견이신지 인수님 의견도 궁금합니당
코드 확인해보시고 어색한 부분이나 제가 놓친부분 있으면 코멘트 달아주세요 저도 너무 많은걸 고쳐서 이제 어지럽습니다..🫠

@eugene225 eugene225 added feat 기능 추가 시 사용 fix 버그, 문제 상황 수정 시 사용 refactor 로직 리팩터링 test 테스트 코드 작성 labels Oct 31, 2024
@eugene225 eugene225 self-assigned this Oct 31, 2024
@eugene225 eugene225 linked an issue Oct 31, 2024 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat 기능 추가 시 사용 fix 버그, 문제 상황 수정 시 사용 refactor 로직 리팩터링 test 테스트 코드 작성
Projects
None yet
Development

Successfully merging this pull request may close these issues.

마지막 메시지 조회 메서드 리팩토링
1 participant