~12 min · version-control, reproducibility, artifacts, determinism
Level 0불 꺼진 작업장
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
실행이 끝나면 거의 안 남아
에피소드 하나가 끝나면 작업 디렉터리에 묵직한 산출물이 잔뜩 남아. 길어 온 재료, 브리프, 대본, 이미지 판 수십 장, 오디오 테이크 수십 개, 영상 조각들, 최종 렌더, 그리고 그동안 내린 판정 전부가 적힌 긴 로그까지. 그중 커밋되는 건 없어. 저장소가 얻는 건 많아야 색인 파일의 한 줄이야.
근거는 한 문장이야. 에피소드는 도구 + 포인터로 재현된다. 재료는 이미 그걸 소유한 시스템에 제대로 살고 있어. 도구는 버전 관리되고. 그러니 그 사이의 전부는 파생물이고, 파생물은 저장할 게 아니라 다시 만들 수 있으면 돼.
불편한 부분
여기서 이 설계가 대부분의 엔지니어가 움찔할 소리를 해. 같은 포인터로 파이프라인을 다시 돌려도 바이트가 똑같은 영상이 안 나와. 음성 합성은 결정론적이지 않고, 생성 이미지도 그래. 두 번째 렌더는 조금 다른 영화야.
그리고 교리의 대답은 그게 편차가 아니라 기능이라는 거야. 그 변주를 없애야 할 결함이 아니라 받아들일 만한 걸로 쳐. 이건 진짜로 특이한 입장이고, 무작정 따라 하지 말고 이해할 값어치가 있어. 여기서 재현성이 무엇을 위한 건지 때문에 성립하거든. 이 파일이 저 코드에서 나왔다는 걸 증명해야 하는 사람이 없어. 감사 요구도, 규제상 재생도, 렌더 둘을 비교해서 진단할 버그도 없고. 사람들이 실제로 필요한 건 파일이 날아갔을 때 에피소드를 다시 만들 수 있는 능력이야. 조금 다른 테이크로도 그건 완전히 충족돼.
목적이 바뀌면 답도 같이 바뀌어. 렌더가 증거라면, 다른 게 의존하는 빌드 산출물이라면, 고객이 특정 버전에 돈을 냈다면, 비결정성은 못 받아들일 일이고 생성 자산 하나하나를 고정해야 해. 교훈은 강한 버전의 재현성 값을 치르기 전에, 네 재현성이 실제로 뭘 막고 있는지 물어보라는 거야.
다시 못 만드는 걸 저장해. 기준은 "큰 파일은 나쁘다"가 아냐. 그 산출물이 다른 어디에도 없는 정보를 싣고 있느냐야. 원재료, 결정, 판정은 그런 정보를 실어. 렌더, 빌드, 캐시는 아니고. 그건 이미 가진 것들의 함수야. 들고 있는 건 다시 계산할 수 있는 값에 저장 비용이랑 검토 비용을 치르는 거고.
Code
집 셋, 수명 셋·text
the repository = the TOOL git-tracked, permanent
pipeline.py, FORMAT.md, EPISODES.md
the owning system = the MATERIAL stored properly, already
conversations, journals, essays - fetched fresh at run time
the working dir = the OUTPUT never committed, disposable
brief, script, plates, takes, clips, render, run log
# reproducible = TOOL + POINTER
# not: reproducible = an archive of everything that ever happened
'다시 만들 수 있다'가 실제로 뜻하는 것·bash
# the render was deleted, the disk died, the directory was cleaned.
# recovery is not a restore - it is a re-run.
pipeline.py all --conversation <pointer-id>
# what comes back:
# the same argument, the same structure, the same script
# a slightly different set of speech takes
# slightly different generated art
#
# accepted deliberately. the thing being preserved is the ABILITY
# to make the episode, not a particular sequence of bytes.
네 저장소들이 지금 보관 중인 생성물을 훑어봐. 컴파일 결과, 잠금 파일, 픽스처, 스냅샷, 내보낸 데이터. 하나씩 '다른 어디에도 없는 정보를 싣고 있다'랑 '이미 커밋된 것들의 함수다'로 나눠. 두 번째 무리에 든 것마다 왜 보관 중인지 적어봐. 그 이유가 재현성인지, 편의인지, 아니면 아무도 감히 못 지워서인지도.
Hint
잠금 파일이 흥미로운 경계 사례고, 패턴으로 넘기지 말고 끝까지 생각해볼 값어치가 있어. 명세에서 파생되긴 하는데, 명세만으론 재현 안 되는 해석 결과를 고정하거든. 그러니까 다른 어디에도 진짜로 없는 정보를 싣고 있는 거야.
Progress
Progress is local-only — sign in to sync across devices.