입력 한 번은 화면 반영, 협업 전파, 영속 저장으로 나뉜다

Monaco의 onChange는 즉시 UI를 바꾸지만, WebSocket 전파와 REST 저장은 서로 다른 실패 단위로 다뤄야 합니다.

Local UI

값을 즉시 반영

undefined 변경은 무시하고 selectedFile이 없으면 전송을 멈춥니다.

WebSocket

협업 이벤트 전파

fileId, userId, changes를 emit하고 ACK로 서버 거절을 확인합니다.

REST save

디바운스 후 저장

800ms 후 PATCH 요청을 보내고 실패는 재시도 가능한 상태로 보여줍니다.

경로 빠르게 해야 할 일 성공 기준 실패 처리
Local화면 상태 fileContent 갱신 에디터 값과 상태 일치 파일 미선택이면 중단
Realtime협업 전파 Socket.IO emit ACK 또는 상대방 반영 연결 상태 배지와 재연결
Persist영속 저장 이전 timer 취소 후 PATCH 서버 버전 갱신 토스트, 재시도, 트리 재조회

실무 주의: 예제는 전체 텍스트를 changes로 보내지만, 실제 협업 편집은 OT나 CRDT delta로 충돌과 대역폭 문제를 줄이는 편이 안전합니다.