A2A란 무엇인가요?

A2A란 무엇인가요?

A2A(Agent2Agent) 프로토콜은 AI 에이전트 간 통신을 위한 개방형 표준이에요. 어떤 프레임워크나 벤더가 만들었든, 에이전트들이 서로 대화할 수 있는 공통의 언어를 제공해서 상호운용성을 높이고 각각의 폐쇄된 시스템(사일로)을 허물어 주죠. 에이전트는 자기 환경 안에서 스스로 판단하고 행동하는 자율적인 문제 해결자예요. A2A를 쓰면 서로 다른 개발자, 프레임워크, 조직에서 만든 에이전트들이 함께 일할 수 있어요.

출처: 문서

본문

A2A 프로토콜은 AI 에이전트 협업에서 마주치는 핵심 문제들을 해결해 줘요. 에이전트들이 상호작용할 수 있는 표준화된 방식을 제공하죠. 이 문서에서는 A2A가 해결하는 문제들과 그 혜택을 설명할게요.

A2A가 해결하는 문제들

AI 어시스턴트가 국제 여행을 계획해 달라는 사용자 요청을 받았다고 생각해 볼게요. 이런 작업은 여러 전문화된 에이전트를 조율해야 해요. 예를 들어:

  • 항공편 예약 에이전트
  • 호텔 예약 에이전트
  • 현지 투어 추천 에이전트
  • 환전 에이전트

A2A가 없다면 이런 다양한 에이전트를 통합할 때 여러 문제가 생겨요.

  • 에이전트 노출(Agent Exposure): 에이전트를 서로에게 노출하기 위해 개발자들은 흔히 에이전트를 도구(tool)로 감싸요. Model Context Protocol(MCP)이 도구를 노출하는 방식과 비슷하죠. 하지만 이는 비효율적이에요. 에이전트는 직접 협상하도록 만들어졌는데, 도구로 감싸면 할 수 있는 일이 제한되거든요. A2A는 에이전트를 있는 그대로, 아무 감쌈 없이 노출해요.
  • 커스텀 통합(Custom Integrations): 상호작용마다 점대점(point-to-point) 방식의 맞춤 솔루션이 필요해서 엔지니어링 오버헤드가 커져요.
  • 느린 혁신(Slow Innovation): 통합할 때마다 처음부터 개발하다 보니 혁신이 더뎌져요.
  • 확장성 문제(Scalability Issues): 에이전트와 상호작용 수가 늘면 시스템을 확장하고 유지하기 어려워져요.
  • 상호운용성(Interoperability): 이런 방식은 상호운용성을 제한해서 복잡한 AI 생태계가 자연스럽게 생겨나는 걸 막아요.
  • 보안 공백(Security Gaps): 임시방편적인 통신은 일관된 보안 조치가 없는 경우가 많아요.

A2A는 이런 문제들을 해결해요. AI 에이전트들이 상호운용할 수 있게 해서, 안정적이고 안전하게 상호작용할 수 있게 해 주죠.

A2A 예시 시나리오

이 예시는 A2A(Agent2Agent) 프로토콜이 AI 에이전트들이 복잡한 상호작용을 처리하도록 어떻게 돕는지 보여줄게요.

사용자의 복잡한 요청

사용자가 AI 어시스턴트에게 "국제 여행을 계획해 줘" 같은 복잡한 프롬프트를 줘요.

graph LR
    User --> Prompt --> AI_Assistant[AI Assistant]

협업의 필요성

AI 어시스턴트는 프롬프트를 받고 나서, 요청을 완수하려면 여러 전문화된 에이전트를 불러야 한다는 걸 깨달아요. 여기에는 항공편 예약 에이전트, 호텔 예약 에이전트, 환전 에이전트, 현지 투어 에이전트가 포함돼요.

graph LR
    subgraph "Specialized Agents"
        FBA[✈️ Flight Booking Agent]
        HRA[🏨 Hotel Reservation Agent]
        CCA[💱 Currency Conversion Agent]
        LTA[🚌 Local Tours Agent]
    end

    AI_Assistant[🤖 AI Assistant] --> FBA
    AI_Assistant --> HRA
    AI_Assistant --> CCA
    AI_Assistant --> LTA

상호운용성의 도전

핵심 문제는 이렇죠. 각 에이전트가 저마다 별도로 개발·배포되어 있기 때문에 에이전트들이 함께 일할 수 없어요. 표준 프로토콜이 없다 보니 이 에이전트들은 서로 무엇을 할 수 있는지조차 발견하지 못하고 협업하지 못해요. 개별 에이전트(항공, 호텔, 환전, 투어)는 모두 고립되어 있어요.

"A2A가 함께하는" 해법

