멀티 에이전트 시스템 아키텍처에서 에이전트 간의 원활한 통신은 필수적입니다. Google의 A2A(Agent-to-Agent) 프로토콜 생태계와 ADK(Agent Development Kit)는 이러한 상호운용성을 해결하기 위해 WellKnownAgentCardResolver라는 핵심 컴포넌트를 도입했습니다. 이 컴포넌트는 에이전트의 메타데이터를 자동으로 발견하고 로드하는 서비스 디스커버리 역할을 수행합니다.
A2A 프로토콜과 에이전트 카드(Agent Card)
A2A 프로토콜은 분산된 AI 에이전트들이 서로의 존재와 기능을 인지할 수 있도록 표준화된 '신분증'을 사용하도록 설계되었습니다. 이 신분증을 에이전트 카드(Agent Card)라고 하며, JSON 형식으로 작성되어 특정 URI 경로에 호스팅됩니다.
IETF RFC 8615 표준(.well-known URI)을 차용하여, 각 에이전트는 자신의 도메인 루트 아래에 다음 경로를 통해 카드를 노출합니다.
https://<agent-domain>/.well-known/agent.json
WellKnownAgentCardResolver의 핵심 기능
이 리졸버(Resolver)는 단순한 HTTP 클라이언트를 넘어, A2A 프로토콜의 인프라 계층에서 다음과 같은 중요한 작업을 처리합니다.
- 메타데이터 자동 탐색: 클라이언트 에이전트가 타겟 에이전트와 상호작용하기 전에, 타겟 도메인의
/.well-known/agent.json엔드포인트로 요청을 전송하여 설정 정보를 가져옵니다. - 구조화된 역직렬화: 수신된 JSON 페이로드를 파싱하여 내부 객체(예:
AgentMetadata)로 변환합니다. 이 객체에는 에이전트 식별자, 지원 프로토콜 버전, 사용 가능한 도구(Tools), MCP(Model Context Protocol) 서버 주소, 인증 정책 등이 포함됩니다. - 동적 오케스트레이션 지원: 하드코딩된 엔드포인트에 의존하지 않고, 런타임에 타겟 에이전트의 기능을 동적으로 파악하여 '플러그 앤 플레이' 방식의 협업을 가능하게 합니다.
구현 예시 및 디렉토리 구조
일반적인 웹 기반 에이전트 서비스에서 에이전트 카드를 호스팅하는 디렉토리 구조는 다음과 같이 구성될 수 있습니다.
hotel_booking_service/
└── public/
└── .well-known/
└── agent.json
메인 오케스트레이터 에이전트가 호텔 예약 에이전트를 호출해야 할 때, 리졸버는 위 경로의 JSON 파일을 읽어 들여 MCP 인터페이스와 통신 규약을 파악한 후 실제 작업을 위임합니다.
에이전트 카드 JSON 스키마 예제
아래는 호텔 예약 에이전트의 기능을 정의하는 agent.json 파일의 변형된 예시입니다.
{
"id": "hotel-booking-agent-v2",
"apiVersion": "2.1.0",
"supportedProtocols": ["a2a/v2", "grpc"],
"capabilities": [
{
"toolName": "reserveRoom",
"endpoint": "http://mcp-hotel-server:9090/mcp"
}
],
"metadata": {
"summary": "Handles hotel room reservations and availability checks."
}
}
WellKnownAgentCardResolver는 위와 같은 스키마를 해석하여 클라이언트 에이전트가 reserveRoom 도구를 호출할 수 있도록 내부 라우팅 테이블을 업데이트합니다.
기술 스택 및 고려 사항
이 메커니즘은 Google ADK의 클라이언트/서버 라이브러리를 통해 구현되며, 데이터 포맷은 A2A 명세에서 정의한 스키마를 따릅니다. 현재 A2A는 업계 표준(W3C 또는 IETF)으로 완전히 제정되지는 않았으나, 멀티 에이전트 환경에서 느슨한 결합(Loose Coupling)과 자동화된 서비스 디스커버리를 구현하기 위한 강력한 패턴으로 자리 잡고 있습니다.