본문으로 건너뛰기
r/LangChain조회 2

LangGraph의 interrupt와 AsyncPostgresSaver를 이용한 지속 가능한 Human-in-the-loop 패턴

LangGraph의 interrupt() 기능과 PostgreSQL 체크포인터를 결합하여 서버 재시작 시에도 상태를 유지하는 견고한 인간 승인 워크플로 구현 사례이다.

커뮤니티 반응

작성자가 실제 프로덕션 환경에서 겪은 문제를 해결한 구체적인 아키텍처와 코드를 공유하여 매우 실용적이라는 평가를 받고 있다.

주요 논점

01찬성다수

상태 지속성을 위해 데이터베이스 체크포인터를 사용하는 것이 프로덕션 에이전트 설계의 표준이 되어야 한다.

합의점 vs 논쟁점

합의점

  • 인메모리 폴링 방식은 안정성이 낮아 실제 운영 환경에 부적합하다.
  • LangGraph의 체크포인트 시스템은 복잡한 에이전트 상태 관리를 획기적으로 단순화한다.

실용적 조언

  • 긴 대기 시간이 필요한 Human-in-the-loop 구현 시 반드시 외부 DB 기반의 체크포인터를 설정하여 상태 소실에 대비하라.
  • 타임아웃 관리는 인메모리 타이머 대신 DB에 저장된 상태를 주기적으로 스캔하는 백그라운드 워커 방식을 권장한다.

섹션별 상세

기존의 폴링 방식은 서버 재시작 시 인메모리 상태가 소실되어 에이전트의 문맥을 잃어버리는 치명적인 결함이 존재했다. LangGraph의 interrupt() 함수를 호출하면 전체 그래프 상태가 AsyncPostgresSaver를 통해 PostgreSQL에 직렬화되어 저장된다. 이를 통해 프로세스가 종료되거나 서버가 재배포되어도 데이터베이스에 저장된 체크포인트를 기반으로 상태를 안전하게 보존한다.
python
# In the approval node
human_decision = interrupt({"message": "Approve remediation plan?", "plan": state["plan"]})
# Execution suspends here until Command(resume=...) is sent
if human_decision["approved"]:
    return {"next": "apply_remediation"}
else:
    return {"next": "escalation"}

LangGraph의 interrupt 함수를 사용하여 인간의 승인을 기다리며 실행을 일시 중단하는 로직

python
# In the FastAPI route
async def approve_incident(incident_id: str):
    await graph.ainvoke(
        Command(resume={"approved": True}),
        config={"configurable": {"thread_id": incident_id}}
    )

FastAPI 엔드포인트에서 중단된 그래프를 재개시키는 구현 예시

중단된 워크플로는 API 엔드포인트를 통해 외부 신호를 받으면 이전 단계를 재실행하지 않고 즉시 재개된다. POST 요청이 들어오면 thread_id를 기반으로 체크포인트에서 그래프를 재구성하고 Command(resume=...)를 주입한다. 이 메커니즘은 동일한 노드와 상태에서 실행을 이어가므로 불필요한 리소스 낭비와 중복 작업을 방지한다.
장애 대응의 긴급도에 따른 승인 SLA 타임아웃을 데이터베이스 쿼리만으로 효율적으로 관리한다. P0 장애는 15분, P1-P3는 2시간의 제한 시간을 두며 백그라운드 모니터가 PostgreSQL에서 인터럽트된 스레드를 조회하여 기한 초과 여부를 판단한다. 인메모리 상태를 유지할 필요가 없어 시스템 확장성과 안정성이 크게 향상됐다.
Claude Sonnet 모델의 신뢰도 점수를 기반으로 한 자동 재시도 루프를 구현하여 분석의 정확도를 높였다. 원인 분석(RCA) 결과의 신뢰도가 0.7 미만일 경우 그래프는 더 넓은 범위의 증거를 수집하기 위해 이전 단계로 루프백한다. 최대 3회 시도 후에도 기준 미달 시 PagerDuty를 통해 자동으로 담당자에게 에스컬레이션한다.

용어 해설

인간 개입형 시스템(Human-in-the-loop)
AI 에이전트의 자율적 실행 과정 중 중요한 결정 단계에서 인간의 승인이나 피드백을 거치도록 설계된 시스템 아키텍처이다. 자동화된 프로세스의 신뢰성을 높이고 예기치 못한 오류를 방지하기 위해 필수적인 안전장치로 활용된다.
지속성 실행(Durable Execution)
시스템 장애, 서버 재시작 또는 배포 상황에서도 워크플로의 상태를 유지하고 중단된 지점부터 다시 실행할 수 있는 능력이다. 상태를 외부 저장소에 직렬화하여 저장함으로써 장기 실행 작업의 안정성을 보장한다.
체크포인터(Checkpointer)
그래프나 워크플로의 현재 상태를 특정 시점마다 저장하는 메커니즘이다. LangGraph에서는 이를 통해 스레드별 상태를 데이터베이스에 기록하며, 장애 복구 및 비동기적 작업 재개를 가능하게 한다.
인터럽트(Interrupt)
실행 중인 프로세스를 일시 중단하고 제어권을 외부로 넘기는 기능이다. LangGraph의 interrupt() 함수는 상태를 체크포인터에 저장하고 대기 상태로 전환하여 외부의 입력(승인 등)이 올 때까지 자원을 점유하지 않고 기다린다.

언급된 도구

LangGraph추천

상태 유지가 가능한 멀티 에이전트 워크플로 구축

AsyncPostgresSaver추천

PostgreSQL을 이용한 비동기 상태 체크포인팅

Claude Sonnet추천

장애 원인 분석 및 신뢰도 기반 의사결정

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 05. 04.수집 2026. 05. 04.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.