테마 전환

AI Agent 상태 머신 설계: 복잡한 워크플로를 Prompt 에만 맡기면 안 되는 이유

Easton editorial illustration: large Agent state recorder, coral failure beacon, checkpoint rewind handle, recovery status strip
8
핵심 상태 필드
state, event, guard, action, checkpoint, retry, compensation, terminal.
4
기록 객체
state snapshot, event log, trace, audit log.
3
복구 action
resume, retry, compensate.
数据来源: 이 엔지니어링 체크리스트는 LangGraph, Temporal, OpenAI Agents SDK, AWS Step Functions, Stately 공식 문서를 바탕으로 정리했습니다. API 이름과 제품 동작은 게시 후에도 공식 문서로 확인해야 합니다.

"LangGraph Persistence 문서는 checkpoint 를 thread-scoped graph state snapshot 으로 설명하고, conversation continuity, human-in-the-loop, time travel, fault tolerance 를 지원한다고 설명합니다."

보고서 Agent 가 5 단계에서 이메일을 보내기 직전에 실패했습니다. 운영 담당자가 작업을 다시 실행하자 Agent 는 1 단계부터 다시 시작했고, 새 보고서를 생성해 이전에 승인된 버전을 덮어썼습니다. 승인 상태는 사라졌고, 승인자의 서명 기록은 새 결과로 대체되었습니다. 첫 번째 보고서가 승인되었다는 사실을 증명할 로그도 남지 않았습니다.

이 문제는 데이터베이스 트랜잭션 rollback 도 아니고 메시지 큐 retry 도 아닙니다. Prompt 에는 “계속 처리”라는 한 문장만 남아 있었고, 모델은 전체 흐름을 다시 추론했습니다. 1~4 단계에서 이미 승인 API 호출, 보고서 생성, 임시 파일 쓰기 같은 부작용이 발생했다는 사실을 알지 못했습니다. 실패 지점은 5 단계였지만 부작용은 2 단계부터 시작되었습니다.

진짜 문제는 모델 능력이 충분한지 여부가 아니었습니다. 작업 진행 상태가 prompt 의 자연어 안에 숨겨져 있었고, 복구 가능한 상태 snapshot 이 없었습니다. Prompt 가 담고 있는 messages 는 모델 컨텍스트이지 실행 사실이 아닙니다.

이런 사고를 고치려면 prompt 에 “계속하기 전에 진행 상태를 확인하라”는 문장을 하나 더 넣는 것만으로는 부족합니다. 현재 노드, 이미 발생한 부작용, 다음 action, 실패 보상을 복구 가능한 상태표에 기록하는 편이 훨씬 안정적입니다.

사고의 핵심 지점

보고서 Agent 실행 흐름:

단계작업부작용idempotency
1 단계데이터 조회데이터베이스를 호출해 사용자 데이터를 조회idempotent (읽기 작업)
2 단계보고서 생성보고서 생성 도구를 호출해 PDF 생성idempotent 하지 않음 (파일 덮어쓰기)
3 단계승인 대기승인 요청을 보내고 사람의 승인을 기다림idempotent (API 지원)
4 단계승인 완료approve event 수신idempotent (상태 조회)
5 단계이메일 발송이메일 API 를 호출해 보고서 발송실패 (timeout)

실패 원인: 5 단계 이메일 발송이 외부 API rate limit 으로 timeout 되었고, 작업은 FAILED 로 표시되었습니다.

재실행 로직: prompt 에서 “현재 진행 상태”를 읽습니다. Prompt 에는 “승인됨, 계속 처리”라는 문장만 있습니다. 실제 실행: 1 단계부터 다시 시작 -> 2 단계에서 보고서 재생성(승인된 버전 덮어쓰기) -> 3 단계에서 다시 승인 요청 -> 5 단계 발송 성공.

비즈니스 영향: 승인된 보고서가 교체되고 승인 기록과 최종 전달된 보고서가 불일치했습니다. 사용자는 승인한 보고서와 받은 보고서 내용이 다르다고 항의했습니다. 승인 프로세스는 두 버전을 승인했지만 실제로 전송된 것은 하나뿐이었습니다.

