구글이 개발한 Agent2Agent(A2A) 프로토콜에 대해 알아보려고 합니다. 다양한 프레임워크로 만들어진 AI 에이전트들이 어떻게 서로 소통하고 협업할 수 있는지, 그리고 이를 직접 구현하는 방법을 단계별로 알아보겠습니다.
요즘 AI 에이전트 개발 환경은 정말 다양한 프레임워크들이 난립하고 있습니다. LangGraph, CrewAI, Google ADK 등 각각의 도구로 만든 에이전트들이 있지만, 이들이 서로 대화하고 복잡한 작업을 함께 수행하는 방법은 표준화되어 있지 않았죠.
A2A 프로토콜은 이런 문제를 해결하기 위해 구글이 시작한 오픈 표준입니다. 쉽게 말해, 서로 다른 프레임워크로 만든 AI 에이전트들이 공통 언어로 대화할 수 있게 해주는 다리 역할을 합니다.
단일 에이전트를 넘어 복잡한 시스템을 구축하려면 결국 상호운용성 문제에 부딪히게 됩니다. 예를 들어, LangGraph로 만든 데이터 분석 에이전트가 CrewAI로 만든 보고서 작성 에이전트에게 결과를 전달해야 한다면 어떻게 해야 할까요?
A2A는 다음과 같은 이점을 제공합니다:
A2A가 실제로 어떻게 작동하는지 확인하기 위해 멀티 에이전트 데모를 함께 구축해봅시다. 세 가지 다른 프레임워크(LangGraph, CrewAI, ADK)로 만든 에이전트들을 웹 UI를 통해 연결해보겠습니다.
# 저장소 복제
git clone https://github.com/google/A2A.git
cd A2A
# 가상 환경 생성
uv venv
# 환경 활성화
source .venv/bin/activate # Linux/macOS
# 파이썬 샘플 디렉토리로 이동
cd samples/python
# 공통 의존성 설치
uv sync
# CrewAI 에이전트 의존성 설치
cd agents/crewai
uv sync
# 메인 디렉토리로 돌아가기
cd ../..
# 루트 디렉토리에 .env 파일 생성
echo "GOOGLE_API_KEY=YOUR_API_KEY_HERE" > ../../.env
여기서 YOUR_API_KEY_HERE
를 실제 API 키로 입력하면 됩니다. 키는 https://aistudio.google.com/app/apikey 에서 받을 수 있습니다.
각 에이전트는 독립적인 웹 서버로 실행됩니다. 세 개의 새 터미널을 열고 각각에서 다음 명령을 실행합니다:
첫 번째 터미널: LangGraph 에이전트 (포트 10000)
cd /path/to/A2A/samples/python
source ../../.venv/bin/activate
uv run agents/langgraph
두 번째 터미널: CrewAI 에이전트 (포트 10001)
cd /path/to/A2A/samples/python
source ../../.venv/bin/activate
uv run agents/crewai
세 번째 터미널: ADK 에이전트 (포트 10002)
cd /path/to/A2A/samples/python
source ../../.venv/bin/activate
uv run agents/google_adk
네 번째 터미널: 웹 UI (포트 12000)
cd /path/to/A2A
source .venv/bin/activate
cd demo/ui
echo "GOOGLE_API_KEY=YOUR_API_KEY_HERE" > .env
uv run main.py
이제 세 가지 다른 에이전트와 대화해봅시다:
50 달러는 일본 엔으로 얼마인가요?
이 에이전트는 실시간 환율 데이터를 가져와 변환 결과를 알려줍니다. LangGraph로 만들어졌으며 스트리밍을 지원해 중간 상태 메시지도 볼 수 있습니다.
멀티턴 대화도 시도해보세요:
캐나다 달러의 환율이 어떻게 되나요?
에이전트는 추가 정보가 필요하다고 물어볼 것입니다. 이것이 A2A의 input-required
상태를 보여주는 예시입니다.
달에서 자전거 타는 우주인 이미지를 만들어줘
CrewAI와 Google Gemini 모델을 사용하는 이 에이전트는 이미지를 생성합니다. 이 과정에서 A2A는 단순 텍스트가 아닌 이미지 데이터를 FilePart
형태로 전송합니다.
커피 구매 경비를 등록할게요
이 에이전트는 경비 처리 과정을 시뮬레이션하며, 구조화된 데이터 교환을 보여줍니다. 대화창에 날짜, 금액, 목적 등을 입력할 수 있는 양식이 나타날 것입니다.
이제 A2A가 어떻게 작동하는지 살펴봅시다:
에이전트를 등록할 때, UI는 http://localhost:10000/.well-known/agent.json
에 요청을 보내 에이전트의 이름, 기능, 스트리밍 지원 여부 등을 담은 명함(AgentCard)을 받아옵니다.
모든 상호작용은 A2A 태스크가 되며, submitted
, working
, input-required
, completed
/failed
등의 상태를 가집니다. 이런 구조화된 생명주기는 긴 작업을 관리하는 데 중요합니다.
A2A는 텍스트뿐만 아니라 다양한 형태의 데이터를 지원합니다:
LangGraph 에이전트는 Server-Sent Events(SSE)를 통해 실시간 진행 상황을 전송합니다. 이를 통해 사용자는 긴 작업 중에도 중간 피드백을 받을 수 있습니다.
A2A 프로토콜은 AI 에이전트 간 협업의 새로운 표준을 제시합니다. 이 데모를 통해 확인한 주요 장점은:
현재 Cursor, Zed와 같은 IDE, Continue 같은 코드 비서, LibreChat 같은 웹 챗봇 등 다양한 플랫폼이 A2A를 도입하고 있습니다. 이는 A2A 생태계가 빠르게 성장하고 있음을 보여줍니다.
A2A는 AI를 고립된 챗봇에서 벗어나 실제 도구와 데이터에 연결된 유용한 비서로 변모시키는 핵심 기술 중 하나입니다. 이 표준을 통해 개발자들은 통합에 드는 시간을 줄이고, 더 강력하고 유연한 AI 솔루션을 구축할 수 있게 되었습니다.