A2A 프로토콜은 에이전트들이 서로 대화할 수 있는 표준 메서드와 데이터 구조를 제공해요. 내부 구현이 어떻든 상관없이 말이죠. 같은 에이전트들이 이제 공유 프로토콜을 통해 통신하는 상호 연결된 시스템이 돼요. AI 어시스턴트는 이제 오케스트레이터(조율자) 역할을 해요. 모든 A2A 지원 에이전트의 결과를 모아서, 사용자의 프롬프트에 대한 하나의 완성된 여행 계획을 응답으로 제시하죠.

A2A의 핵심 혜택

A2A 프로토콜을 구현하면 AI 생태계 전체에 걸쳐 상당한 이점이 있어요.

  • 안전한 협업(Secure collaboration): 표준이 없으면 에이전트 간 안전한 통신을 보장하기 어려워요. A2A는 HTTPS를 사용하고 연산을 불투명하게 유지해서, 에이전트들이 협업 상대의 내부 동작을 볼 수 없게 해요.
  • 상호운용성(Interoperability): A2A는 AI 에이전트 생태계 사이의 사일로를 허물어요. 서로 다른 벤더와 프레임워크의 에이전트가 함께 일해요.
  • 에이전트 자율성(Agent autonomy): A2A를 쓰면 에이전트는 자기만의 능력을 유지하면서도 협업하는 동안 자율성을 지켜요.
  • 커스텀 통합 불필요(No custom integrations): 에이전트를 연결하려고 맞춤 플러그인이나 점대점 코드를 만들 필요가 없어요. 같은 프로토콜이 에이전트가 어디서 실행되든(로컬 머신, 클라우드, 벤더 호스팅) 도달해요. 팀, 프로젝트, 회사를 가로질러 에이전트를 연결하죠. 팀은 에이전트가 제공하는 가치에 집중할 수 있어요.
  • LRO 지원(Support for LRO): 프로토콜은 장기 실행 연산(LRO, long-running operations)을 지원해요. Server-Sent Events(SSE)를 통한 스트리밍과 비동기 실행을 처리하죠.

A2A의 핵심 설계 원칙

A2A 개발은 광범위한 채택, 엔터프라이즈급 역량, 미래 지향성을 우선하는 원칙을 따르고 있어요.

  • 단순성(Simplicity): A2A는 HTTP, JSON-RPC, Server-Sent Events(SSE) 같은 기존 표준을 활용해요. 핵심 기술을 재발명하지 않아서 개발자 채택이 빨라져요.
  • 엔터프라이즈 대비(Enterprise Readiness): A2A는 기업의 핵심 요구를 충족해요. 인증, 권한 부여, 보안, 개인정보, 트레이싱, 모니터링에 표준 웹 관행을 따르죠.
  • 비동기(Asynchronous): A2A는 장기 실행 작업을 기본 지원해요. 에이전트나 사용자가 계속 연결되어 있지 않을 수 있는 시나리오를 처리하죠. 스트리밍, 푸시 알림 같은 메커니즘을 사용해요.
  • 양식 독립(Modality Independent): 에이전트는 다양한 콘텐츠 유형으로 소통할 수 있어요. 평범한 텍스트를 넘어 풍부하고 유연한 상호작용을 지원하죠.
  • 불투명 실행(Opaque Execution): 에이전트는 내부 로직, 메모리, 독점 도구를 노출하지 않고 협업해요. 상호작용은 선언된 능력과 공유 컨텍스트에 의존해요. 이는 지식재산을 보호하고 보안을 높여요.

에이전트 스택 이해하기: A2A, MCP, 에이전트 프레임워크와 모델

A2A는 더 넓은 에이전트 스택 안에 자리 잡고 있어요. 여기에는 다음이 포함돼요.

  • A2A: 조직과 프레임워크를 가로질러 에이전트 간 통신을 표준화해요.
  • MCP: 모델을 데이터와 외부 리소스에 연결해요.
  • 에이전트 프레임워크(예: LangGraph, CrewAI, ADK): 에이전트를 구축하는 도구 키트를 제공해요.
  • 모델: 에이전트 추론의 기초로, 어떤 Large Language Model(LLM)이든 될 수 있어요.

A2A와 MCP

