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

선택을 기억하되, 절대 지어내지 마

~9 min · persistence, default-profile, fail-loud

Level 0침묵
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"네가 고른 정확한 profile을 되살려. 아니면 다시 물어. 안 고른 목소리로는 절대 말하지 말고."

딱 골라서 말한 걸 저장해

profile로 Speak 하면 Bellows가 그걸 기억해. 그 profile을 default_profile로 써두는 거야. 딴 데 갔다가 페이지 리로드하고 서비스 재시작까지 하고 돌아와도, 마지막 선택이 그대로 기다려. 작은 거지만, 쓸 때마다 붙던 자잘한 재선택 세금을 없애줘.

중요한 건 '딱 골라서'야. Bellows는 네가 일부러 고르고 말한 profile을 저장해. 드롭다운에서 스쳐 지나간 게 아니라. 사고를 되살리는 건 아무것도 안 되살리는 것보다 나빠. 일부러 그런 것처럼 보이거든.

진짜 있을 때만 되살려

여기 날카로운 데가 있어. 저장된 profile은 그게 지금 활성 계정에 그대로 있을 때만 되살아나. 계정을 바꾸거나 binding을 은퇴시키면, 저장된 profile이 여기 없을 수 있어. 그 갈림길에서 Bellows는 그나마 될 것 같은 가까운 목소리로 손 뻗지 않아. 아무것도 안 되살리고 그냥 물어봐. 없는 binding은 명시적 unavailable 상태거든. 트랙 3에서 정면으로 만날 그 fail-loud 규칙이야.

왜 조용한 교체가 버그냐면

편한 버전을 상상해봐. 저장된 목소리가 없으니까 엔진이 가장 가까운 profile로 조용히 말해버려. 이제 사적인 메시지가 엉뚱한 목소리로 나갔는데 아무것도 경고를 안 했어. 선택을 저장하는 요점은 통째로 '그' 선택에 대한 충실함이야. 그걸 배신하는 교체는 아예 기억 안 하느니만 못해.

Code

있으면 복원, 없으면 물어봐·typescript
// Restore the last EXPLICIT choice -- but only if it truly exists here.
function resolveStartupProfile(
  saved: string | null,
  account: Account,
): Profile | null {
  if (!saved) return null;                     // nothing chosen yet
  const profile = account.bindings.get(saved); // exact match, active account
  return profile ?? null;                      // NOT available -> null, never a swap
}

// null means the UI asks you to choose again.
// It never quietly speaks in someone else's voice to be 'helpful'.

External links

Exercise

네 앱이나 쓰는 도구가 시작할 때 '되살리는' 설정을 하나 찾아. 두 가지를 물어봐. 일부러 한 선택을 되살리나 사고를 되살리나, 그리고 되살릴 게 더는 없을 때 뭘 하나. 두 번째 답이 '조용히 다른 걸 고른다'면, 누군가를 창피하게 만들 fidelity 버그를 찾은 거야.
Hint
위험한 경우는 행복한 복원이 절대 아니야. 저장된 값이 사라진 복원이지. 그때 코드가 정직함 대신 편함을 택했을 때.

Progress

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

댓글 0

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

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