인공지능 기술의 발전으로 다양한 AI 에이전트들이 개발되고 있습니다. 그러나 이러한 에이전트들이 서로 다른 프레임워크와 벤더에서 구축되어 있기 때문에, 이들 간의 원활한 협업이 어려운 것이 현실입니다. 이러한 문제를 해결하기 위해 구글은 ‘Agent To Agent Protocol(A2A)’이라는 개방형 프로토콜을 개발했습니다. A2A 프로토콜은 서로 다른 생태계의 에이전트들이 공통 언어를 통해 소통할 수 있게 하여, 다중 에이전트 시스템의 상호 운용성을 높이는 방법에 대해 포스트 합니다.
A2A 프로토콜이란?
A2A(Agent To Agent) 프로토콜은 독립적인 AI 에이전트 간의 통신을 용이하게 하기 위한 개방형 프로토콜입니다. 이 프로토콜은 프레임워크나 벤더에 관계없이 에이전트들이 서로 통신하고 협업할 수 있도록 표준화된 방법을 제공합니다.
A2A 프로토콜을 통해 에이전트들은:
- 서로의 능력과 기술을 알릴 수 있습니다
- 사용자와 어떻게 상호작용할지 협상할 수 있습니다(텍스트, 양식, 양방향 오디오/비디오 등을 통해)
- 안전하게 함께 작업할 수 있습니다
A2A는 MCP와 어떻게 다른가?

