[TIL] socket.io로 실시간 채팅 구현, API 설계

김시원·2023년 5월 13일
1

TIL

목록 보기
21/50

TIL

📌 Issues encountered

Issue #1

  • original repository의 main이 아닌 develop branch에 pull request 보내기
    * git flow 전략에서 우리가 필요한 branch인 develop과 feature 브랜치를 원본 repo에서 사용하기로 결정

Issue #2

  • 소켓을 통해 실시간으로 구현되는 채팅 record를 어떻게 DB에 저장할까?

📌 What I tried

Issue #1

  • forked repo에서는 각자 feature/chats와 같이 feature/ 뒤에 역할을 붙여서 브랜치를 관리하기로 하였다.
  • 먼저 forked repo에서 original repo의 sync를 맞춰서 develop 브랜치를 만든다. 즉, forked repo는 main, develop, feature/chats 이 3개의 브랜치가 존재한다.
  • 내가 맡은 모든 코드는 feature/chats에서 관리한다.
  • feature/chats의 commit 기록들을 original repo develop 브랜치에 PR하기 전, forked repo의 develop 브랜치의 sync를 맞춰준다. => 여기서 sync를 맞추지 않으면 PR창에서 cannot merge ERROR가 뜬다.
  • feature/chats에서 바로 원본 repo의 develop 브랜치에 PR을 날린다.

Issue #2

  • 프론트에서 시간 간격을 두고 PATCH 요청을 보내는 것으로 결정하였다.
  • setInterval()을 통해서 시간 간격을 두어 PATCH요청을 보내고, 이미 DB에 저장되어 있는 채팅의 마지막 인덱스를 저장하여 이를 기준으로 저장되지 않은 채팅 목록들을 배열 안에 집어넣고 그 배열을 body로 서버에 전달해준다.
  • 서버는 이 배열을 body에서 받아서 stringify로 가공해준 후 content라는 column에 새로 업데이트된 채팅 내역에 대해 추가해준다.
  • 우리같이 소규모 프로젝트는 RDBMS에 이렇게 INSERT 요청을 많이 보내주어도 크게 문제는 없지만, 대규모 실시간 채팅 서비스의 경우 부하가 심할 것이기 때문에 json 형태로 채팅 내역을 저장할 수 있는 noSQL이나 아예 serverless 실시간 DB인 firebase를 사용해서 프론트에서 바로 DB로 채팅 내역을 전송해주고 내용을 받아오는 방법을 사용할 수도 있다.
  • 소켓 프론트와 연결 완료 후 잘 동작하고 시간이 남는다면 mongoDB로 채팅 내역 저장을 시도해보려고 한다.

0개의 댓글