안티패턴 식별표

당신의 Agent 가 아래 안티패턴에 해당하는지 확인해 보세요:

안티패턴모습숨은 위험수정 방법
진행 상태를 Prompt 에 씀”현재 3 단계” 같은 자연어 요약재시작 후 사라지고 복구 불가현재 노드를 State 필드에 기록
Trace 를 State 로 착각Trace 가 완전하면 상태도 있다고 생각Trace 는 다음 결정을 기록하지 않음State 가 다음에 할 일을 기록
idempotency 검사 없는 Retry실패하면 처음부터 재실행부작용이 중복 실행됨idempotency key + 이미 실행됨 검사
approval 후 Resume 검증 없음바로 계속 실행올바른 실행 지점으로 돌아가지 못함checkpoint + thread_id

1. 상태 머신 기초: State, Event, Transition, Guard, Action

상태 머신은 모든 Agent 에 필요한 아키텍처가 아닙니다. 단순 고객 지원 Q&A 는 messages 배열만으로 충분합니다. 하지만 여러 단계, 승인, 외부 시스템 호출, 실패 후 복구가 있는 복잡한 작업은 진행 상태를 명시해야 합니다.

1.1 핵심 용어 정의표

상태 머신의 기본 용어는 Stately 공식 문서를 따릅니다:

용어정의Agent 예시출처
State머신이 놓인 모드이며 하나의 의미적 의도에 대응INIT, PLAN_READY, TOOL_RUNNING, APPROVAL_PENDING, FAILED, COMPLETEDStately state machines
Event상태 변화를 트리거하는 외부 신호timeout, approve, reject, retry, resume, task_receivedStately state machines
Transition상태 사이의 허용 경로이며 결정적 매핑INIT -> PLAN_READY (event: task_received)Stately state machines
Guard/Condition어떤 상태에 들어가기 전 조건 검사예산이 충분해야 TOOL_RUNNING 진입Stately state machines
Actiontransition 중 실행되는 작업TOOL_RUNNING 진입 시 도구 호출Stately state machines
Checkpoint복구에 쓰이는 상태 snapshotLangGraph checkpointer 가 graph state 저장LangGraph Persistence

결정성 원칙: 같은 State + Event 조합은 모호성을 피하기 위해 하나의 next state 만 가리켜야 합니다. 유한 상태 집합: 상태 머신은 무한한 흐름도가 아니라 유한한 도달 가능 상태와 명확한 transition 규칙입니다.

1.2 Trace vs State vs Audit 비교표

Trace, Audit Log, State Snapshot 은 서로 다른 문제를 해결합니다:

개념해결하는 문제비즈니스 상태인가다음 단계를 결정하는가Agent 예시
Trace관측과 진단의 골격아니요아니요OpenAI Agents SDK trace (workflow_name, trace_id)
Audit Log컴플라이언스 기록과 감사 추적아니요아니요권한 모델 감사 필드 (actor, traceId, action, result)
State Snapshot다음 단계를 결정하는 현재 상태LangGraph checkpoint (현재 노드, 완료된 단계, 다음에 할 일)

핵심 차이는 분명합니다. Trace 는 “무슨 일이 있었는지” 관측하는 데 도움을 주지만 비즈니스 상태 자체는 아닙니다. Audit Log 는 감사와 추적을 위한 이력을 남깁니다. State Snapshot 은 “다음에 무엇을 해야 하는지”를 결정하며 복구의 핵심입니다. 셋은 서로 대체할 수 없습니다. Trace 가 있다고 State 가 있는 것은 아니고, Audit 이 있다고 복구 가능한 것도 아닙니다.

2. LangGraph 는 상태 지속성을 어떻게 다루는가

Checkpoint 는 prompt 안의 자연어 요약이 아닙니다. 복구 가능하고, 검사 가능하며, replay 가능한 상태 snapshot 입니다. LangGraph persistence 문서는 checkpoint 를 graph state snapshot 으로 정의하며, 전체 상태와 다음 실행 노드를 포함한다고 설명합니다.