모델 컨텍스트 프로토콜 (MCP)은 LLM을 데이터, 리소스 및 도구와 연결하는 새로운 표준입니다. MCP는 이미 다양한 모델과 프레임워크에서 ‘함수 호출’을 표준화하고 있습니다. 이를 통해 도구 서비스 제공업체 생태계가 형성되고 에이전트와 도구 및 데이터를 연결하는 복잡성이 크게 낮아지고 있습니다. 더 많은 프레임워크, 서비스 제공업체 및 플랫폼이 MCP를 채택함에 따라 이러한 추세는 지속될 것으로 예상됩니다.
A2A는 에이전트들이 각자의 고유한 방식으로 협업할 수 있도록 하는 애플리케이션 수준 프로토콜입니다. 에이전트들이 도구가 아닌 에이전트 (또는 사용자)로서 소통할 수 있도록 지원합니다.
따라서, MCP와 결합된 에이전트들을 통합함으로써 상호 보완적인 구조가 됩니다.
핵심 개념
A2A 프로토콜의 핵심 개념들을 이해하면 어떻게 에이전트 간 통신이 이루어지는지 명확히 알 수 있습니다:
에이전트 카드(Agent Card)
공개 메타데이터 파일(일반적으로 /.well-known/agent.json
에 위치)로, 에이전트의 이름, 기능, 스킬, 엔드포인트 URL, 인증 요구 사항 등을 설명합니다. 클라이언트 간에는 이를 통해 상호 에이전트를 발견하고 활용할 수 있습니다.
//agent card 예시
{
"name": "Google Maps Agent",
"description": "Plan routes, remember places, and generate directions",
"url": "https://maps-agent.google.com",
"provider": {
"organization": "Google",
"url": "https://google.com"
},
"version": "1.0.0",
"authentication": {
"schemes": "OAuth2"
},
"defaultInputModes": ["text/plain"],
"defaultOutputModes": ["text/plain", "application/html"],
"capabilities": {
"streaming": true,
"pushNotifications": false
},
"skills": [
{
"id": "route-planner",
"name": "Route planning",
"description": "Helps plan routing between two locations",
"tags": ["maps", "routing", "navigation"],
"examples": [
"plan my route from Sunnyvale to Mountain View",
"what's the commute time from Sunnyvale to San Francisco at 9AM",
"create turn by turn directions from Sunnyvale to Mountain View"
],
// can return a video of the route
"outputModes": ["application/html", "video/mp4"]
},
{
"id": "custom-map",
"name": "My Map",
"description": "Manage a custom map with your own saved places",
"tags": ["custom-map", "saved-places"],
"examples": [
"show me my favorite restaurants on the map",
"create a visual of all places I've visited in the past year"
],
"outputModes": ["application/html"]
}
]
}
A2A 원격 에이전트(A2A Server)
A2A 프로토콜 메서드를 구현하는 HTTP 엔드포인트를 노출하는 에이전트입니다. 블랙박스 라고도 표현하며, 요청을 받고 작업 실행을 관리하는 서버를 의미합니다.
A2A 클라이언트(A2A Client)
A2A 서비스를 소비하는 애플리케이션 또는 다른 에이전트입니다. A2A 에이전트(서버)의 URL로 요청(예: tasks/send
)을 보냅니다. 요청을 위한 어플리케이션, 서버 등으로도 표현됩니다.
사용자 (User)
서비스를 이용하는 엔드유저로 에이전트를 사용하는최종 사용자를 말합니다.
에이전트간 커뮤니케이션
작업(Task)
중앙 작업 단위입니다. 클라이언트는 메시지(tasks/send
또는 tasks/sendSubscribe
)를 보내 작업을 시작합니다. 작업은 고유 ID를 가지며 다양한 상태(submitted
, working
, input-required
, completed
, failed
, canceled
)를 거칩니다.
- 요청을 수행1,거부
- 나중에 할일을 예약
- 다른 방식을 협상
- 더 많은 정보를 요청
- 다른 에이전트로 업무 위임
메시지(Message)
클라이언트(role: "user"
)와 에이전트(role: "agent"
) 간의 통신 턴을 나타냅니다. 메시지는 여러 Parts
로 구성됩니다.
에이전트의 생각, 사용자의 컨텍스트, 지침, 오류, 상태 , 메타데이터를 포함하여 전달하는 콘텐츠를 의미합니다.
파트(Part)
Message
나 Artifact
내의 기본 콘텐츠 단위입니다. TextPart
, FilePart
(인라인 바이트 또는 URI 포함), 또는 DataPart
(구조화된 JSON, 예: 양식)가 될 수 있습니다. 메시지 또는 생성물에 대한 일부분을 의미합니다.
생성물(Artifact)
작업 중 에이전트가 생성한 출력물(예: 생성된 파일, 최종 구조화된 데이터)을 나타냅니다. 아티팩트 역시 Parts
를 포함합니다. 하나의 Task에는 여러개의 아티팩트를 생성하게됩니다.
푸시 알림(Push Notifications)
pushNotifications
를 지원하는 서버는 클라이언트가 제공한 웹훅 URL로 작업 업데이트를 능동적으로 보낼 수 있으며, tasks/pushNotification/set
을 통해 구성할 수 있습니다.
관련된 JSON 형태의 Response에 대한 자세한 내용은 아래 링크를 참고:
https://google.github.io/A2A/#/documentation?id=core-objects
일반적인 흐름
A2A 프로토콜을 사용한 일반적인 통신 흐름은 다음과 같습니다:
- 발견(Discovery): 클라이언트가 서버의 잘 알려진 URL에서 에이전트 카드를 가져옵니다.
- 시작(Initiation): 클라이언트가 초기 사용자 메시지와 고유한 작업 ID를 포함하는
tasks/send
또는tasks/sendSubscribe
요청을 보냅니다. - 처리(Processing):
- (스트리밍): 서버는 작업이 진행됨에 따라 SSE 이벤트(상태 업데이트, 아티팩트)를 보냅니다.
- (비스트리밍): 서버는 작업을 동기적으로 처리하고 응답에 최종
Task
객체를 반환합니다.
- 상호작용(선택 사항): 작업이
input-required
상태가 되면, 클라이언트는 동일한 작업 ID를 사용하여tasks/send
또는tasks/sendSubscribe
를 통해 후속 메시지를 보냅니다. - 완료(Completion): 작업은 최종적으로 종료 상태(
completed
,failed
,canceled
)에 도달합니다.
A2A 프로토콜의 활용 사례
아직 실제적인 사례로는 Google Github에 공개된 것 이 외에 제품화된 실제 사례는 아직 없습니다. (2025.4.15 기준)
A2A 프로토콜은 다양한 상황에서 활용될 수 있습니다:
- 기업 환경에서의 다중 에이전트 협업: 서로 다른 벤더의 에이전트들이 함께 작업하여 복잡한 비즈니스 프로세스를 처리할 수 있습니다.
- 이종 AI 시스템 통합: 서로 다른 프레임워크로 구축된 AI 시스템들이 원활하게 통신할 수 있습니다.
- 에이전트 생태계 구축: 다양한 전문 에이전트들이 함께 작동하는 확장 가능한 에이전트 생태계를 조성할 수 있습니다.
- 사용자 경험 향상: 여러 에이전트가 협력하여 더 완벽한 사용자 경험을 제공할 수 있습니다.
A2A 프로토콜의 장점
A2A 프로토콜이 제공하는 주요 장점은 다음과 같습니다:
- 상호운용성: 서로 다른 프레임워크와 벤더의 에이전트들이 통신할 수 있습니다.
- 표준화: 에이전트 간 통신을 위한 공통 언어와 프로토콜을 제공합니다.
- 유연성: 다양한 유형의 콘텐츠(텍스트, 파일, 구조화된 데이터)를 지원합니다.
- 확장성: 푸시 알림, 스트리밍 등의 고급 기능을 통해 복잡한 상호작용을 지원합니다.
- 개방성: 오픈 소스로 제공되어 누구나 사용하고 기여할 수 있습니다.
시작하기
A2A 프로토콜을 사용하기 위해 다음 단계를 따를 수 있습니다:
- 기술 문서 읽기: A2A 프로토콜의 기능을 이해하기 위해 기술 문서를 읽어보세요.
- JSON 명세 검토: 프로토콜 구조에 대한 JSON 명세를 검토하세요.
- 샘플 살펴보기: A2A를 실제로 확인하기 위해 샘플을 사용해보세요.
- 샘플 A2A 클라이언트/서버 (Python, JS)
- 멀티 에이전트 웹 앱
- CLI (Python, JS)
- 샘플 에이전트 사용: 에이전트 프레임워크에 A2A를 적용하는 방법을 알아보기 위해 샘플 에이전트를 확인하세요.
전망
프로토콜 개선 필요:
- 에이전트 발견:
AgentCard
내에 인증 체계와 선택적 자격 증명을 포함하는 방안이 필요. - 작업 수명 주기 및 UX: 작업 내에서 동적 UX 협상 지원(예: 에이전트가 대화 중 오디오/비디오 추가)
- 클라이언트 메서드 및 전송: 클라이언트 시작 메서드(작업 관리 이상) 지원 확장 탐색 및 스트리밍 안정성과 푸시 알림 메커니즘 개선
샘플 및 문서 개선:
- “Hello World” 예제 단순화
- 다양한 프레임워크와 통합된 에이전트 또는 특정 A2A 기능을 보여주는 추가 예제 포함
- 공통 클라이언트/서버 라이브러리에 대한 더 포괄적인 문서 제공
- JSON 스키마에서 사람이 읽기 쉬운 HTML 문서 생성
기타
- MCP와 A2A는 각자 나란히 발전의 길을 걸을 것, 양쪽은 활발하게 더욱 발전할 것으로 기대.
- 에이전트가 많아질 수록 네트워크를 통한 복잡성은 더욱 증가, 이에 따라 에이전트간의 연결과 추적하는 것이 서비스 기술의 핵심이 될 것.
결론
A2A 프로토콜은 AI 에이전트 간의 상호운용성 문제를 해결하는 중요한 단계입니다. 이 프로토콜은 서로 다른 생태계에 있는 에이전트들이 효과적으로 통신하고 협업할 수 있는 표준화된 방법을 제공함으로써, 다중 에이전트 시스템의 발전을 가속화하고 있습니다.
기업과 개발자들은 A2A 프로토콜을 활용하여 다양한 AI 에이전트들을 통합하고, 더 복잡하고 강력한 AI 시스템을 구축할 수 있습니다. 이는 궁극적으로 AI 기술의 가치를 최대화하고 사용자 경험을 향상시키는 데 기여할 것입니다.
A2A 프로토콜은 오픈 소스 프로젝트로, 전체 커뮤니티의 기여에 열려 있습니다. A2A 프로토콜의 발전에 관심이 있다면, GitHub 리포지토리를 방문하여 프로젝트에 참여해보세요.
답글 남기기