축은 하나가 아니라 둘이야
"자동화됐다"는 독립적인 질문 둘을 한 단어로 뭉개고, 그 둘을 갈라놓는 게 이 경계를 그릴 수 있게 만들어. 이렇게 물어봐. 바로 이 실행이 벌어져야 한다고 누가 정했나, 그리고 도는 동안 그 사람이 그 자리에 있나.
디스패치 버튼을 누르는 사람은 둘 다 사람이야. 일정은 첫 번째가 기계고 두 번째는 대개 부재고. 결정은 설정 시점에 한 번, 일반적으로 내려졌고, 나중에 아무도 안 본 특정 실행에 적용되지. 그게 상시 위임이고, 일부러 주는 건 아주 정상적인 일이야. 실패는 실수로 주는 거고, 그건 "자동화됐다"를 성질 하나로 취급할 때 벌어져.
디스패치한테 허용된 것
허용된 동작은 좁고, 정확히 적을 값어치가 있어. 명시적인 사람의 동작이 있을 때, 수명 짧고 불투명하고 한 번만 쓰이는 티켓을 로컬 기계한테 넘겨. 그 기계가 보이는 대화형 세션을 열고, 맞는 프로젝트를 물리고, 첫 명령을 준비해둬. 그리고 멈춰. 그 세션은 세션이야. 사람이 읽을 수 있고, 끊을 수 있고, 따질 수 있어.
이건 프로세스 실행이지 자율 작업이 아냐. 구별이 살아남는 이유는 디스패치가 못 하는 것들에 있어. 어떤 항목을 돌릴지 안 정하고, 세션이 열린 뒤엔 아무것도 안 돌리고, 재시도 안 하고, 클릭 말곤 아무것도 이걸 발동시킬 수 없어.
티켓이 수명 짧고 불투명하고 일회용인 이유
성질마다 구멍을 하나씩 닫아. 수명이 짧다는 건 내일 새는 티켓은 값어치가 없다는 뜻이야. 불투명하다는 건 작업 서술을 안 싣는다는 뜻이고. 받는 쪽이 그걸 진짜 페이로드로 교환하니까, 티켓만 쥔 공격자는 뭘 하고 있는지 아무것도 알 수 없어. 일회용이라는 건 소비하면 무효가 된다는 뜻이야. "같은 실행을 두 번 재생했다"가 가능성에서 로그로 보이는 오류로 바뀌지.
그중 어느 것도 클릭하는 사람을 못 믿어서가 아냐. 디스패치 경로는 바깥 행위자가 세션을 시작시킬 수 있는 유일한 자리라서, 시스템에서 제일 좁은 표면이어야 하는 거야.