2.1 Checkpointer 와 Thread State

핵심 메커니즘(LangGraph Persistence 공식 문서 기준):

  • Checkpointer: thread-scoped 상태 snapshot (graph state snapshot) 저장
  • Store: thread 를 넘는 장기 데이터(application-defined store) 저장
  • Thread_id: 특정 thread state 를 복구하는 유일한 진입점
  • 네 가지 용도: conversation continuity, human-in-the-loop, time travel, fault tolerance

LangGraph persistence 는 짧은 thread-scoped state 를 checkpointers 에 맡기고, thread 를 넘는 장기 데이터는 stores 에 맡깁니다. Checkpoint 는 state snapshot 과 application-defined store 를 포함합니다. Thread_id 는 복구 진입점이며, 같은 thread_id 를 사용하면 일시 중지 지점에서 이어갈 수 있습니다.

LangGraph checkpoint 에는 graph state, 다음 실행 노드 목록, checkpoint_id, timestamp, version 이 포함됩니다. 민감한 데이터는 checkpoint 에 무작정 넣으면 안 됩니다. 일부 graph state 필드에 민감 정보가 있을 수 있으므로 저장하지 않도록 명시적으로 설정해야 합니다.

2.2 Interrupts 와 복구 메커니즘

핵심 메커니즘(LangGraph Interrupts 공식 문서 기준):

  • interrupt(): graph node 내부에서 실행을 동적으로 일시 중지하고 graph state 를 저장한 뒤 외부 입력을 기다림
  • 복구 방법: 같은 thread_id 와 Command(resume=…) 사용
  • 일반 패턴: approval, review/edit, tool call review, human input validation
  • idempotent 부작용 경고: interrupt 이전 부작용은 idempotent 해야 함. 복구 시 interrupt 를 호출한 node 의 처음부터 다시 실행되기 때문

승인 대기는 모델이 “승인을 기다려야 한다”고 기억하기를 바라는 것이 아니라 상태 머신의 일시 중지 상태여야 합니다. 복구에는 같은 thread cursor 가 필요합니다.

복구 시 같은 thread_id 와 Command(resume=…) 를 사용합니다. idempotent 부작용은 안전한 복구의 전제 조건입니다. 승인 전에 외부 API 호출 같은 부작용이 있다면 반드시 idempotent 해야 합니다. 그렇지 않으면 복구된 node 가 API 를 다시 호출합니다.

3. 엔지니어링 비유: Temporal Durable Execution

긴 작업의 신뢰성은 새로운 문제가 아닙니다. Temporal durable execution 은 성숙한 비교 대상을 제공합니다.

3.1 Durable Execution 정의

핵심 개념(Temporal Durable Execution 공식 문서 기준):

  • Durable Execution 정의: workflow execution 이 실패, crash, 서비스 중단에도 state/progress 를 보존
  • Event History: 각 단계의 상태를 기록하고 실패 후 마지막 기록 event 에서 복구
  • 세 가지 특성: Resumable, Recoverable, Reactive

긴 작업의 신뢰성은 event history 와 복구 가능한 실행에서 나옵니다. 단일 프로세스 메모리나 prompt 컨텍스트에서 나오지 않습니다. Agent 상태 머신도 비슷한 메커니즘이 필요합니다. checkpoint/event log + 비즈니스 상태이지, 모델이 다시 추론하는 것만으로는 부족합니다.

Temporal 의 Event History 와 LangGraph 의 checkpoint 는 개념적으로 비슷합니다. 둘 다 실행 이력을 기록하고 실패 지점에서 복구할 수 있게 합니다. 차이는 Temporal 이 완전한 workflow 엔진이고, LangGraph 는 Agent 상태 관리 프레임워크라는 점입니다. Agent 개발자가 배울 점은 분명합니다. durable execution 은 구조화된 상태 이력이 필요하며, 프로세스 메모리나 모델 컨텍스트에 의존해서는 안 됩니다.

4. 상태표 설계 템플릿: 복사해 쓸 수 있는 Agent State Table

