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

NAS 가 바이너리를 소유해

~11 min · references, storage-ownership, tombstone, no-hoarding

Level 0Empty Shelf
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"재생성할 수 있는 건 전부 소유해. 못 하는 그 하나는 참조해."

쌓아두기 본능

엔진을 지을 때는 자기 완결적으로 만들고 싶은 강한 끌림이 있어. 엔진이라면 필요한 걸 다 소유해야지 싶은 거지. 영상을 자기 저장소로 복사해두면 완결되고, 이식 가능하고, 아무것에도 안 기대게 되잖아. Recall 은 그걸 거부해. 그리고 이 거부가 가장 깔끔한 선 중 하나야. 원본 미디어는 스토리지가 소유한다. Recall 은 경로, 메타데이터, hash, 그리고 자기가 파생하는 증거를 저장해 — 아카이브를 자기 DB 로 절대 복사 안 해.

쌓아두기의 값은 바로 쌓여. 몇 기가짜리 파일 수천 개를 방금 중복했으니까, 이제 저장하고 백업하고 동기화해야 할 아카이브가 하나 더 생긴 거야. 마지막 게 치명적이고. 사본이 둘이면 어느 쪽이 진짜냐는 질문이 상시로 따라붙거든. 트랙 2 가 동기화 폴더에서 받아들이길 거부한 바로 그 모호함이야. 자족감 하나 얻자고 그 버그 부류 전체를 들여온 셈이지.

훔칠 만한 뒤집기

Recall 이 실제로 뭘 쥐고 뭘 가리키기만 하는지 봐. 그 분리가 본능이랑 반대라서 볼 만해.

  • 증거, release, segment, index 는 소유해. 다 잃어도 다시 만들 수 있는 것들이거든. 다시 전사하고, 다시 투영하고, 다시 색인하면 되니까.
  • 원본 footage 는 참조만 해. 누구도, 영원히 다시 만들 수 없는 유일한 산물이니까. 그 파일이 사라지면 어떤 연산으로도 되돌릴 수 없어.

그게 뒤집기야. 엔진은 다시 지을 수 있는 건 전부 소유하고, 못 하는 그 하나만 참조해. 거꾸로 들리다가도 논리를 보면 이해가 돼. 대체 불가능한 물건은 job 을 돌리고, 스키마를 바꾸고, 쓰는 도중에 서비스 매니저한테 재시작당하기도 하는 애플리케이션 말고, 바이트를 안전하게 지키는 게 일의 전부인 소유자를 가질 자격이 있거든. 스토리지는 저장을 잘하고, 엔진은 의미를 잘 다뤄야 해. 자기가 다시 만들어낼 수 없는 그 하나를 엔진한테 맡기지 마.

tombstone: 기억이 파일보다 오래 살아

이 분리가 조용히 뭉클한 결과를 하나 낳아. 스캔을 돌렸는데 영상이 있던 자리에 더는 없으면, Recall 은 record 를 지우지 않아. 사라진 날짜와 함께 missing 으로 표시해둘 뿐이지. 나중 스캔에서 다시 찾으면 그 표시는 지워지고. 그동안에도 tombstone 이 붙은 그 영상은 검색도 되고 export 도 돼. 그냥 작업 큐에 못 넣고 live 소스 미디어로 못 열 뿐이야, 바이트가 없으니까.

기억 엔진한테 이게 무슨 뜻인지 한번 곱씹어 봐. 파일을 잃어도 기억은 지켜져. transcript 도, 타임스탬프도, 요약도, 뭐라고 했고 그게 언제였는지도 다 살아남아. 증거는 파생해서 소유했고 바이너리는 참조만 했으니까. 더 이상 갖고 있지도 않은 영상을 여전히 검색할 수 있고, 거기서 무슨 말을 했는지 정확히 읽을 수 있어. 그냥 볼 수만 없을 뿐이지. 이건 위로상이 아니야. 아키텍처가 두 종류의 상실에 대해 정직하고, 기록과 footage 가 같은 거라고 우기기를 거부하는 거야.

Code

바이트는 참조만, 의미는 소유·sql
CREATE TABLE videos (
  video_id       TEXT PRIMARY KEY,   -- 안정된 논리적 identity
  source_id      TEXT NOT NULL,      -- 어느 아카이브 root
  relative_path  TEXT NOT NULL,      -- 어디 사나 (참조)
  size_bytes     INTEGER,
  modified_ns    INTEGER,
  source_sha256  TEXT,               -- 바이트의 identity
  missing_since  TEXT,               -- tombstone: 언제부터 사라짐
  title          TEXT
  -- 여기 없는 걸 봐: 영상 바이트.
);

-- 소유 (재생성 가능): run, release, segment, fts, 요약
-- 참조 (대체 불가): 스토리지의 원본 footage

-- tombstone 된 영상은 검색 가능하고 export 가능하게 남는다.
-- 그냥 큐에 못 넣고 live 미디어로 못 열 뿐.
-- 기억이 파일보다 오래 산다.

External links

Exercise

네가 지은 시스템 중에 파일이나 외부 record 를 ingest 하는 걸 봐. 복사해 넣어, 아니면 참조해? 복사하는 것마다 물어봐. 잃으면 다시 만들 수 있어? 그렇다면 소유해도 돼. 아니라면 네 애플리케이션이 정말 그 대체 불가능한 물건의 적임 관리인인지, 그리고 '어느 사본이 진짜냐' 를 정하는 규칙이 뭔지 물어봐. 그다음 tombstone 을 설계해. 참조하던 소스가 사라지면 뭐가 살아남고 뭐가 불가능해져?
Hint
질문 두 개. 하나, 저장하는 것마다 다시 만들 수 있는지 물어봐. 다시 만들 수 있는 건 마음껏 소유해도 되고, 그렇지 않은 것의 유일한 관리인이 되는 건 아주 의심해봐야 해. 둘, 참조하던 게 사라지면 네 시스템이 record 를 지워? 아니면 없어졌다고 표시해? 지우면 파생된 기억까지 파일과 함께 버리는 거야. 근데 그건 서로 다른 두 상실이고, 그중 네가 어쩔 수 없이 떠안은 건 하나뿐이잖아.

Progress

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

댓글 0

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

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