Offline Sync
오프라인 동기화 상태 모델
네트워크가 끊긴 상태에서도 사용자가 작업을 이어가고, 이후 서버와 다시 맞출 수 있도록 상태를 나누는 템플릿입니다.
Copy Block
## States
| State | Meaning | UI || --- | --- | --- || online | Network is available | Default || offline | Network is unavailable | Offline notice || local_saved | Data saved locally | Local save complete || pending | Waiting for server sync | Waiting for sync || syncing | Server sync in progress | Syncing || synced | Server sync complete | Usually hidden || failed | Server sync failed | Retry action |## Flow
online -> offline -> local_saved -> pending -> online -> syncing -> syncedpending -> syncing -> failed -> retry -> syncing -> synced## Decisions
- Offline create:- Server validation required:- Duplicate request key:- Conflict priority:- Failed item retention:Local First작업 내용을 먼저 로컬에 저장하고 동기화 대기 상태로 둡니다.
Retry네트워크 복구 후 실패 항목을 다시 전송할 수 있는 흐름을 둡니다.
Conflict충돌이 생겼을 때 어느 쪽 데이터를 우선할지 기준을 정합니다.
Visibility사용자에게 보일 상태와 숨길 상태를 구분합니다.
States
| State | Meaning | UI |
|---|---|---|
| online | 네트워크 사용 가능 | 기본 상태 |
| offline | 네트워크 사용 불가 | 오프라인 안내 |
| local_saved | 데이터가 로컬에 저장됨 | 로컬 저장 완료 |
| pending | 서버 동기화 대기 | 동기화 대기 |
| syncing | 서버 동기화 진행 중 | 동기화 중 |
| synced | 서버 동기화 완료 | 필요 시 숨김 |
| failed | 서버 동기화 실패 | 재시도 안내 |
online -> offline -> local_saved -> pending -> online -> syncing -> syncedpending -> syncing -> failed -> retry -> syncing -> syncedDecision Table
| Question | Project Answer |
|---|---|
| 오프라인에서 생성 가능한 데이터는 무엇인가? | 사용자 입력으로 완결되는 임시 항목 |
| 서버 검증이 필요한 작업은 무엇인가? | 권한, 결제, 공유, 외부 연동이 필요한 작업 |
| 중복 요청은 어떤 값으로 판별하는가? | 클라이언트 생성 요청 ID와 작성 시간 |
| 충돌이 발생하면 어느 쪽 데이터를 우선하는가? | 최신 수정 시간을 기본으로 하되 사용자 확인을 제공 |
| 실패한 동기화 항목은 얼마 동안 보관하는가? | 사용자가 삭제하거나 재시도할 때까지 보관 |
