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

vault가 ground truth야

~12 min · authority, vault, sync, source-of-truth

Level 0흔적
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

사람이 쓰는 곳이 원본이야

기억은 editor와 mobile sync와 live brain session에서 바뀌어. 그 모든 정상 경로가 만나는 곳이 live vault야. versioning 도구가 자기 편한 mirror를 원본이라고 부르는 순간, 사람의 실제 작업은 외부 입력으로 격하되고 충돌 때마다 도구가 이기게 돼.

원본이라는 말은 가장 정교한 저장소를 뜻하지 않아. 정당한 쓰기가 일어나는 곳을 뜻해. formatting이 조금 덜 예쁘고 history query가 느려도, 그곳에서 수정이 생기고 다른 장치로 전파된다면 authority는 거기에 있어.

projection은 유용해서 더 위험해

mirror는 검색과 diff와 Git commit에 훨씬 편해. Sync 내부 파일이나 editor lock을 건드리지 않고 안정된 tree를 만들 수 있거든. 그래서 어느 순간 mirror를 더 깨끗한 원본처럼 느끼기 쉬워. 바로 그 편리함 때문에 direction을 invariant로 써야 해.

허용되는 화살표는 live vault에서 mirror, mirror에서 derived index와 ledger뿐이야. 반대 화살표는 restore조차 직접 못 지나가. 과거 내용을 live vault에 되살리려면 mediated write라는 새 현재 사건으로 들어와야 해.

동기화 충돌도 authority를 바꾸지 않아

Sync conflict가 생겼다고 mirror가 심판이 되는 건 아니야. conflict file도 live truth가 낳은 사건이고 사람이 비교해야 할 두 흔적이야. derived system은 둘을 감지하고 보여줄 수 있지만 어느 쪽을 진실로 합칠지 자동으로 결정하면 안 돼.

이 경계가 있으면 rebuild가 쉬워져. mirror나 index가 이상하면 버리고 live vault에서 다시 만들면 돼. 반대로 live vault가 derived state에 의존하면 무엇도 안전하게 버릴 수 없고, cache 장애가 원본 장애로 승격돼.

권위 표를 먼저 써

구현 전에 data마다 누가 write하는지와 무엇에서 rebuild되는지 표로 써봐. rebuild source를 가리킬 수 있는 항목은 projection이고, 정상 write가 직접 도착하는 항목은 candidate authority야. 둘 다라고 적힌 행은 위험 신호야. 양방향 sync가 정말 필요하다면 conflict owner와 merge semantics가 별도 제품 수준으로 명시돼야 해.

ground truth는 가장 멋진 저장소가 아니라 정당한 쓰기가 처음 도착하는 곳이야. derived state는 언제든 버리고 그곳에서 다시 만들 수 있어야 해.

Code

source에서 projection을 만들고 역방향을 금지하기·python
from pathlib import Path
import shutil

source = Path("demo/live")
mirror = Path("demo/mirror")
source.mkdir(parents=True, exist_ok=True)
source.joinpath("memory.md").write_text("live truth\n")
mirror.mkdir(parents=True, exist_ok=True)
shutil.copy2(source / "memory.md", mirror / "memory.md")
assert source.joinpath("memory.md").read_text() == mirror.joinpath("memory.md").read_text()

External links

Exercise

시스템의 저장소를 authoritative, derived, cache 세 열로 분류해. derived나 cache에서 authoritative 쪽으로 향하는 화살표가 있으면 제거하거나 명시적 mediated command로 바꿔.
Hint
버리고 원본에서 다시 만들 수 있으면 derived야. 정상 사용자가 직접 쓰는 곳이면 authority 후보야.

Progress

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

댓글 0

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

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