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

모르면 모른다고

~12 min · firelink, honest-state, staleness, three-valued

Level 0식은 재
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"'모르겠다'도 답이야. 그 말을 못 하는 시스템은 대신 거짓말을 해."

참·거짓 하나론 부족해

'떠 있어?' 를 담는 제일 쉬운 방법은 참이냐 거짓이냐지. 그게 함정이야. 진짜로 다른 사실 셋을 조용히 뭉개거든. running 은 떠 있고 확인까지 됐다는 뜻. stopped 은 진짜 죽었다는 뜻. missing 은 아예 안 깔렸다는 뜻이고. 그리고 참·거짓엔 자리가 없는 네 번째가 있어. unknown, 그러니까 probe 가 답을 못 냈다는 것. 둘 중 하나로 우겨넣으면 거짓말을 고르게 돼. 모르는 걸 죽었다고 하거나 살았다고 하거나. 둘 다 언젠가 딱 나쁜 순간에 누군가를 헷갈리게 만들어.

Firelink 는 넷을 다 갈라놔. 'host 에 못 닿았다' 는 '서비스가 죽었다' 가 아냐. 'health 경로가 시간 초과됐다' 는 '앱이 안 깔렸다' 가 아니고. 각각 다음에 할 일이 다르니까, 뭉치면 사람이 필요로 하는 정보가 사라져.

본 건 전부 언제 봤는지를 달고 다녀

시각이 없는 관찰은 소문이야. census 가 남기는 사실마다 measured_at 이랑 어느 probe 가 봤는지가 붙어 있어. 그래야 읽는 사람이 뭘 봤는지만이 아니라 언제, 뭘로 봤는지까지 알지. 오래된 값이 틀린 건 아니야. 다만 자기 나이를 밝혀야 해. '8분 전 기준으로 살아 있음' 이랑 '방금 확인했는데 살아 있음' 은 전혀 다른 말이거든. 그 차이를 감추는 게 대시보드가 슬금슬금 소설이 되는 방식이야.

남이 본 걸 내가 본 것처럼 걸치지 마

이 정직함은 주인 경계를 넘어서도 그대로야. Firelink 는 Watchfire 가 본 host 도달 여부를 읽기 전용으로 얹어 보여줄 수 있어. 대신 Watchfire 가 언제 본 건지 그 시각을 그대로 달고, Firelink 가 방금 잰 것처럼 꾸미지 않아. 남의 관찰을 빌려다 내 실시간 측정인 척하는 건, 이 값이 얼마나 신선하고 누구 것인지에 대한 미묘한 거짓말이거든. Watchfire 것은 Watchfire 것으로, 그쪽 시각을 붙여서 보여줘. 사실 하나에 주인 하나는 적힌 것뿐 아니라 본 것에도 그대로 적용돼.

'모르겠다' 한테도 제 자리를 줘. 그리고 본 것마다 언제 누가 봤는지 도장을 찍어. 살았다 죽었다만 말할 수 있는 모델은 애매한 상황을 전부 자신만만한 거짓으로 바꿔. '2분 전 이 probe 로 봤는데 알 수 없었다' 라고 말할 수 있는 모델은 사람이 그 값을 제 무게대로 저울질하게 해줘.

Code

상태 넷, 시각 기록, 그리고 출처를 밝히는 빌린 값·typescript
type ServiceState = "running" | "stopped" | "missing" | "unknown";
// unknown != stopped != missing. Each implies a different next step.

type Observation = {
  state: ServiceState;
  measuredAt: string;   // WHEN — an observation with no timestamp is a rumor
  source: string;       // WHICH probe produced it
  why?: string;         // for 'unknown', the specific reason
};

// A borrowed observation from another owner keeps ITS timestamp and name:
type WatchfireOverlay = {
  reachable: boolean;
  observedAt: string;   // Watchfire's own time, NOT a fresh Firelink probe
  owner: "watchfire";   // shown as theirs, never as ours
};
// Presenting borrowed data as your own live measurement is a lie about freshness.

External links

Exercise

네 주변에서 상태가 둘뿐인 표시를 찾아봐. 살았다/죽었다, 정상/오류, 온라인/오프라인 같은 거. 사실은 '알 수 없음' 이 맞는 상황을 하나 짚어봐. 체크가 못 돌았거나, 시간 초과가 났거나, 연결이 끊겼거나. 지금은 그걸 둘 중 어느 쪽으로 거짓말하고 있어? 그다음 '모름' 을 따로 두고 언제 봤는지도 붙이게 고쳐보고, 그걸 본 사람의 행동이 어떻게 달라지는지 적어봐.
Hint
대개 거짓말은 '확인을 못 했을 뿐인데 죽었다고 뜨는' 쪽이야. 그러면 사람들이 '죽었다' 를 무시하게 길들여지지. 그러다 진짜 장애가 probe 딸꾹질이랑 똑같이 보여서 같이 묻히고. '모름' 을 따로 두는 게 '죽었다' 의 무게를 지켜줘.

Progress

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

댓글 0

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

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