상태 머신 개념은 추상적입니다. 실제 적용에는 구체적인 상태 모델이 필요합니다. 아래에는 상태표, 이벤트표, 사고 기반 상태표 예시를 제공합니다.

4.1 상태표 템플릿(실행 가능한 단계 블록)

템플릿 구조:

StateEventGuard필수 ActionNext
INITtask_received없음컨텍스트 초기화, 시작 시간 기록PLAN_READY
PLAN_READYplan_generatedplan_valid실행 계획 생성, 도구 순서 기록TOOL_RUNNING
TOOL_RUNNINGtool_completedbudget_sufficient도구 호출, 결과 기록, 예산 업데이트APPROVAL_PENDING 또는 COMPLETED
APPROVAL_PENDINGapproveapproval_required승인 요청 전송, 승인자 기록COMPLETED
APPROVAL_PENDINGreject없음거절 사유 기록, 사용자 알림FAILED
FAILEDretryretry_count < maxidempotency 검사, 이전 checkpoint 로 되돌림TOOL_RUNNING 또는 APPROVAL_PENDING
COMPLETED없음없음완료 시간 기록, 리소스 정리Terminal

템플릿 설명: State 열은 도달 가능한 모든 상태(INIT, PLAN_READY, TOOL_RUNNING, APPROVAL_PENDING, FAILED, COMPLETED)를 정의합니다. Event 열은 transition 을 트리거하는 event(task_received, approve, reject, retry)를 정의합니다. Guard 열은 상태 진입 전 조건(budget_sufficient, retry_count < max)을 정의합니다. Action 열은 transition 중 필수 동작을 정의합니다. Next 열은 결정적 다음 상태를 정의합니다.

4.2 이벤트표 템플릿(상태표 보완)

템플릿 구조:

Event트리거 조건필요한 이전 상태이후 상태부작용 발생 여부
task_received사용자가 작업 제출INITPLAN_READY없음
plan_generatedLLM 이 실행 계획 생성PLAN_READYTOOL_RUNNING없음
tool_completed도구 실행 완료TOOL_RUNNINGAPPROVAL_PENDING 또는 COMPLETED있음(외부 API 호출)
approve승인자가 승인APPROVAL_PENDINGCOMPLETED있음(이메일 발송, 예산 차감)
reject승인자가 거절APPROVAL_PENDINGFAILED없음
retry실패 후 retry 요청FAILEDTOOL_RUNNING 또는 APPROVAL_PENDINGidempotency 검사 필요
timeout실행 timeoutTOOL_RUNNINGFAILED없음

이벤트표 설명: 필요한 이전 상태는 어떤 상태에서 어떤 event 를 받을 수 있는지 명확히 합니다. 부작용 여부는 어떤 event 에 idempotency 또는 compensation 이 필요한지 표시합니다.

4.3 사고 기반 상태표 예시(보고서 덮어쓰기 사고에서 도출)

전체 예시: 보고서 Agent 상태표(도입 사고에서 도출)

StateEventGuardActionNextidempotency/compensation 검사
INITtask_received없음thread_id 초기화, 시작 시간 기록QUERY_RUNNING불필요
QUERY_RUNNINGquery_completed없음데이터 조회, 결과를 state 에 저장REPORT_GENERATING불필요
REPORT_GENERATINGreport_generated없음보고서 생성, report ID 를 state 에 저장APPROVAL_PENDINGidempotency 검사: 보고서가 이미 있으면 생성 건너뜀
APPROVAL_PENDINGapprove없음승인자와 승인 시간 기록EMAIL_SENDING불필요
APPROVAL_PENDINGreject없음거절 사유 기록FAILED불필요
EMAIL_SENDINGemail_sent없음이메일 발송, email ID 기록COMPLETEDidempotency 검사: 이미 발송되었으면 건너뜀
EMAIL_SENDINGtimeoutretry_count < 3실패 기록, idempotency 검사EMAIL_SENDING (retry) 또는 FAILEDidempotency key: email_id + thread_id
FAILEDretryretry_count < maxidempotency 검사, 이전 checkpoint 에서 복구QUERY_RUNNING 또는 REPORT_GENERATING 또는 EMAIL_SENDINGcheckpoint 에 따라 복구 지점 결정
COMPLETED없음없음완료 시간 기록, 리소스 정리Terminal불필요

