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

Family Registry

~14 min · firelink, registry, reconciliation, drift

Level 0식은 재
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"적힌 걸 모으고, 본 걸 그 위에 얹어. 두 층이 서로인 척하게 두지 마."

층 둘, 하는 일도 둘

사실마다 주인이 하나면, 그 주인들 걸 쓸 만한 모양으로 엮는 방법이 필요하지. Firelink 는 하는 일이 뚜렷이 다른 층 둘을 써. FamilyRegistry 는 적혀 있는 진실을 모아. 직계 프로젝트 범위, roster, network ledger, operation 설정을 가져다가 관리 대상 모델을 만들어. 누가 있고, 뭐라고 적혀 있는지. 그다음 FamilyReconciler 가 실제로 본 진실을 그 위에 얹어. disk, Git, GitHub, 돌아가는 상태를 probe 로 재서 census 스냅샷이랑 drift 목록을 만들지. 지금 진짜로 어떻고, 어디서 현실이 적힌 것과 어긋나는지.

그렇게 엮인 FamilyRegistry 하나를 나머지가 전부 읽어. census 도, API 도, WebUI 도, 런처가 받아가는 catalog 도, 작업 권한 판단도 다 같은 모델을 봐. 두 번째로 엮는 데도 없고, frontend 전용 목록도, 런처 전용 catalog 도 없어.

drift 는 이름이 붙은 목록이야

적힌 것과 본 것이 다른 층이니까, 둘 사이 틈이 그대로 데이터가 돼. drift 는 느낌이 아니라 세어놓은 목록이야. roster 에서 빠진 관리 repo. 없거나 서로 안 맞는 network 선언. 없거나 망가진 operation 설정. 적혀 있는데 안 깔린 서비스. 없는 GitHub repo. 알 수 없는 버전. 지금 이 클라이언트에선 못 여는 실행 대상. 하나하나가 허브가 그대로 보여줄 수 있는 이름 붙은 상태지, 손으로 파헤쳐야 하는 수수께끼가 아니고.

reconciler 는 혼자 고치지 않아

이게 신전이 불꽃이 안 되게 막는 규율이야. census 는 안에 든 프로젝트 트리를 훑지도, 뭘 지우거나 은퇴시키지도, 다시 쓰지도, 제품 의도를 짐작하지도 않아. drift 를 보고할 뿐 조용히 고치지 않아. 고치는 건 Add 가 맡은 birth 단계를 거치거나, Firelink 밖에서 아빠랑 내가 평소처럼 손보는 일이야. 보고 맞춰보는 건 허브 일이고, 정하고 고치는 건 사람이 신중히 하는 일이야. 자동으로 굴러가는 게 아니라.

적힌 진실과 본 진실을 두 층으로 갈라놓고, 둘이 어긋나면 이름 붙인 drift 로 내놔. 자동으로 고치지 말고. drift 를 조용히 '고치는' 시스템은 자기 가정에 맞춰 현실을 몰래 편집하는 시스템이야. drift 를 보고하는 시스템은 어느 쪽이 틀렸는지 사람이 정하게 해주고.

Code

적힌 걸 모으고, 그 위에 본 걸 얹는다·text
  direct-project scope --+
  roster metadata -------+
  network ledger --------+--> FamilyRegistry --> managed family model
  operation policy ------+        (declared truth, one owner per fact)

  managed family model + disk / git / github / runtime probes
                         --> FamilyReconciler --> census snapshot + DRIFT
                                (observed truth overlaid on declared)

  DRIFT is a typed, enumerated set, e.g.:
    - managed repo missing from roster
    - network declaration absent or contradictory
    - operational manifest missing or invalid
    - declared service not installed
    - github repo absent / version unknown
    - launch target unavailable on THIS client

  The reconciler REPORTS drift. It never auto-deletes, retires,
  rewrites, or guesses intent. Repair is an explicit, separate act.

External links

Exercise

네가 아는 작은 시스템으로 drift 목록을 만들어봐. 'config 에 적어둔 서버' 대 '실제로 닿는 서버' 같은 걸로. 서로 다른 상태를 최소 넷은 세워봐. '고장'말고 '적혀 있는데 안 닿음', '닿는데 안 적혀 있음', '두 번 적힘', '버전이 다름'처럼 이름을 붙여서. 그다음 각각을 기계가 알아서 고쳐도 되는지, 사람한테 알려야 하는지 정해봐. 절대 기계한테 안 맡길 것들이 뭔지 보일 거야.
Hint
절대 자동으로 안 고칠 것들은 '어느 쪽이 틀렸냐'가 판단인 것들이야. '닿는데 안 적혀 있음'은 깜빡한 서버일 수도, 침입자일 수도 있어. 기계가 한쪽으로 밀어붙이는 건 자기 몫이 아닌 결정을 내리는 거야.

Progress

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

댓글 0

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

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