AI 에이전트가 단순 질의응답을 넘어 실제 행동을 수행하면서, 분산 시스템에서 수십 년간 다뤄온 복잡한 문제들이 수면 위로 떠오르고 있습니다. 특히 '멱등성(idempotency)'은 에이전트가 카드 결제, 주문 처리 등 금전적 비용이 발생하거나 되돌릴 수 없는 작업을 수행할 때 필수적인 개념으로 부상하고 있습니다. 멱등성은 한 번의 작업이든 여러 번의 작업이든 동일한 결과를 보장하는 특성을 의미하지만, 에이전트 시스템에서는 이 멱등성이 세 가지 다른 문제로 나타나 개발자들을 혼란에 빠뜨리고 있습니다.
기존 분산 시스템에서 멱등성은 동일한 요청을 재시도할 때 요청 페이로드(payload)가 동일하다는 전제하에 작동합니다. 예를 들어, 결제 요청이 실패하면 동일한 결제 정보를 다시 보내고, 서버는 멱등성 키(idempotency key)를 통해 중복 요청을 걸러냅니다. 그러나 AI 에이전트는 다릅니다. 에이전트가 요청을 생성하는 주체이기 때문에, 재시도 시점에 동일한 목표를 가지고 있더라도 추론 과정이 달라져 다른 페이로드를 생성할 수 있습니다. 예를 들어, 첫 번째 시도에서는 '로열티 크레딧을 제외하고 80달러 청구'를 결정했지만, 재시도에서는 '전액 100달러 청구'를 결정할 수 있습니다. 이처럼 에이전트의 비결정적 특성 때문에 기존의 요청 기반 멱등성 방식이 무력화됩니다.
저자는 에이전트 시스템에서 발생하는 멱등성 문제를 세 가지 계층으로 구분합니다. 첫 번째는 '시간상 중복되는 실행'으로, 웹훅(webhook) 재전송 등으로 인해 동일한 논리적 요청이 동시에 두 번 실행되어 불필요한 토큰(token) 소모와 경쟁 조건(race condition)을 유발하는 문제입니다. 두 번째는 '이중 청구'로, 결제 후 응답을 받지 못해 재시도하면서 고객에게 두 번 결제되는 심각한 문제입니다. 마지막 세 번째는 에이전트의 비결정성으로 인해 재시도 시 다른 요청이 생성되는 본질적인 문제로, 아직 명확한 해결책이 없는 영역입니다. 이 글의 저자는 첫 번째 문제를 해결하기 위해 오픈소스 에이전트 SDK인 스트랜즈(Strands)에 `idempotency_token` 기능을 추가하여, 중복 호출 시 새로운 실행을 시작하는 대신 기존 실행의 결과를 기다리도록 처리했습니다. 이는 에이전트가 실제 비용이 들거나 되돌릴 수 없는 작업을 수행할 때 발생할 수 있는 치명적인 오류를 방지하는 중요한 단계입니다.
