분석은 in-process 큐 + LangGraph fan-out으로 돌린다
| 결정일 | 상태 | 원본 |
|---|---|---|
| 2026-07-22 | active | heymoa-ai/docs/decisions/2026-07-22-analysis-execution-engine.md |
근거 전문은 전사 분석 기능 설계에 있다. 여기에는 언제 뒤집어야 하는가만 적는다.
결정 넷
비동기 실행은APP-298에서 뒤집혔다. 큐도 소비자도 없고AnalysisQueueport 뒤의asyncio.Queue. 워커는 안 띄운다BackgroundTasks가 응답 뒤에 돌린다. 겹치는 잡은PgSingleFlight의 advisory lock이 막는다 — 동시 실행 상한 ADR- 분석 엔진은 LangGraph fan-out 3노드. checkpointer 없음
- LLM은 OpenAI. vLLM은 어댑터 없이
base_url만 다름 - 캐시 경계는
CachedPrompt(prefix, instruction)로 데이터에 표현한다
나머지 셋은 그대로다. 결정 1만 뒤집혀서 문서 전체를 superseded로 두지 않는다.
되돌리는 조건
| 결정 | 뒤집을 때 |
|---|---|
| 뒤집혔다. 별도 워커로 가는 트리거는 그대로다 — 분석 유실이 관측되거나 분석 시간이 배포 주기보다 길어질 때 | |
| LangGraph fan-out | 병렬을 접고 단일 호출 + structured output으로 가면 그래프가 무의미해진다. 그때는 TranscriptAnalyzer 구현만 갈아낀다 |
| OpenAI | Bedrock으로 갈 때 — LangChain이 cachePoint를 벗겨내면(deepagents#917) boto3 Converse 직접 호출로 내려간다. Bedrock 캐싱은 Claude·Nova만 지원 |
| 소비자가 없어졌다. 동시 실행을 다시 조일 조건은 위 ADR에 있다 |
LangGraph 결정은 한 번 뒤집혔다
처음에는 "분석에 LangGraph를 쓰지 않는다"였다. 순차 3회 호출이면 노드 3개짜리 직선 그래프가
await 세 줄보다 나을 게 없기 때문이다.
병렬 fan-out이 확정되면서 판단이 바뀌었다. fan-out/fan-in과 노드별 재시도가 LangGraph의 기본 기능이라 직접 짤 이유가 없어졌다.
이 경위를 남기는 이유 — 그래프를 나중에 본 사람이 "직선 3개인데 왜 그래프냐"고 걷어낼 수 있다. 직선이 아니라 병렬이라서 그래프다.