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

run vs release

~11 min · run, release, versioning, model

Level 0Empty Shelf
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"하나는 model 이 뭐라 했나를 물어. 다른 하나는 오늘 뭘 보여주나를 물어."

명사 둘, 질문 둘

Recall 은 transcript 를 아주 다른 일을 하는 일급 대상 둘로 쪼개. 각각이 어느 질문에 답하는지만 알면 데이터 모델 전체가 딱 맞아 들어가.

  • run 은 답해: "이 model 이, 이 설정으로, 이 source 바이트에 정확히 뭘 돌려줬나?" 얼린 증거야. 절대 안 바뀌어.
  • release 는 답해: "지금 제품이 어느 버전의 텍스트를 보여주고, 요약이랑 검색을 파생하나?" 버전이야. 교정하면 바뀌어.

이건 같은 행에 붙인 두 이름이 아냐. 규칙이 다른 별도 테이블에 살아. run 은 한 번 쓰고 봉인해. release 는 '이게 이 영상의 지금 최선 텍스트야' 라고 말하며 옮겨 다니는, 번호 붙은 포인터고.

run 하나, release 여럿

여기 중요한 관계가 있어. 불변 run 하나가 시간이 지나면서 여러 release 밑에 앉을 수 있어. model 이 영상을 한 번 전사했다고 치자(그게 run). 그다음 이름을 잘못 들은 걸 발견해서 교정했고, 그게 release v2 를 만들었어. 나중에 타임스탬프를 고쳤고, 그게 release v3. run 은 꿈쩍도 안 했고 release 만 쌓인 거야. 어느 순간이든 영상당 정확히 한 release 가 current 로 표시되고, 그게 검색이랑 요약이 쓰는 거야.

버전 관리에 빗대면 쉬워. run 은 불변 commit 이야. 정확히 뭐가 캡처됐는지를 남긴 영구 기록. current release 는 최신 좋은 버전으로 옮겨 다니는 branch 포인터 같은 거고. 언제든 raw commit 으로 걸어 돌아갈 수 있고, 언제든 '지금 HEAD 가 어느 버전이야?' 를 물을 수 있어. 질문 둘, 답 둘, 헷갈릴 일 없고.

그냥 텍스트를 편집하면 안 돼?

'그냥 텍스트 편집' 은 두 질문을 mutable blob 하나로 뭉개서 답을 둘 다 날려버리거든. 제자리에서 편집하면 model 이 원래 뭘 돌려줬는지(run 이 사라짐), 텍스트가 어떻게 진화했는지(버전이 사라짐) 못 말해. run 은 얼리고 release 는 버전을 매기니까, Recall 은 '기계가 실제로 뭐라 했나' 도, '지금 뭘 보여주나' 도, '거기서 여기까지 어떻게 왔나' 도 한꺼번에 답할 수 있어. 다음 레슨이 교정의 순간에 뭐가 일어나는지, 왜 덮어쓰지 않고 분기하는지 보여줘.

Code

밑엔 얼린 run, 위엔 버전 있는 release·sql
-- 증거: (video, source, config) 당 행 하나. 봉인됨.
-- transcript_runs(run_id, video_id, raw_response, ...)  [불변]

-- 제품 진실: 영상당 버전 여럿, 하나가 current.
CREATE TABLE transcript_releases (
  release_id     TEXT PRIMARY KEY,
  video_id       TEXT NOT NULL,
  run_id         TEXT NOT NULL,     -- 어느 증거에서 파생됐나
  release_number INTEGER NOT NULL,  -- v1, v2, v3 ...
  content_sha256 TEXT NOT NULL,     -- 이 버전 텍스트의 hash
  is_current     INTEGER NOT NULL,  -- 영상당 정확히 하나 =1
  UNIQUE (video_id, release_number)
);

-- run  = "model 이 뭐라 했나?"      (절대 안 바뀜)
-- release = "지금 뭘 보여주나?"     (v1 -> v2 -> v3)

External links

Exercise

네 일에서 'current value' 를 가지고 시간에 따라 갱신되는 record 를 하나 잡아. 문서, config, 프로필 같은 거. 그걸 두 질문 모델로 쪼개 봐. 원래 캡처된 것의 불변 증거는 뭐고, 그 위에 얹을 버전 있는 'current' 계층은 뭐야? 테이블 둘(또는 모양 둘) 을 스케치하고 '정확히 하나만 current' 가 어디에 사는지 표시해. 그 분리 덕분에 제자리 편집으로는 못 답할 어떤 질문에 답할 수 있게 되는지도 대보고.
Hint
최신 값만 볼 수 있다면 run 과 release 를 붙여놓은 거야. 답은 계층 둘이고. 캡처된 것의 append-only 기록, 그리고 지금 최선 버전을 가리키는 버전 있는 포인터. 그렇게 하면 '원본에서 지금까지 어떻게 왔나?' 에 답할 수 있게 돼. 계층이 둘 다 있어야만 답이 나오는 질문이지.

Progress

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

댓글 0

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

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