여러분은 이미 에이전트·모델·도구 간 상호작용을 지원하는 프로토콜을 알고 있을지 몰라요. Model Context Protocol(MCP)이 떠오르는 표준 중 하나죠. MCP는 LLM(Large Language Model)을 데이터와 외부 리소스에 연결하는 데 집중해요. Agent2Agent(A2A) 프로토콜은 AI 에이전트, 특히 다른 시스템 안의 에이전트를 위한 공통 언어예요. A2A는 MCP를 보완해요. 에이전트 상호작용의 서로 다르면서도 연관된 부분을 다루죠.

  • MCP의 초점: 에이전트를 도구와 데이터에 연결하는 복잡성을 줄이는 것이에요. 도구는 보통 무상태(stateless)이고 특정·사전 정의된 기능을 수행해요(예: 계산기, 데이터베이스 질의).
  • A2A의 초점: 에이전트가 자기만의 고유 양식(native modality)으로 협업하게 하는 것이에요. 도구처럼 상호작용하는 게 아니라 에이전트로(또는 사용자로) 소통하죠. 에이전트가 추론하고 계획하며 작업을 위임하는 복잡한 다중 턴 상호작용을 지원해요. 예를 들어 주문할 때 협상하거나 명확화를 요청할 수 있어요.

에이전트를 단순한 도구로 감싸는 것은 한계가 있어요. 에이전트의 전체 역량을 담을 수 없죠. Why Agents Are Not Tools 게시글이 이 차이를 다루고 있어요. 더 심층적인 비교는 A2A and MCP Comparison 문서를 참고해요.

A2A와 에이전트 프레임워크

A2A는 에이전트를 위한 통신 프로토콜이에요. 각 에이전트를 만드는 데 쓰인 프레임워크와 관계없이 에이전트 간 통신을 가능하게 하죠. 팀은 LangGraph, CrewAI, ADK 등 다양한 에이전트 개발 키트와 프레임워크로 에이전트를 만들고, A2A는 그중 어떤 것으로 만든 에이전트든 함께 일하게 해 줘요. 프로토콜은 어떤 단일 프레임워크에도 의존하지 않고 특혜를 주지도 않아요.

A2A 요청 수명주기

요청은 세 단계(에이전트 발견, 인증, 메시징 API sendMessage와 sendMessageStream)를 거쳐 네 가지 주요 단계로 진행돼요. 아래 다이어그램은 흐름을 세 단계로 나눠서 클라이언트, A2A 서버, 인증 서버가 어떻게 상호작용하는지 보여줘요.

1. 에이전트 발견(Agent discovery)

클라이언트는 서버의 Agent Card를 가져와 그 능력과 엔드포인트를 파악해요.

sequenceDiagram
    participant Client
    participant A2A Server

    rect rgb(240, 240, 240)
    Note over Client, A2A Server: 1. Agent Discovery
    Client->>A2A Server: GET agent card eg: (/.well-known/agent-card)
    A2A Server-->>Client: Returns Agent Card
    end

2. 인증(Authentication)

클라이언트는 Agent Card의 보안 스킴을 읽고, 필요할 때 토큰을 얻어요.

sequenceDiagram
    participant Client
    participant Auth Server

    rect rgb(240, 240, 240)
    Note over Client, Auth Server: 2. Authentication
    Client->>Client: Parse Agent Card for securitySchemes
    alt securityScheme is "openIdConnect"
        Client->>Auth Server: Request token based on "authorizationUrl" and "tokenUrl".
        Auth Server-->>Client: Returns JWT
    end
    end

3. sendMessage와 sendMessageStream API

클라이언트는 서버 엔드포인트에 메시지를 보내요. sendMessage로 단일 요청/응답을 하거나, sendMessageStream으로 태스크 업데이트 스트림을 받죠.

sequenceDiagram
    participant Client
    participant A2A Server

    rect rgb(240, 240, 240)
    Note over Client, A2A Server: 3. sendMessage API
    Client->>Client: Parse Agent Card for "url" param to send API requests to.
    Client->>A2A Server: POST /sendMessage (with JWT)
    A2A Server->>A2A Server: Process message and create task
    A2A Server-->>Client: Returns Task Response
    end

    rect rgb(240, 240, 240)
    Note over Client, A2A Server: 4. sendMessageStream API
    Client->>A2A Server: POST /sendMessageStream (with JWT)
    A2A Server-->>Client: Stream: Task (Submitted)
    A2A Server-->>Client: Stream: TaskStatusUpdateEvent (Working)
    A2A Server-->>Client: Stream: TaskArtifactUpdateEvent (artifact A)
    A2A Server-->>Client: Stream: TaskArtifactUpdateEvent (artifact B)
    A2A Server-->>Client: Stream: TaskStatusUpdateEvent (Completed)
    end

더 알아보기 (Learn more)

  • 직접 해보고 싶다면 Python 튜토리얼로 첫 에이전트를 만들어 보세요.
  • 기초를 다지고 싶다면 A2A 프로토콜을 뒷받침하는 핵심 개념(Key Concepts)을 읽어 보세요.
  • A2A 프로토콜을 자세히 파고들고 싶다면 모든 역량·메서드·데이터 구조의 원천인 A2A 스펙(specification)을 확인하세요.