11.16 항해 65일차 TIL

한우석·2021년 11월 16일
0

채팅방 입장 시 메시지 불러오기

  • MessageBox에서 Dispatch를 해서 가져 오려고 했었는데 생각을 바꾸니 의외로 쉽게 해결 되었다.
  • 왜 계속 너무 어렵게 생각하려고 하는지 모르겠는데 앞으로 단순한 접근부터 하도록 신경 써야겠다.
const wsConnectSubscribe = React.useCallback(() => {
    try {
      ws.connect({},async () => {
       ws.subscribe(
          `/sub/chat/room/${roomId}`,
          (data) => {
            const newMessage = JSON.parse(data.body);
            console.log(userInfo);
            dispatch(getMessage(newMessage));
          },
          { token, userEmail: userInfo.email },
        );
      });
		// 그냥 이전 메시지 로드하는 디스패치 한줄 추가 했다.
    dispatch(loadMessagesToAxios(roomId))
    } catch (error) {
      console.log(error);
    }
  }, [dispatch, userId, ws]);

이후에 더 테스트를 해보니 아직도 채팅방을 불러오는게 잘 안되는 것 같았다.

지금 생각되는 몇가지의 원인은 아래와 같다.

  • 현재는 Opening Web Socket... 메시지가 뜨자마자 이전 메시지를 가져오는 dispatch를 실행 하는데 맨 아래 보이는 SUBSCRIBE가 끝난 이후에 dispatch를 실행 해야하는건가?
    • 현재로써는 가능성이 조금 높다고 생각되는 원인이다.
    • 몇가지 방법을 시도 해봤으나 SUBSCRIBE 이후에 실행 되도록 하는 방법을 아직 찾지 못했다.
    • 근데 사실 그거랑 상관 없이 redux를 구독 하고 있으니 해당 메시지 리스트가 바뀐다면 당연히 렌더링이 일어나야 하는거 아닌가?


  • 백엔드 쪽에서 메시지를 DB에 저장하는 로직은 메시지가 100개 단위로 쌓일 때 마다 ec2서버에 저장한다. 100개가 쌓이기 전까지는 Redis에서만 관리한다.
    • 이 부분에서 문제가 발생하는 거라면 메시지가 하나 발생 할 때마다 ec2에 저장하는 방법은?
    • 메시지 하나하나 마다 server와 통신을 해야하니 당연하게도 좋은 해결책이 아닌 것 같다. 그렇지만 당장 오류의 원인을 찾는 방향으로 접근하면 우선 시도해 보는게 좋을 것 같다.
profile
H/W 개발자에서 프론트 엔드 개발자로 전향 하고 있는 초보 개발자

0개의 댓글