Ch1. 시스템 아키텍처
Control Plane과 Data Plane을 분리해 안정성과 변경속도를 동시에 확보하는 방법
핵심 요약
- LLM 시스템의 반복 실패는 운영 정책과 실행 로직이 뒤섞이는 데서 오므로, 아키텍처를 분리해 장애 반경을 줄인다.
- Control Plane(정책·버전·평가, 주간/월간 변경)과 Data Plane(요청 처리·응답 생성, 실시간 변경)을 책임·변경 주기·장애 영향 기준으로 분리한다.
- 멀티에이전트 통신은 MCP(에이전트↔도구)와 A2A(에이전트↔에이전트)로 분리하며, 두 프로토콜은 대체 관계가 아니라 서로 다른 신뢰 경계를 담당한다.
- Hosted/Private MCP, A2A public/extended Agent Card별로 신뢰 경계를 설계하고, MCP는 발급된 token만 받아 upstream에 그대로 전달하지 않는다.
- 정책 미조회 시 deny 기본값, 라우팅 실패 시 하위 모델 폴백, 툴 호출에 idempotency key 강제, A2A push URL의 SSRF(private IP·localhost) 차단을 기본 체크포인트로 둔다.
LLM 시스템의 실패는 대부분 운영 정책과 실행 로직이 한데 뒤섞이면서 반복됩니다.
아키텍처를 둘로 나누면 장애 반경이 줄고, 변경 속도와 안정성을 함께 챙길 수 있습니다.
권장 구조
분리 원칙
| 항목 | Control Plane | Data Plane |
|---|---|---|
| 책임 | 정책/버전/평가 기준 | 요청 처리/응답 생성 |
| 변경 주기 | 주간/월간 | 실시간/일간 |
| 장애 영향 | 의사결정 지연 | 사용자 영향 직접 발생 |
2026년 에이전트 통신 프로토콜
멀티에이전트 시스템에서는 도구 연결과 에이전트 간 통신을 분리합니다.
| 프로토콜 | 역할 | 현재 기준 | 운영 포인트 |
|---|---|---|---|
| MCP (Model Context Protocol) | 에이전트 ↔ 도구/데이터 | 2025-11-25 | JSON-RPC 기반. HTTP transport에서는 OAuth 2.1, Protected Resource Metadata, token audience binding을 검증 |
| A2A (Agent2Agent) | 에이전트 ↔ 에이전트 | latest v1.0.0 | task, streaming, push notification, extended Agent Card를 제공. 인증 전 리소스 존재 여부가 새지 않게 설계 |
| ACP (Agent Communication Protocol) | 에이전트 ↔ 에이전트 | 벤더 생태계 | REST/HTTP 기반 메시징. 조직 표준으로 채택하기 전 보안·상호운용성 검증 필요 |
수렴 패턴
2026년 운영 패턴은 MCP로 도구·데이터 경계를 표준화하고, A2A로 독립 에이전트 간 작업 위임을 표준화하는 방향으로 모이고 있습니다. 둘은 대체 관계가 아니라 서로 다른 신뢰 경계를 맡습니다.
신뢰 경계 설계
| 경계 | 운영 기준 |
|---|---|
| Hosted/public MCP | 공급자 신뢰 모델에 맞는 공개 서버만 연결하고, 고위험 툴은 승인 요구 |
| Private/local MCP | 런타임이 연결·필터링·승인을 직접 소유하고, scope와 network egress를 제한 |
| A2A public Agent Card | 공개 가능한 capability만 노출하고 내부 URL·비밀·세부 rate limit은 제외 |
| A2A extended Agent Card | 인증된 client에게만 제공하고, client 권한별 capability 차등 적용 |
MCP 서버 레지스트리 예시
mcp_servers:
- id: github-readonly-prod
owner: platform-ai
transport: streamable_http
server_url: https://mcp.example.com/github
token_audience: mcp://github-readonly-prod
scopes:
- repo:read
- issue:read
allowed_egress:
- api.github.com
approval_required_tools:
- create_issue
- write_file
expires_at: '2026-06-16'설계 체크포인트
- 정책 미조회 시 안전 기본값(deny 또는 제한 응답)을 적용합니다.
- 모델 라우팅 실패 시 하위 모델로 폴백합니다.
- 툴 호출은 트랜잭션 경계와 idempotency key를 강제합니다.
- MCP 서버 장애 시 graceful degradation: 도구 없이 응답 가능한 폴백 경로를 확보합니다.
- MCP 서버는 자신에게 발급된 token만 받아야 하며, 받은 token을 upstream API에 그대로 전달하지 않습니다.
- A2A push notification URL은 SSRF 방지를 위해 private IP, localhost, link-local 주소를 거부합니다.
- 승인 대기, 장기 실행, 외부 이벤트 재개가 필요한 경로는 durable state와 checkpoint를 둡니다.
기준일과 근거
| 항목 | 기준일 | 재확인 권장 | 1차 출처 |
|---|---|---|---|
| MCP 2025-11-25 | 2026-05-17 | 2026-06-16 | https://modelcontextprotocol.io/specification/2025-11-25 |
| A2A latest v1.0.0 | 2026-05-17 | 2026-06-16 | https://a2a-protocol.org/latest/specification/ |
| OpenAI Agents SDK MCP/tracing | 2026-05-17 | 2026-06-16 | https://developers.openai.com/api/docs/guides/agents/integrations-observability |