"에이전트 데모는 멋진데, 막상 운영 환경에 올리면 왜 자꾸 무너질까요?"
📌 핵심 3줄 요약
- Martin Fowler 사이트에 올라온 Bayer 의약 도메인 에이전트 사례에서 신뢰성을 만드는 7가지 원칙을 정리했습니다.
- 7원칙은 모델이나 프레임워크를 바꾼다고 해결되지 않는 운영 레이어 체크리스트입니다.
- 같은 원칙을 Claude Agent SDK와 LangGraph에 어떻게 매핑하는지 비교표로 한 번에 봅니다.
💡 결론부터: 신뢰성 있는 에이전트의 정의
이번 글의 출발점은 단순합니다. "환각이 없는 에이전트"를 만들 수는 없습니다. 대신 우리가 만들 수 있는 것은 실패해도 안전하게 멈추는 에이전트입니다. Bayer의 의약 도메인 에이전트가 운영 단계에 안착할 수 있었던 이유도 모델을 더 큰 것으로 바꿔서가 아니라, 실패가 일어나는 지점마다 검증과 관측, 격리 장치를 깔아 둔 덕분입니다.
따라서 7원칙은 "성능 끌어올리기"보다 "사고 났을 때 누가 어디에서 잡아내는가"에 대한 답에 가깝습니다.
💡 핵심 한 줄
신뢰성은 모델 품질이 아니라 운영 레이어에서 만들어진다. 7원칙은 그 운영 레이어의 최소 골격이다.
📊 Bayer 사례가 보여 준 7원칙
Martin Fowler 글에 정리된 원칙을 의역해 옮기면 다음 7가지입니다. 각각은 독립적으로 도입 가능하지만, 실제 운영에서는 보통 1·2·6번부터 깔고 나머지를 채워 갑니다.
- 역할 분리 — 거대한 만능 에이전트 대신 좁은 역할의 서브 에이전트로 쪼갠다.
- 결정적 도구 위임 — 계산·조회·정책 적용은 LLM이 아니라 일반 함수가 처리한다.
- 검증 루프 — 출력 직후 별도 검증자(critic)가 한 번 더 본다.
- 관측성 — 모든 호출과 도구 결과를 추적 가능한 trace로 남긴다.
- 평가셋·회귀 테스트 — 도메인 전문가가 만든 골든 데이터셋으로 매 배포마다 측정한다.
- 휴먼-인-루프 — 위험도가 높은 작업은 사람 승인 단계를 명시적으로 둔다.
- 실패 모드·격리 — 한 서브 에이전트의 실패가 전체를 무너뜨리지 않게 격리한다.
일곱 가지를 한 번에 다 도입하려 하지 않는 게 핵심입니다. Bayer 사례 역시 처음부터 7원칙을 갖춘 게 아니라 운영 사고가 한 번씩 날 때마다 한 칸씩 채워 간 흐름입니다.
🆚 7원칙 vs Claude Agent SDK / LangGraph 매핑
같은 원칙을 SDK·프레임워크에서 어떻게 구현하는지 한 줄로 정리한 표입니다. 코드는 개념을 보여 주는 골격으로, 실제 운영 코드는 더 두꺼워집니다.
| 원칙 | Bayer 적용 포인트 | Claude Agent SDK | LangGraph |
|---|---|---|---|
| 1. 역할 분리 | 의약 검색·요약·정책 검토를 별도 에이전트로 분리 | subagents=[Agent(...)] 하위 에이전트 정의 |
StateGraph의 노드 단위로 역할 분리 |
| 2. 결정적 도구 위임 | 용량 계산·금기약 조회는 일반 함수가 처리 | @tool 데코레이터로 일반 파이썬 함수 등록 |
ToolNode([func])로 결정적 노드 삽입 |
| 3. 검증 루프 | 출력 후 별도 critic 에이전트가 정책 적합성 재검토 | 검증용 서브 에이전트 + stop_when 조건 |
검증 노드 → 조건부 엣지로 루프 |
| 4. 관측성 | 모든 호출을 trace ID로 묶어 사후 분석 | SDK 이벤트 스트림 + OpenTelemetry 익스포터 | LangSmith 트레이싱 자동 연동 |
| 5. 평가셋·회귀 | 도메인 전문가가 만든 골든 셋으로 배포 전 회귀 | SDK 외부에서 pytest + 평가 스크립트 직접 구성 | LangSmith Evaluations 데이터셋·메트릭 |
| 6. 휴먼-인-루프 | 처방 관련 출력은 약사 승인 단계 통과 후 전달 | permission_mode/도구 사용 승인 콜백 |
interrupt()로 그래프 일시 정지 |
| 7. 실패 모드·격리 | 서브 에이전트 한 곳의 오류가 본체로 번지지 않도록 격리 | 서브 에이전트별 컨텍스트 분리 + 타임아웃 | 노드 try/except + 폴백 엣지 정의 |
표를 한 칸씩 채워 본 결과, Claude Agent SDK는 1·2·3·6번에 강하고 LangGraph는 3·4·5·7번에 강한 편이라는 결론이 자연스럽게 나왔습니다. 한쪽만 쓰면 4·5번이나 6번이 비어 있게 되니, 실제 운영에서는 두 도구를 조합하거나 부족한 칸을 자체 코드로 메워야 합니다.
⚠️ 단점과 주의할 점
- 7원칙 동시 도입은 비용 폭증 — Bayer도 단계적 도입이었습니다. 처음부터 평가셋·관측성·휴먼-인-루프를 다 깔면 PoC 단계에서 ROI가 무너집니다.
- 평가셋 구축이 가장 어렵고 가장 자주 미뤄집니다. 도메인 전문가 시간을 확보하지 못하면 5번 원칙은 사실상 공란이 됩니다.
- 휴먼-인-루프는 자동화 ROI를 깎습니다. 어떤 작업에 사람을 끼울지 위험도 등급을 먼저 정의해야 합니다.
- 이 7원칙은 단발성 응답에는 과합니다. 멀티스텝·도구 호출 ≥3회 이상인 에이전트에서만 가치가 분명해집니다.
🙋 어떤 사람에게 맞을까
- 맞는 경우 — 사내 운영 에이전트, 의료·금융·법무처럼 도메인 규제가 강한 영역, 멀티 에이전트로 확장 중인 팀
- 안 맞는 경우 — 1회성 챗봇 데모, 개인용 자동화 스크립트, 단일 LLM 호출 한 번으로 끝나는 워크플로다.
✅ 핵심 정리
- 신뢰성은 모델이 아니라 운영 레이어에서 만들어지고, 7원칙은 그 최소 골격이다.
- Claude Agent SDK는 역할 분리·도구·승인 흐름에, LangGraph는 검증 루프·관측·격리에 강하다.
- 한 번에 다 도입하지 말고 1·2·6번부터 깔고 평가셋·관측성을 차근차근 메운다.
🚀 지금 바로 할 일
- 현재 운영 중이거나 PoC 중인 에이전트의 실패 사례 5개를 수집해 어떤 원칙이 비어 있어서 발생했는지 분류합니다.
- 비어 있는 칸 중 가장 영향력 큰 한 가지를 골라 다음 스프린트에 넣습니다(보통 검증 루프 또는 휴먼-인-루프).
- 도메인 전문가와 함께 평가셋 10개부터 만들고 CI에 회귀 테스트로 붙입니다.
💬 의견
운영 중인 에이전트에서 가장 약한 고리가 7원칙 중 어느 칸이었는지 댓글로 공유 부탁드립니다.
참고 자료
- Martin Fowler — Engineering a reliable Agentic AI system: lessons from Bayer · martinfowler.com/articles/reliable-llm-bayer.html
- Anthropic Claude Agent SDK Overview · docs.anthropic.com/en/api/agent-sdk/overview
- LangGraph 공식 문서 · langchain-ai.github.io/langgraph
작성자: AI 도구와 에이전트 운영에 관심 있는 한국어 기술 블로거. Claude Agent SDK·LangGraph·LangChain을 실제 워크플로에 붙여 본 경험을 바탕으로 한국어 사용자 관점에서 정리한다.
'AI 리뷰' 카테고리의 다른 글
| Microsoft VibeVoice: 90분 다화자 팟캐스트 TTS 정리 (0) | 2026.06.08 |
|---|---|
| AI Engineering from Scratch 솔직 리뷰: 무료 GitHub 로드맵 vs 유료 강의 (0) | 2026.05.27 |
| Google Antigravity 2.0 첫인상과 실전 사용법 (2026) (0) | 2026.05.21 |
| Sieve 리뷰: Cursor·Claude Code가 흘리는 API 키 잡기 (2026) (0) | 2026.05.19 |