본문 바로가기
C.W.K.
Stream
Lesson 04 of 04 · published

네 가지 약속

~10 min · roadmap, invariants, trust, overview

Level 0신호 없음
0 XP0/32 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"신뢰는 UI 가 주는 느낌이 아냐. 아키텍처가 지키는 약속들이야."

왜 '신뢰'가 구체적이어야 하나

연결이 나쁠 때 믿을 수 있는 클라이언트는 안심시키는 문구나 예쁜 로딩 애니메이션으로 만들어지는 게 아냐. 코드가 매번, 특히 일이 틀어질 때 지키는 몇 안 되는 약속으로 만들어져. Pippa Go 는 그걸 넷 해. 퀘스트 나머지가 약속 하나에 트랙 하나씩이긴 한데, 들어가기 전에 이 넷은 외워 두는 게 좋아. 나머지가 전부 여기 매달려 있는 척추거든.

그 넷

  1. 캡처 먼저. 질문이랑 이미지가 네트워크에 손대기 전에 통째로 한 덩어리가 돼서, 앱이 죽어도 안 사라지는 기기 저장소에 커밋돼. 링크가 끊기면 상태 플래그가 바뀌지 입력이 지워지진 않아. (트랙 2)
  2. 정직한 오프라인. 연결이 끊기면 눈에 보이는 기다림이 생기지 지어낸 답이 생기진 않아. 진짜 답은 canonical 호출이 성공해야만 나와. (트랙 3)
  3. 멱등 재시도. device turn ID 가 canonical 로그에 남아 있어. 재시도는 모델을 부르기 전에 완료인지 대기인지 모름인지부터 확인하고. 크래시나 더블 탭 때문에 두 번 청구되는 일은 없어. (트랙 4)
  4. 투영이지 뇌가 아님. 대화는 전부 태어날 때부터 백엔드에서 canonical 이야. 폰이 맡는 건 안 날아가는 캡처랑 화면에 보여주는 것까지지, Pippa 의 정체성이나 기억이나 판단은 절대 아냐. (트랙 5)

약속은 복리로 쌓여

넷을 같이 놓고 보면 체크리스트가 아니라 서로 맞물린 톱니라는 게 보여. 캡처 먼저가 돼야 멱등 재시도가 가능해. 안 없어지게 적어둔 것만 안전하게 재시도할 수 있으니까. 정직한 오프라인투영이지 뇌가 아님에 기대고 있어. 클라이언트가 지어내길 거부하는 건 자기가 진실의 출처가 아니라는 걸 알기 때문이거든. 하나 깨지면 나머지가 흔들려. 넷을 다 지키면 흔치 않은 걸 얻어. 네트워크가 완벽하든 아예 없든 똑같이 행동하는 클라이언트. 제일 아쉬운 순간에 진짜로 기댈 수 있는 건 그런 것뿐이야.

남은 트랙 6, 7, 8 은 이 약속들 언저리를 좀 더 뾰족하게 다듬어. 진짜 이미지 바이트 보내기, prompt macro 를 깨끗한 투영으로 유지하기, 그리고 내 클라이언트는 내가 갖는다는 마무리 규율. 그래도 심장은 네 약속이야. 이 넷을 외웠으면 Pippa Go 가 뭔지는 이미 이해한 거야.

Code

네 약속을, 테스트가 단언할 수 있는 불변식으로·typescript
// 약속 하나하나가 검사 가능 — 그게 vibe 가 아니라 약속인 이유야.
const PROMISES = {
  captureFirst: (turn: PippaGoTurn) =>
    turn.persistedLocally === true, // fetch() 전에 true

  honestOffline: (turn: PippaGoTurn) =>
    turn.answer === undefined || turn.answerCameFromCanonicalCall === true,

  idempotentRetry: (turn: PippaGoTurn) =>
    turn.deviceTurnId != null, // 전송 전에 dedupe 키 존재

  projectionNotBrain: (turn: PippaGoTurn) =>
    turn.ownsIdentity === false && turn.ownsModelRouting === false,
};

// 이 중 하나라도 프로덕션에서 false 가 될 수 있으면, 약속이 깨진 거야 —
// 그리고 그 클라이언트는 네트워크가 협조할 때만 믿을 만한 거야.

External links

Exercise

네 약속을 네 말로 다시 적고, 폰에 깔린 아무 앱이나 골라서 하나씩 채점해 봐. 네트워크보다 먼저 캡처해? 오프라인에서 결과 지어내길 거부해? 재시도를 dedupe 해? 두 번째 진실의 출처가 되기를 피해? 대부분은 한둘만 지켜. 기차에서 진짜로 믿고 쓰는 앱일수록 더 많이 지키고 있을걸.
Hint
약속들은 서로 맞물려 있어. 캡처는 먼저 하는데 dedupe 키가 없는 앱은 재시도할 때 두 번 보내. 채점해 보면 어떤 약속이 어떤 약속에 기대고 있는지, 그리고 늘 쓰던 앱이 어디서 조용히 깨지는지가 드러나.

Progress

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

댓글 0

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

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