사고 복구 수정: 5 단계 실패(EMAIL_SENDING -> timeout) 후에는 QUERY_RUNNING 이 아니라 EMAIL_SENDING 에서 복구해야 합니다. checkpoint 는 현재 노드(EMAIL_SENDING), 완료된 단계(QUERY, REPORT_GENERATED, APPROVAL_APPROVED), 다음에 해야 할 일(EMAIL_SENDING)을 기록해야 합니다. 보고서 생성과 이메일 발송에는 idempotency key 가 필요합니다.

5. idempotency 와 compensation: 복구는 checkpoint 만으로 끝나지 않는다

checkpoint 가 있다고 모든 부작용을 안전하게 복구할 수 있는 것은 아닙니다. 복구에는 idempotency, 트랜잭션, compensation, 외부 시스템 상태 확인이 함께 필요합니다.

5.1 idempotency 와 compensation 개념

정의:

  • Idempotent: 여러 번 실행해도 결과가 같고 중복 부작용을 만들지 않음
  • Compensation: 이미 발생한 부작용을 되돌려 일관성을 회복
  • 트랜잭션 rollback: 원자적 작업이 실패 시 자동으로 되돌아감
  • 외부 시스템 상태 확인: 복구 전 외부 시스템 상태를 확인해 중복 작업을 방지

상태 일관성의 세 기둥: idempotency 식별자(action_id + schema_hash), state snapshot 체인(snapshot + prev_hash + delta), compensation action 등록(undo_op).

5.2 idempotency 와 compensation 판단 체크리스트

어떤 작업에 idempotency 와 compensation 이 필요한지 판단합니다:

작업 유형idempotency 필요 여부compensation 필요 여부idempotency key 설계compensation 방안
데이터 조회(부작용 없음)불필요불필요--
보고서 생성(파일 덮어쓰기)필요필요report_id + thread_id새 보고서 삭제, 승인 버전 복원
이메일 발송(외부 API)필요어려움email_id + thread_id일부 상황에서 정정 또는 취소 이메일 발송
재고 차감(데이터베이스)필요필요inventory_id + order_id재고 복구
티켓 생성(외부 시스템)필요필요ticket_id + thread_id티켓 종료
예산 차감(내부 상태)필요필요budget_id + thread_id예산 복구
승인 요청 발송(지속 부작용 없음)불필요불필요--

판단 로직: 외부 부작용을 만드는지 여부가 idempotency 필요성을 결정합니다. 되돌릴 수 있는 작업에는 compensation 이 필요합니다. 시스템 간 호출에서는 idempotency key 에 외부 시스템 식별자를 포함해야 합니다. 원자적 작업은 트랜잭션 rollback 을 사용할 수 있습니다.

복구는 checkpoint 만이 아닙니다. idempotency, 트랜잭션, compensation, 외부 상태 확인이 필요합니다. checkpoint 만 있으면 모든 부작용을 안전하게 복구할 수 있다는 말은 정확하지 않습니다.

6. Agent 작업 상태 체크리스트: 복구 가능 vs 복구 불가

모든 checkpoint 가 복구 가능한 것은 아닙니다. Terminal state 는 workflow execution 의 종료 상태입니다. 완료, 실패, timeout, cancelled 등이 해당합니다. Terminal state 는 이어갈 수 없고, 재실행하거나 보상해야 합니다.

6.1 상태 분류표

상태 유형복구 가능 여부복구 조건복구 방법예시
Failed가능retry_count < max이전 checkpoint 에서 복구도구 호출 timeout
Retry가능idempotency 검사 통과실패 노드에서 재실행이메일 발송 실패
Compensation부분 가능compensation 방안 존재undo_op 실행재고 차감 실패
Approval Pause가능approve/reject eventCommand(resume=…)승인 대기
Terminal불가없음복구 경로 없음COMPLETED, FAILED (retry_count = max)

