피드로 돌아가기
Conflict Resolution in a Bidirectional Sync App — How I Handle the Hard Cases
Dev.toDev.to
Backend

SQLite 기반 상태 추적으로 Bidirectional Sync 충돌 해결

Conflict Resolution in a Bidirectional Sync App — How I Handle the Hard Cases

hiyoyo2026년 6월 19일3intermediate

Context

Android와 Mac 간 양방향 동기화 과정에서 발생하는 파일 수정 및 삭제 충돌 처리의 복잡성 해결 필요. 단순 덮어쓰기 방식의 데이터 손실 위험을 방지하기 위한 정교한 충돌 분류 체계 설계 요구.

Technical Solution

  • SQLite를 활용하여 파일 경로, Hash, 수정 시간을 포함한 sync_state 테이블로 최신 동기화 상태 추적
  • Mac과 Android의 Hash 변경 여부를 대조하여 CopyToAndroid, CopyToMac, NoOp, Conflict로 구분하는 classify_file 로직 구현
  • 수정 시간 비교를 통해 최신 버전을 선택하는 'Newer wins' 전략으로 일반적인 충돌 상황 해결
  • Source of Truth를 Mac으로 설정하거나 충돌 파일에 접미사를 붙여 보존하는 'Keep both' 전략의 사용자 설정 옵션 제공
  • 삭제와 수정이 충돌하는 경우 데이터 손실 방지를 위해 복구를 우선하는 'RestoreToMac' 기본 정책 적용

1. 파일 Hash와 수정 시간을 SQLite에 저장하여 상태 변경을 감지하는가?

2. 단순 덮어쓰기가 아닌 명시적인 Conflict 상태 분류 로직이 존재하는가?

3. 데이터 손실 방지를 위해 삭제보다 보존을 우선하는 Safe Default 정책을 적용했는가?

4. 사용자의 워크플로우에 따라 충돌 해결 전략을 선택할 수 있는 Config 옵션을 제공하는가?

원문 읽기