😱😱😱😱😱😱😱😱
우리 서비스에서 소켓 통신 흐름은 아래와 같았음
createNode 요청 → 서버 응답 → updateNode 요청
나는 updateNode할 때 그냥 클라이언트가 가지고 있는 상태 통째로 보내면 된다고 생각해서 그렇게 보내고 있었음
아무튼 다 그렇게 연결해 두고 다 잘 돼서 신났었는데
…
db에서 계속 노드 데이터가 덮어씌워지는 현상 발생
무엇인고 … 하니
알고보니 createNode 응답 받을 때, 서버에서 생성한 id가 와서
그 id로 클라이언트 데이터 id도 갈아끼우기 해 줘야 하는 것이었다
요로코롬 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만 갈아끼우게