피드로 돌아가기
The reinstall bug almost every Flutter app ships
Dev.toDev.to
Frontend

Local DB 공백을 신규 유저로 오인하는 Reinstall Bug 해결 및 State Machine 기반 복구 설계

The reinstall bug almost every Flutter app ships

NEXINFINITY META2026년 6월 25일3intermediate

Context

Local DB와 Cloud Backend를 동기화하는 일반적 아키텍처에서 앱 재설치 시 Local Storage가 삭제됨에 따라 발생하는 데이터 인식 오류 분석. 단순 hasLocalData 체크 기반의 분기 로직으로 인해 기존 유저가 신규 유저의 Onboarding 과정으로 잘못 진입하는 사용자 경험 손실 발생.

Technical Solution

  • 단순 조건문 대신 4가지 시그널(Interrupted Checkpoint, Local Data, Account Status, Authenticated Empty DB)을 처리하는 State Machine 도입
  • Cloud Backend 부하 방지를 위해 전체 데이터 요청 전 Manifest 기반의 저비용 Probe 단계 수행
  • 네트워크 불안정성에 대응하기 위한 Cursor-paged Batch Pull 및 배치 단위의 Checkpoint 기록 구조 설계
  • 데이터 중복 방지 및 일관성 유지를 위한 Idempotent Upsert 전략 적용
  • Secure Storage에서 암호화 키를 우선 복구한 후 Local DB 쓰기를 수행하는 엄격한 순차적 복구 프로세스 구축
  • 일시적 네트워크 오류를 데이터 손실로 오인하지 않도록 Retry-into-Resume 메커니즘 구현

- 앱 재설치 후 Signed-in 상태의 Local DB 공백 시나리오에 대한 Cold-launch 경로 검증 - 대량 데이터 복구 시 중단 지점을 기록하는 Checkpoint 로직 및 중복 방지를 위한 Idempotency 보장 여부 확인 - Local Storage 삭제 시 Encryption Key 복구 전략이 데이터 쓰기 단계보다 선행되는지 검토

원문 읽기