상태 체크리스트 설명: Failed 상태는 retry_count < max 이면 retry 로 복구할 수 있습니다. Retry 상태는 idempotency 검사가 필요하며 실패 노드부터 재실행합니다. Compensation 상태는 보상 방안이 있으면 부분적으로 복구 가능합니다. Approval Pause 상태는 approve/reject event 로 복구합니다. Terminal State 는 복구 불가능하며, COMPLETED 또는 최대 retry 횟수에 도달한 FAILED 가 해당합니다.

7. 다음 읽을거리

상태 머신 설계는 출발점일 뿐입니다. 상태 모델링은 구체적인 비즈니스 시나리오와 맞아야 하며, 작업마다 상태 입도와 복구 전략이 달라집니다.

시리즈 내비게이션

관계링크
Human-in-the-loop Agent 설계: 어떤 단계에 사람 승인이 필요한가승인 일시 중지 세부 사항/blog/ko/posts/ai/20260707-human-in-the-loop-agent-approval-design/
Agent 비용 제어: model routing, 도구 예산, 실패 retry 설계예산과 retry 전략/blog/ko/posts/ai/20260707-agent-cost-control-model-routing-tool-budget-cache-retry/
LangGraph 상태 관리 실전: 2026 Agent 아키텍처 모범 사례LangGraph 상태 관리/blog/ko/posts/ai/20260424-langgraph-agent-architecture/
AI Agent 모니터링, 알림, 실패 복구: 로그에서 상태 머신까지모니터링과 복구/blog/ko/posts/ai/20260527-ai-agent-monitoring-recovery/
LangGraph vs AutoGen 상태 추적프레임워크 비교/blog/ko/posts/ai/20260526-langgraph-autogen-state-tracking/
Agent 평가 데이터셋과 회귀 테스트: 한 곳을 바꿨더니 전체가 망가지는 일을 피하는 법평가와 회귀 테스트예고, 시리즈 다음 글

외부 참고 자료

신뢰도 높은 출처:

출처신뢰도주제링크
LangGraph Persistence 공식 문서highCheckpointer, Store, Thread State, Checkpointhttps://docs.langchain.com/oss/python/langgraph/persistence
LangGraph Interrupts 공식 문서highinterrupt(), Command(resume=…), thread_idhttps://docs.langchain.com/oss/python/langgraph/interrupts
Temporal Durable Execution 공식 문서highEvent History, Durable Execution, Resumable/Recoverablehttps://docs.temporal.io/temporal
OpenAI Agents SDK Tracing 공식 문서highTrace, Span, workflow_name, trace_idhttps://openai.github.io/openai-agents-python/tracing/
AWS Step Functions State Machines 공식 문서highState Machine, Flow State, Task State, StartAt, Nexthttps://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html
Stately: State machines and statechartsmediumState, Event, Transition, Guard, Action, Hierarchyhttps://stately.ai/docs/state-machines-and-statecharts

상태 머신은 모든 Agent 에 필요한 구조는 아닙니다. 하지만 복잡한 작업은 진행 상태를 명시해야 합니다. 다음 단계는 더 많은 프레임워크를 들이는 것이 아닙니다. 비즈니스 시나리오에 맞는 State, Event, Transition, Guard, Action 을 설계하고, 작업 진행 상태를 prompt 의 자연어에서 구조화된 상태로 옮기는 것입니다.

복잡한 AI Agent 상태 머신 설계하기

복잡한 AI Agent 작업을 state, event, guard, action, checkpoint, retry, compensation, terminal state 로 나누어 진행 상태가 prompt 안에만 숨지 않도록 합니다.

