← 질문 목록
#53깊이 0
재시도가 있는 시스템에서 멱등성이 필요한 이유는?
같은 요청이 두 번 도착하기 때문이다. 응답만 유실돼도 클라이언트는 실패로 보고 다시 보내는데, 서버 입장에서는 새 요청과 구별되지 않는다.
- 1. 클라이언트에서 서버로: 결제 요청
- 2. 서버에서 클라이언트로: 처리 완료. 응답이 유실된다
- 3. 클라이언트에서 서버로: 실패인 줄 알고 재요청
- 4. 서버에서 클라이언트로: 같은 키다. 앞의 결과를 그대로 돌려준다
막는 방법은 요청마다 고유한 키를 받는 것이다. 서버가 그 키로 결과를 기록해 두면 두 번째 요청은 새로 처리하지 않고 앞의 결과를 돌려준다.
키를 언제까지 들고 있을지가 실무의 급소다. 짧으면 늦은 재시도가 중복 처리되고, 길면 저장소가 계속 늘어난다.
조회와 삭제는 원래 멱등이다. 문제는 생성과 갱신이고, 그중에서도 돈이 오가는 자리다.
추천 꼬리질문
관련 질문
- 분산 트랜잭션에서 Saga 패턴이 필요한 이유는?아키텍처 · 분산시스템Saga 패턴은 분산 트랜잭션의 원자성을 보장하기 위해 보상 트랜잭션을 사용하며, 이 과정에서 재시도 시 중복 처리를 막기 위한 멱등성이 필수적이다.
- 메시지 순서는 어디까지 보장되는가?아키텍처 · 분산시스템메시지 순서가 보장되지 않는 시스템에서 중복 처리나 순서 바뀜을 해결하기 위해 멱등성이 필요하다.
- 예약한 작업은 정말 한 번만 실행되는가?모바일정확히 한 번은 없고 최소 한 번뿐이라는 같은 전제 — 중복 실행을 견디는 쪽이 답이다.
- 호출 시간 제한은 무엇을 기준으로 정하는가?아키텍처 · 분산시스템호출 시간 제한으로 인한 재시도 요청이 발생할 때, 시스템 안정성을 위해 멱등성 보장이 필수적이다.
- 낙관적 락 충돌은 어떻게 재시도하는가?데이터베이스