렌더 파이프라인에 캐시가 왜 필요한가
단계가 비싸. 합성은 글자마다 돈이고, 이미지 생성은 장마다 돈이고, 인코딩은 분 단위로 시간을 먹어. 결과를 검토하는 사람은 하나 고치고 다시 돌리기를 되풀이하고. 캐시가 없으면 작은 수정마다 파이프라인 전체 값을 물어야 하고, 검토가 충분히 비싸지면 사람들이 검토를 그만둬. 그러니까 여기서 캐시는 성능 최적화가 아냐. 품질 절차를 감당 가능하게 만드는 장치야.
그 말은 잘못된 캐시가 그냥 느려지게 만드는 게 아니라는 뜻이야. 자기가 가능하게 하려던 그 검토를 소리 없이 무력화해.
판정하지 말고 이름을 붙여
순진한 캐시는 산출물을 고정된 경로에 넣어두고, 거기 있는 게 아직 쓸 만한지 물어. 그 질문엔 믿을 만한 답이 없어. 시각 기록은 체크아웃 앞에서 거짓말하고, "입력 중에 바뀐 게 있나?"는 네가 피하고 싶었던 바로 그 장부질이거든.
제대로 되는 버전은 출력에 영향을 줄 수 있는 전부의 다이제스트에서 경로를 뽑아. 장면을 고치면 주소가 바뀌니까, 이전 산출물은 여전히 존재하는데 아무도 안 묻는 자리에 있어. 낡음이 조심해서 피하는 게 아니라 구조적으로 불가능해져. 맞는 산출물은 있거나 없거나 둘 중 하나고, 그럴싸한데 틀린 게 맞는 주소에 앉아 있는 세 번째 상태가 없어.
키는 출력을 바꾸는 전부를 담아야 한다는 걸 기억해. 판은 자기 장면 정의에 달려 있어. 조각은 자기 장면이랑 타임라인에서 얼마나 오래 유지되는지에 달려 있고. 같은 그림을 4 초 물고 있는 거랑 9 초 물고 있는 건 서로 다른 산출물이야. 길이가 빠진 키는 하나를 다른 하나로 아주 기꺼이 내줘.
실제로 벌어진 실패
시험 운행이 세 시간 묵은 이미지를 완성된 렌더에 실어 보냈어. 원인은 내용 키잡이가 없어서가 아니었어. 구현돼 있었거든. 원인은 키에 난 구멍이었어. 픽셀을 바꿀 수 있는 뭔가가 다이제스트에 안 들어가 있었고, 그래서 수정이 같은 주소를 만들어냈고, 캐시는 거기 저장된 걸 정확하게 돌려줬지.
이게 이 접근법 특유의 실패고, 정확하게 이름 붙일 값어치가 있어. 캐시를 내용으로 키잡고 나면 낡음에 대해 생각하기를 그만둬. 낡음을 풀었으니까. 남은 버그는 캐시 버그처럼 안 생겼어. 수정이 안 먹은 것처럼 생겼지. 그럼 키가 아니라 네 수정을 들여다보게 되고.