일부러 빼놓은 능력
큐가 차면 소비자를 부르게 돼 있어. 큐가 원래 그런 물건이고, 그걸 만드는 게 자연스러운 다음 커밋이야. 작업은 기다리고 있고, 처리 능력은 놀고 있고, 작은 워커 루프 하나면 그 간격이 닫히니까. 이 작업장엔 그 워커가 없고, 그 부재를 미구현 기능으로 남겨두는 대신 불변식으로 적어놨어.
문장이 중요해. "집필은 아직 자동화 안 됐다"가 아냐. 타이머도, 큐 소비자도, 재시도 루프도, 서버 쪽 실행기도 집필을 개시할 수 없다. 이렇게 적으면 경계에 날이 서고, 제안을 거기 대볼 수 있어. 적어두는 이유가 통째로 그거고.
왜 설정이 아니라 불변식이냐면
자동 조종을 달라고 오는 사람은 없어. 오는 건 각각 그럴듯한 요청들의 연속이야. 중간에 죽은 실행을 재시도하자, 반쯤 끝난 작업을 남기고 세션이 터진 건 누가 봐도 안 좋으니까. 하나 끝나면 큐의 다음 걸 시작하자, 처리 능력이 바로 거기 있으니까. 밤새 배치를 돌리자, 새벽 세 시엔 클릭할 사람이 없고 작업은 이미 승인됐으니까.
하나씩 떼놓고 보면 다 방어 가능하고, 합치면 퇴적으로 조립된 자동 조종이야. 기본값은 바뀌고, 불변식은 논쟁을 부르지. 불변식으로 만든다고 논의가 금지되는 게 아냐. 논의가 체크박스 얘기가 아니라 경계 얘기가 되도록 강제하는 거야.
실제로 지키고 있는 게 뭐냐면
둘이고, 갈라놓을 값어치가 있어.
첫째는 제일 값어치 높은 순간의 판단이야. 작업한 사람이 맥락을 쥐고 있고, 뭘 만들어낸 직후가 그것에 관한 질문에 답하기 제일 싼 때야. 사람 없이 도는 실행은 아무 질문에도 답을 못 해. 물어볼 사람이 방에 없으니까.
둘째는 이중 집필의 부재고. 세션 도중에 죽은 작업은 눈에 보이는 상태를 남기고 기다려. 사람이 결정해서 이어가거나 다시 돌리는 거지, 조용히 재시도되는 일은 없어. "쓰기 전에 터졌다"랑 "쓰고 나서 터졌다"를 구별 못 하는 재시도는 신나서 작업을 두 번 만들어내고, 두 번째 사본은 첫 번째랑 똑같이 정당해 보이거든.