Skip to content

쪽지 기능을 위한 데이터 모델링 및 구현

Min-h-96 edited this page Dec 12, 2022 · 5 revisions

쪽지(message) 기능을 위한 기획

쪽지(message) ERD

파트너를 구하기 위해 서비스에 접속한 사용자들에게 더 나은 사용자간에 소통 기능을 제공하기 위해서 쪽지 기능을 구현하기로 했습니다.

쪽지는 기본적으로 1대1로 주고 받는 기능이기 때문에, 쪽지를 주고받기 위한 대화방 1개당 1개의 document가 필요하다고 생각했습니다.

// message 쪽지 내역 (ex. A와 B의 채팅 내역 document)

{
  _id: ObjectId(),
  participants: 'ObjectId(A).toString(),ObjectId(B).toString()',
  createdAt,
  updatedAt,
  contents: [
     {
       from: ObjectId(A).toString(),
       createdAt: Date
       content: '내용1',
     },
     {
       from: ObjectId(B).toString(),
       createdAt: Date
       content: '내용2',
     },
     {
       from: ObjectId(B).toString(),
       createdAt: Date
       content: '내용3',
     }
  ],
}
  • participants
    • A가 B에게 쪽지를 보내는 요청을 했을 때, A와 B의 방이 어떤 것인지 조회하기 위한 값입니다.
    • 값이 저장되기 이전에 sort([A,B]) 과정을 거쳐서 정렬한 순서대로 문자열을 만들고, ,문자로 구분자를 추가해서 저장합니다.
  • updatedAt
    • 데이터가 update 된 시간입니다.
    • 사용자가 처음 접속했을 때, 확인 안한 쪽지가 있는지 확인하는 용도로 쓰입니다.
  • Content
    • from : A와 B의 대화방이라고 한다면, 누가 보낸 쪽지인지를 확인하기 위한 값입니다.
    • createdAt : 쪽지가 보내진 시간을 표시하기 위한 값입니다.
    • content : 쪽지 내용입니다.

User 컬렉션

쪽지 기능이 추가됨으로써, User 컬렉션에도 변화가 생겼습니다. 각 사용자가 누구와 쪽지를 주고받고 있었는지를 알 필요가 있습니다.

message 컬렉션에서 본인을 제외한 모든 사용자와의 participants로 정렬해서 누구와 쪽지를 주고받고 있었는지 매번 조회할 수는 없었기 때문에, 각 사용자가 본인이 누구와의 대화방이 만들어졌었는지 그 정보를 가지고 있을 필요가 있다고 생각했습니다. 따라서 user 컬렉션에 해당 데이터를 추가하기로 했습니다.

// user 컬렉션에 추가되는 내용 (ex. userB)

{
  ... 생략 ..
  messageInfos: [
    {
      with: ObjectId(A),
      lastCheckTime : Date
    },
    {
      with: ObjectId(C),
      lastCheckTime : Date
    },
  ],
}
  • messageInfos : 사용자가 누구와 쪽지를 주고받고 있는지 내역을 구성하기 위한 값입니다.
  • lastCheckTime
    • 각 쪽지 내역에 마지막으로 접속한 시간을 확인하여, 사용자마다 확인하지 않은 메시지가 있으면 시간을 비교해서 알려주기 위한 값입니다.

얼리버드

프로젝트

개발일지

스프린트 계획

멘토링

데일리 스크럼

데일리 개인 회고

위클리 그룹 회고

스터디

Clone this wiki locally