⏱️ Estimated time: 45 min

  1. 1

    Step 1: 위험 지점을 나열합니다

    작업의 외부 부작용, 사람이 개입하는 일시 중지 지점, 실패 지점, 종료 조건을 나열합니다.
  2. 2

    Step 2: 최소 상태 집합을 정의합니다

    pending, running, waiting_approval, retrying, compensating, succeeded, failed, cancelled 같은 최소 state 집합을 정의합니다.
  3. 3

    Step 3: event 와 next state 를 연결합니다

    각 state 가 받을 수 있는 event 와 event 이후의 next state 를 명확히 적습니다.
  4. 4

    Step 4: guard 조건을 추가합니다

    위험한 transition 에 권한, 예산, approval, idempotency key, 외부 리소스 상태 확인 guard 를 추가합니다.
  5. 5

    Step 5: 도구 action 을 분리합니다

    도구 호출을 action 계층에 두고 input 요약, output 요약, traceId, 부작용 결과를 기록합니다.
  6. 6

    Step 6: 실패 정책을 정의합니다

    각 실패 경로에 대해 retry policy, terminal state, compensation policy 를 정의합니다.
  7. 7

    Step 7: 복구 근거를 저장합니다

    복구를 위한 checkpoint 또는 event log 를 정의하고, prompt 는 임시 컨텍스트로만 다루며 유일한 사실 소스로 삼지 않습니다.

FAQ

Agent 가 5 단계에서 실패하면 1 단계부터 다시 실행해야 하나요, checkpoint 에서 이어가야 하나요?
부작용이 idempotent 한지, checkpoint 가 충분한지에 따라 다릅니다. 부작용이 없으면 처음부터 다시 실행할 수 있습니다. 부작용이 있고 idempotent 하다면 checkpoint 에서 이어갑니다. 부작용이 idempotent 하지 않다면 먼저 보상한 뒤 복구합니다. checkpoint 가 없으면 처음부터 다시 실행할 수밖에 없고, 부작용 중복 위험을 감수해야 합니다.
작업 상태는 prompt, 데이터베이스, LangGraph checkpoint, 큐 job 중 어디에 저장해야 하나요?
단순한 작업에서는 prompt 를 임시 컨텍스트로 쓸 수 있습니다. 복잡한 작업은 checkpoint 또는 event log 와 비즈니스 상태가 함께 필요합니다. 운영 Agent 에서는 thread state 를 LangGraph checkpoint 에 두고, 주문, 승인, 권한, 과금 같은 비즈니스 사실은 업무 데이터베이스에 두는 경우가 많습니다. 큐 job 은 비동기 스케줄링에는 좋지만 별도 상태 관리가 필요합니다.
상태 머신과 workflow/흐름도는 무엇이 다른가요?
상태 머신은 유한한 도달 가능 상태, 결정적 transition, guard 조건, action 을 중심으로 봅니다. Workflow 는 실행 단계의 순서에 더 초점을 둡니다. Agent 에는 상태 머신의 핵심 개념이 필요하지만, 계층과 동시성을 포함한 완전한 statechart 가 항상 필요한 것은 아닙니다.
approval 이후 Agent 가 같은 실행 지점으로 돌아가게 하려면 어떻게 해야 하나요?
같은 thread_id 와 checkpoint 를 사용해 복구합니다. 예를 들어 LangGraph Interrupts 문서의 Command(resume=...) 패턴입니다. checkpoint 는 현재 노드, 완료된 단계, 다음 action 을 기록해야 하며, interrupt 이전의 부작용은 idempotent 해야 합니다.
retry 와 compensation 은 prompt 에 써야 하나요, 상태 transition 규칙에 써야 하나요?
서버 측 상태 transition 규칙에 써야 하며 prompt 에만 두면 안 됩니다. retry_count, max retry, idempotency key, undo_op, terminal state 는 테스트 가능하고 감사 가능하며 복구 가능해야 합니다. Prompt 는 판단에 참여할 수 있지만 신뢰성 규칙의 유일한 보관소가 되어서는 안 됩니다.
단순 고객 지원 Agent 에도 상태 머신이 필요한가요?
단일 턴 FAQ bot 에는 보통 무거운 상태 머신이 필요하지 않습니다. 하지만 주문 조회, 티켓 생성, 환불 승인, 결제, 외부 API 를 다루기 시작하면 명시적 상태, checkpoint, idempotency, compensation 이 필요합니다.

4분 읽기 · 게시일: 2026년 9월 17일

댓글

GitHub로 로그인하여 댓글을 남기세요

Easton BlogEaston Blog