--- name: principle-make-operations-idempotent description: "충돌, 재시작, 재시도 중에 실행되는 명령, 라이프사이클 단계 또는 처리 루프를 설계할 때 적용. 부분 이전 실행에 관계없이 동일한 최종 상태로 수렴." disable-model-invocation: true --- # Make Operations Idempotent (작업을 멱등하게 만들기) 몇 번 실행되거나 이전 실행이 어디서 멈췄든 상관없이 올바른 상태로 수렴하도록 작업을 설계하세요. 모든 상태 변경 작업은 다음을 답해야 합니다: "이것이 두 번 실행되면 무슨 일이 일어나는가? 이전 실행이 중간에 충돌하면 무슨 일이 일어나는가?" **이유:** 명령, 라이프사이클 작업, 처리 루프는 충돌, 재시작, 재시도가 정상인 곳에서 실행됩니다. 부분 상태가 다음 실행의 결과를 변경하면, 모든 재시작이 디버깅 세션이 됩니다. **아이디어:** 이전 실행이 하려고 했던 것이 아니라 존재하는 상태에서 각 단계를 파생하세요. 현재 상태를 읽고, 목표와 비교하고, 차이만 적용하세요. 이런 방식으로 작성된 단계는 반복하기에 안전한데, 반복이 할 것이 남지 않았음을 발견하기 때문입니다. 잠금, 임시 파일, 반쯤 작성된 레코드 또는 주장된 작업과 같이 실행이 남기는 것은 다음 실행에 의해 오래된 것으로 인식 가능해야 합니다. 이전 실행이 멈출 수 있었던 곳 어디에서나 참으로 유지되는 증거로 오래됨을 판단하세요, 일반적인 경우에만이 아니라. 다음 실행이 판단할 수 없는 마커는 모든 충돌을 수동 정리로 바꿉니다. 예를 들어, 임시 경로에 작성하고 제자리로 이름을 바꾸거나, 생성 순서가 아니라 내용으로 아티팩트를 비교하세요. **테스트:** 1. 이것이 연속으로 두 번 실행되면 무슨 일이 일어나는가? 2. 이전 실행이 가능한 모든 지점에서 충돌하면 무슨 일이 일어나는가? 3. 재실행이 동일한 최종 상태로 수렴하는가? 어떤 답이 "남겨진 상태에 따라 달라진다"이면, 작업은 조정 단계가 필요합니다.