2021-02-18(Thu)

항목

내용

학습 날짜

2021-02-18(목)

학습 시간

11:00~24:00

학습 범위 및 주제

ChatRoom 완성

학습 목표

ChatRoom을 PR할 수 있는 상태로 만든다.

동료 학습 방법

eunhkim님과 페어프로그래밍을 진행하였다.

상세 학습 내용

우선 PR을 리뷰하는데 시간을 많이 썼다. 이후 ChatRoom을 한차례 리팩토링하였다.

  def self.position_grade
    {
      "web_owner" => 5, 
      "web_admin" => 4, 
      "owner" => 3, 
      "admin" => 2, 
      "member" => 1,
      "ghost" => 0
    }
  end

문자열로 키값 쓸려면 위처럼 옛날 문법을 써야한다. web_owner: 5 이런 식으로 적을 수는 없다.

그리고 model에 이벤트를 트리거할 때 컬렉션을 listenTo 하고 있던 뷰에 모델을 인자로 넘겨주려면, trigger의 두 번째 인자로 모델을 넘겨야한다. 이렇게! trigger("event", model)

문제) 이미 챗룸에서 나간 멤버의 메시지 렌더링이 정상적으로 되지 않는다.

챗 메시지는 서버로부터 받은 메시지 외에도 chat_room_members 백본 컬렉션에 포함된 모델을 참조하여 프로필을 렌더링하게 된다. 문제는 원래 챗룸에 참여해있던 멤버가 챗룸에서 나갈 때 chat_room_membership table상에서 hard delete를 해버리다보니, '현재 챗룸에는 없는 사람의 메세지'를 렌더링할 때 참조할 모델을 찾지 못하는 이슈가 있었다.

해결)

챗룸에서 나가는 멤버는 chat_room_membership에서 soft delete하도록 수정하였다. 그럼 chat_room_members 백본 컬렉션에 해당 멤버의 모델도 포함된다. 그럼 해당 모델을 참조해서 메세지를 렌더링할 수 있게 된다.

사실 서버로부터 받는 chat_room_message에 전달 받을 때 유저 프로필 정보도 포함해서 받는다면 이런 의존성을 해소해버릴 수도 있겠지만.. 현재 수준에서 과하게 확장성을 고려하지는 말자는 의견을 받아들였다.

학습 내용에 대한 개인적인 총평

챗룸 구현을 마무리하면 된다고 생각했는데 해결해야할 문제들을 추가로 발생했다. 그래도 의존성을 줄이려고 노력했던 것이 나름 빛을 발했다.

다음 학습 계획

  • PR 날릴 수 있는 상태 만들기

Last updated