AI 에이전트 재실행, 끝난 API 작업도 취소될까?
고객 레코드는 만들어졌는데 응답을 받기 전에 연결이 끊겼다. 에이전트가 같은 API를 다시 호출하면 고객이 두 번 등록될까?

- LangGraph의 과거 체크포인트 재생은 그 뒤의 API 호출을 다시 실행할 수 있다.
- Jukebox의 Python 구현은 명시적으로 보류한 파일 쓰기를 확정 전에 버릴 수 있다.
- 이미 처리된 외부 요청의 중복 방지는 해당 서비스의 멱등성 규칙으로 판단해야 한다.
체크포인트는 외부 서비스의 시간을 되감지 않는다
에이전트를 이전 상태로 돌렸다고 이미 보낸 API 요청까지 취소되는 것은 아니다. LangGraph 공식 문서의 replay는 선택한 체크포인트 뒤의 노드를 다시 실행한다. 그 안에 들어 있는 모델 호출과 API 요청도 재실행 대상이다.
예를 들어 고객 레코드를 만드는 단계 뒤에서 실패했다면, 그 단계보다 앞선 체크포인트를 선택하는 것과 이미 만들어진 레코드를 삭제하는 것은 다른 작업이다. update_state 역시 원래 이력을 없애지 않고 새 분기를 만든다. ‘과거 상태로 돌아가기’를 외부 시스템까지 포함한 취소 버튼으로 해석하면 안 되는 이유다.
Jukebox는 쓰기 전에 파일 내용을 보류한다
최근 공개된 Jukebox-OS는 에이전트 작업에 기록·확정·폐기 절차를 붙이는 실행기를 표방한다. 제작자의 빠른 시작 예제는 파일 내용을 먼저 보류하고 검증 결과에 따라 commit 또는 rollback을 호출한다.
Python 구현에서 stage_file_write는 내용을 메모리에 둔다. commit은 파일을 순서대로 쓰고, rollback은 보류 목록을 비운다. 이미 쓴 파일을 원래 내용으로 복원하는 경로는 없으며, 롤백 기록 파일도 남는다. 이 범위는 2026년 10월 26일 기준 공개된 Python 0.1.0 코드에 해당한다.
‘보류 중’과 ‘이미 완료’는 다른 상태다
복구 기능을 고를 때는 무엇을 기록했는지보다 실제 변경이 어디까지 진행됐는지를 먼저 구분해야 한다. 다음은 두 구현과 외부 API의 역할을 나눈 것이다.
| 현재 상태 | 다음 판단 |
|---|---|
| 파일 내용을 보류만 했다 | 확정 전에 폐기할 수 있는지 본다. |
| 외부 작업이 완료됐다 | 취소가 필요한지, 결과를 유지하고 진행할지 결정한다. |
| 요청 후 응답이 끊겼다 | 재시도가 새 작업으로 처리되는지 공급자 규칙을 확인한다. |
새 실행을 시작하는 기능, 아직 하지 않은 일을 버리는 기능, 이미 끝난 일을 취소하는 기능은 각각 다른 상태를 다룬다. 하나의 ‘롤백 지원’ 표시만으로 세 기능을 모두 갖췄다고 판단할 수 없다.
같은 요청임을 외부 서비스가 알아야 한다
Stripe의 멱등 요청은 외부 작업을 다루는 구체적인 예다. API v1은 실행이 시작된 요청의 상태 코드와 응답을 키에 연결해 저장하고, 같은 키로 재시도하면 저장된 응답을 돌려준다. 따라서 연결 오류 뒤 같은 작업을 다시 요청할 때 중복 생성을 막을 수 있다.
같은 키가 중복 요청을 영구히 막아 주지는 않는다. Stripe는 최소 24시간이 지난 키를 제거할 수 있으며, 제거된 키를 다시 쓰면 새 요청으로 처리한다. API v1에서 같은 키의 매개변수가 달라지면 오류가 난다는 조건도 있다.
에이전트 재개 지점을 고른 다음에는 그 뒤의 쓰기 작업마다 같은 요청을 식별할 수 있는지 확인해야 한다. 이미 완료된 일을 취소하려는 것인지, 응답을 잃은 일을 안전하게 재시도하려는 것인지부터 정하면 필요한 기능도 명확해진다.