WebSocket 경로
socket이 연결되어 있을 때 code_change를 emit하고 ACK로 서버 거절을 확인한다. 실시간 반영은 빠르지만 영속 저장을 대신하지 않는다.
Monaco의 onChange는 화면 상태를 즉시 갱신하고, 협업 이벤트와 자동 저장을 서로 다른 실패 단위로 다룬다.
socket이 연결되어 있을 때 code_change를 emit하고 ACK로 서버 거절을 확인한다. 실시간 반영은 빠르지만 영속 저장을 대신하지 않는다.
saveTimerRef로 이전 예약을 취소한 뒤 800ms 후 PATCH 요청을 보낸다. 실패하면 토스트나 배지로 재시도 가능한 상태를 알려야 한다.
undefined 변경은 무시하고 fileContent를 갱신한다.
selectedFile이 없으면 전송과 저장을 멈춘다.
fileId, userId, changes를 협업 세션으로 보낸다.
연속 입력 중 API 호출이 폭증하지 않게 디바운스한다.
예제는 전체 텍스트를 changes로 보내지만, 실무 협업 편집에서는 OT나 CRDT delta로 충돌과 대역폭 문제를 줄이는 편이 안전하다.