피드로 돌아가기
Key point in Do List 100 v2.0 Brings Due Dates, Auto-Progress and Full iPad & Mac Support
Dev.toDev.to
Frontend

iCloud 동기화 루프 해결을 통한 데이터 정합성 및 UX 안정화

Key point in Do List 100 v2.0 Brings Due Dates, Auto-Progress and Full iPad & Mac Support

Dima Ulyanov2026년 6월 2일3intermediate

Context

NSMetadataQuery 기반의 iCloud 파일 감시 체계로 인해 로컬 저장 시 발생하는 Self-overwrite loop 문제 발생. 저장 직후 OS 레벨의 파일 변경 감지가 즉각적인 데이터 Reload를 유발하여 사용자 입력 값이 유실되는 레이스 컨디션 노출.

Technical Solution

  • DataManager 내 isSavingLocally 플래그 도입을 통한 로컬 쓰기 작업으로 인한 자체 Reload 차단
  • TaskManager에 isUserEditing 가드를 구축하여 TextField 포커스 상태 시 데이터 교체 로직을 Deferred 처리
  • todosChanged() 이벤트에 0.5s Debounce를 적용하여 원격 동기화 시의 급격한 상태 변경 방지
  • SwiftUI의 In-memory array 교체 시점을 제어하여 입력 중인 데이터의 Visual Snap-back 현상 제거
  • 로컬 저장-감지-로드로 이어지는 순환 구조를 상태 플래그와 시간 지연 전략으로 분리한 동기화 제어 설계

- OS 레벨의 파일 감시자를 사용할 때 자체 쓰기 작업에 의한 무한 루프 발생 가능성 검토 - 사용자 입력 필드와 바인딩된 상태 값의 업데이트 시점과 외부 데이터 동기화 시점의 충돌 방지책 마련 - 네트워크 및 파일 시스템의 Latency를 고려하여 읽기/쓰기 양방향에 적절한 Debounce 적용

원문 읽기