핵심 요약
LangGraph 0.4의 durable execution으로 5일짜리 agent workflow 운영. 인간 승인·외부 API 응답·시간차 동작을 단일 graph로. PostgreSQL checkpoint, 재시작 안전, 비용 -64%.
1. 시나리오
사내 RFP 자동 처리 — 문서 분석(1h) → 부서 검토(2일) → 가격 협상 초안(4h) → 인간 승인(1일) → 발송. 총 5일.
2. graph 설계
graph = StateGraph(RFPState)
graph.add_node("parse", parse_node)
graph.add_node("review", review_node)
graph.add_node("draft", draft_node)
graph.add_node("approve", approve_node)
graph.add_node("send", send_node)
graph.add_edge("parse", "review")
graph.add_conditional_edges("review", route_after_review)
checkpointer = PostgresSaver.from_conn_string(...)
app = graph.compile(checkpointer=checkpointer)
3. interrupt — 외부 입력 대기
def approve_node(state):
decision = interrupt({"draft": state["draft"]})
return {"approved": decision["approved"]}
# 인간이 별도 UI에서 승인 → graph.resume(thread_id, decision)
인간 입력 대기 동안 서버 자원 0. checkpoint 영속화로 며칠 후 resume.
4. 운영
| 지표 | 값 | |
|---|---|---|
| 월 처리 workflow | 420 | |
| 평균 LLM 비용 | $3.2 | |
| 인간 개입 비율 | 31% | |
| 실패율 | 2.4% |
5. 함정
- state 직렬화 — Pydantic v2 필수, dataclass·Date 직접 사용 시 OK이지만 enum은 확인
- checkpoint 용량 — 큰 문서 raw 저장 시 DB 폭증, blob은 S3 ref만
- timeout — interrupt 대기 무한, SLA 위반 시 별도 timer node로 escalation
- version 마이그레이션 — graph 노드 추가 시 in-flight checkpoint 호환 정책

댓글 0