← 질문 목록
#32깊이 0

재시도가 있는 시스템에서 멱등성이 필요한 이유는?

아키텍처 · 분산시스템기초장애 대응

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

응답이 오지 않았다는 사실만으로 서버가 처리하지 않았다고 알 수 없기 때문이다. 같은 의도의 요청이 다시 와도 추가 결제나 추가 생성을 만들지 않는 계약이 있어야 안전하게 재시도할 수 있다.

  1. 1. 클라이언트에서 서버로: 요청 내용과 새 멱등 키를 보낸다
  2. 2. 서버에서 저장소로: 호출자·키·요청 내용을 원자적으로 선점한다
  3. 3. 서버에서 저장소로: 업무 변경과 결과를 확정한다
  4. 4. 클라이언트에서 서버로: 같은 키와 같은 내용으로 재시도한다
  5. 5. 서버에서 클라이언트로: 앞서 확정한 것과 같은 의미의 결과를 돌려준다

키가 없다고 확인한 뒤 업무를 처리하고 나중에 키를 기록하면 틈이 생긴다. 같은 요청 두 개가 동시에 그 틈을 지나갈 수 있다. 키 선점과 업무 변경을 하나의 원자적 경계에 두거나, 외부 시스템도 같은 키를 받아 중복을 막게 해야 한다.

같은 키에 다른 요청 내용을 보내면 재시도로 취급하지 않는다. 이전 요청의 금액이나 상품과 비교해 불일치 오류를 내야 한다. 요청 본문만 해시해 중복을 추측하면 사용자가 똑같은 주문을 두 번 하려는 경우와 재시도를 구분하지 못한다.

키와 결과를 언제까지 보관할지도 계약이다. 클라이언트가 재시도할 수 있는 기간보다 짧으면 늦게 도착한 요청이 새 작업이 된다. 만료 시간, 자원 수명, 저장 비용을 함께 정하고 만료 뒤 동작을 문서화한다.

HTTP 메서드 이름만 보고 업무의 멱등성을 단정하지 않는다. DELETE를 여러 번 보내면 최종 자원 상태는 같을 수 있지만 응답 코드는 달라질 수 있다. 결제 취소처럼 외부 효과가 있는 작업은 메서드와 별개로 멱등 키와 상태 전이를 설계한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

재시도가 있는 시스템에서 멱등성이 필요한 이유는?