😱😱😱😱😱😱😱😱

우리 서비스에서 소켓 통신 흐름은 아래와 같았음

createNode 요청 → 서버 응답 → updateNode 요청

나는 updateNode할 때 그냥 클라이언트가 가지고 있는 상태 통째로 보내면 된다고 생각해서 그렇게 보내고 있었음

아무튼 다 그렇게 연결해 두고 다 잘 돼서 신났었는데

db에서 계속 노드 데이터가 덮어씌워지는 현상 발생

무엇인고 … 하니

알고보니 createNode 응답 받을 때, 서버에서 생성한 id가 와서

그 id로 클라이언트 데이터 id도 갈아끼우기 해 줘야 하는 것이었다

스크린샷 2024-11-20 오후 11.27.23.png

요로코롬 1로 보내도? 10으로 온다

그럼 나는 10으로 갈아끼우기 하고 updateNode할 때 반영해서 보내주어야 하는 것이었다

그래서 코드를 수정했다

    socket.on("createNode", (response) => {
      if (response) {
        const updatedData = {
          ...data,
          [selectedNode.nodeId]: {
            ...data[selectedNode.nodeId],
            children: [...data[selectedNode.nodeId].children, newNodeId],
          },
          [response.id]: { ...newNode, id: response.id },
        };
        overrideNodeData(updatedData);
        socket.emit("updateNode", updatedData);
      }
    });

이런 식으로 id만 갈아끼우게