"여러 기계에 걸친 작업에서 '두 번 돌았다' 는 드문 버그가 아니라 일상이야. 두 번이 한 번이 되게 설계해."
retry 는 평범한 날씨
명령 도중에 연결이 끊겨. worker 가 재시작하고 큐를 다시 집어. spinner 가 멈춘 것 같아서 사람이 버튼을 또 눌러. 이 중 어느 것도 edge case 가 아냐. 네트워크를 건너는 작업이면 다 겪는 일이야. operation 이 정확히 한 번 돌 때만 맞으면, 안 맞는 거야.
per-host lock: 기계 하나에 한 번에 mutation 하나
per-host mutation lock 은 두 operation 이 같은 Mac 에 동시에 손 못 대게 해. 업데이트랑 재부팅이 한 기계에서 뒤엉키면 안 되니까. 결정적으로 lock 은 전체 fleet 이 아니라 host 에 걸려. 그래서 독립된 기계들은 여전히 병렬로 돌아. 세상 전체가 아니라 부딪치는 지점만 줄 세우는 거야.
idempotency key: 같은 요청 두 번이 효과 하나
mutating 요청마다 idempotency key 를 달아. executor 는 이미 적용한 key 를 기억해. 그래서 다시 온 요청은, reconnect 든 retry 든 double-click 이든, 또 하는 대신 첫 결과를 돌려줘. key 하나에 효과 하나. 요청이 몇 번 도착하든.
exit code 랑 따로 verify 할 수 있는 명령을 골라
exit code 는 거짓말할 수 있어. 명령이 이미 성공한 뒤 timeout 날 수도, 진짜 효과는 안 났는데 0 을 돌려줄 수도 있어. 그러니 성공을 따로 확인할 수 있는 operation 을 골라. 재시작 뒤엔 SSH 가 0 을 돌려줬다고 믿지 마. 서비스가 loaded 됐고 last-run 타임스탬프가 전진했는지 확인해. 반환값 말고 세상을 verify 해.