---
type: note
kind: Convention
tags: ['local-first', 'indexeddb', 'sync']
status: release
ctime: 2026-06-21
mtime: 2026-06-27
generated: { by: claude/opus-4.8, at: 2026-06-28T14:49:32Z }
---

import AutoIframe from '@components/AutoIframe/AutoIframe.astro'

**네트워크를 가정하고 캐시를 끼워맞추지 말고, 처음부터 로컬을 본진으로.** UI는 항상 로컬(IndexedDB)을 보고, 서버는 동기화 대상으로 내려간다.

<AutoIframe
  src="/iframe/indexeddb-first.html"
  title="IndexedDB-first — 같은 읽기, 다른 경로"
/>

캐시는 "네트워크가 1순위"라는 전제 위에 덧대는 임시방편 — 무효화·로딩 상태·페이지네이션이 전부 거기서 파생된다. 로컬을 본진으로 뒤집으면 그 파생 문제들이 통째로 사라지고 "동기화" 하나로 응축된다.

신선했던 지점은 이게 all-or-nothing이 아니라 **난이도가 단계적으로 점프**한다는 것:

- 읽기 전용 = 재다운로드만. 충돌 없음. 지금 당장 가능.
- 쓰기 = optimistic + outbox로 대부분.
- 사용자별 분산 = 여기서부터 분산 시스템(Git 모델).

→ 읽기 전용 앱이면 오늘 시작할 수 있다.
