C.W.K.
Stream
Lesson 05 of 05 · published

저장 경로에 절대 없다

~10 min · local-first, outbox, offline, capture-contract

Level 0차가운 쇠
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"flare 한복판에 잡은 증상이 Office 가 깨어있는지에 의존하면 안 돼. 네트워크는 저장 경로에 절대 못 올라."

로컬 쓰기가 항상 먼저

캡처 계약엔 타협 불가 규칙 하나가 있어: 로컬 쓰기가 항상 먼저 커밋되고, 즉시 시각 확인이 뜬다. 아빠가 crumb 을 쓰면, 어떤 네트워크 시도가 시작되기도 전에 device-로컬 저장에 내려앉고 저장됨으로 보여. Office 도달성도 Pippa 가용성도 아빠와 잡은 생각 사이에 앉지 않아. 이건 불안정한 연결을 위한 부수 배려가 아냐 — 새벽 2시 flare 를 믿고 맡길 수 있는 도구와, '서버 도달 실패, 다시 시도' 를 어깨 으쓱하는 도구의 차이야.

outbox 상태 기계

그 보장 뒤엔 작은 상태 기계가 있어. 새 crumb 은 쓰이는 즉시 LOCAL_ONLY, 그다음 QUEUED, 연결이 되면 SYNCING, 서버가 durable 하게 확인하면 SYNCED. 사람 손이 필요한 방식으로 sync 가 실패하면, 조용히 사라지는 대신 FAILED_NEEDS_ATTENTION 이 돼. 결정적 규칙: 로컬 payload 는 idempotent 서버 확인 전엔 절대 삭제 안 돼 — 그래서 재시도가 crumb 을 절대 중복 못 만들고, 끊긴 연결이 절대 하나도 못 잃어.

네트워크는 임계 저장 경로에 절대 없어. device 가 먼저 커밋하고 확인하고, outbox 는 연결이 돌아오면 스스로 빠져. PWA 저장은 최종 아카이브가 아니라 staging 영역이야 — 그런데 office 가 durable 하게 넘겨받기 전엔 아무것도 거길 안 떠나고, Stream 은 항상 미동기화 개수를 보여서 staging 상태가 보이지, 숨지 않아.

왜 건강에선 이게 선택이 아닌가

Waystone 은 그린델발트의 죽은 호텔 네트워크에서 이걸 배웠고, Forge 는 더 날카로운 이유로 물려받아. 증상은 최악의 순간에 도착해 — flare 한복판, 반쯤 잠든 채, 안테나 하나짜리 대기실에서. 캡처가 왕복을 요구했다면, 기록할 가치가 가장 큰 바로 그 순간들을 도구가 떨궜을 거야. 그래서 저장 경로는 로컬이고 동기적이고, sync 는 배경의 나중 일이야. 중요한 뭔가의 캡처 표면을 지을 땐, 네트워크를 확인 뒤에 둬, 절대 앞에 두지 마.

Code

outbox 상태 기계·text
write crumb
   |
   v
LOCAL_ONLY  --(queued for send)-->  QUEUED
   |                                   |
   | (visual confirm shown NOW,        | (connection available)
   |  before any network)              v
   |                                SYNCING --(idempotent ack)--> SYNCED
   |                                   |
   |                                   | (error needing a human)
   |                                   v
   '------------------------> FAILED_NEEDS_ATTENTION

# 규칙: 로컬 payload 는 idempotent 서버 ack 전엔 절대 삭제 안 됨.
# 재시도는 중복 못 만들고; 끊긴 링크는 못 잃어.

External links

Exercise

신호 없는 엘리베이터에서 증상을 잡는다고 상상해. Forge 가 t=0(오프라인) 과 t=나중(신호 복귀) 에 뭘 하는지 따라가 봐. 어느 한 단계가 절대 네트워크를 기다리면 안 되나 — 그리고 내려가는 동안 crumb 은 어떤 상태에 있나?
Hint
t=0 에 crumb 은 LOCAL_ONLY 로 쓰이고 즉시 확인돼. 내려가는 동안 QUEUED 로 앉아있고, t=나중에 SYNCING 다음 SYNCED 로 가. 커밋-그리고-확인 단계가 절대 기다리면 안 되는 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.