에디터 변경 계약

입력 한 번이 전파와 저장으로 분기된다

Monaco의 onChange는 화면 상태를 즉시 갱신하고, 협업 이벤트와 자동 저장을 서로 다른 실패 단위로 다룬다.

WebSocket 경로

socket이 연결되어 있을 때 code_change를 emit하고 ACK로 서버 거절을 확인한다. 실시간 반영은 빠르지만 영속 저장을 대신하지 않는다.

REST 저장 경로

saveTimerRef로 이전 예약을 취소한 뒤 800ms 후 PATCH 요청을 보낸다. 실패하면 토스트나 배지로 재시도 가능한 상태를 알려야 한다.

1 값 수신

undefined 변경은 무시하고 fileContent를 갱신한다.

2 파일 확인

selectedFile이 없으면 전송과 저장을 멈춘다.

3 이벤트 전파

fileId, userId, changes를 협업 세션으로 보낸다.

4 지연 저장

연속 입력 중 API 호출이 폭증하지 않게 디바운스한다.

입력 한 번이 전파와 저장으로 분기된다 기준

realtime 다른 사용자에게 빨리 보여야 하는 변경은 Socket.IO로 보낸다.
persist 새로고침 뒤에도 남아야 하는 내용은 PATCH 성공을 기준으로 본다.
recover 권한 오류나 저장 실패는 트리 재조회와 재시도 UI로 복구한다.

입력 한 번이 점검

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