Spring AI Agentic Patterns (Part 5): A2A Integration — 에이전트를 시스템 경계 너머로 연결하는 법

·6분 읽기
Spring AI Agentic Patterns (Part 5): A2A Integration — 에이전트를 시스템 경계 너머로 연결하는 법

Spring AI Agentic Patterns (Part 5): A2A Integration — 에이전트를 시스템 경계 너머로 연결하는 법

서브에이전트 패턴까지 오면 자연스럽게 다음 질문이 생긴다.

같은 애플리케이션 안에서만 에이전트를 나눌 수 있는 걸까?

현실의 시스템은 대개 그렇게 단순하지 않다. 날씨 에이전트는 별도 서비스에 있고, 예약 에이전트는 다른 팀이 운영하고, 내부 정책 에이전트는 사내 네트워크 뒤에 있을 수 있다. 결국 진짜 문제는 “에이전트를 어떻게 잘 만들까?”만이 아니라, **서로 다른 에이전트를 어떻게 연결할까?**가 된다.

Spring AI의 A2A Integration은 바로 이 지점을 다룬다. 핵심은 Agent2Agent, 즉 A2A 프로토콜을 통해 에이전트들이 서로의 능력을 발견하고, 메시지를 주고받고, 작업을 위임할 수 있게 만드는 것이다.

A2A를 왜 봐야 하나

에이전트 아키텍처가 커질수록 한 프로세스 안에서 모든 걸 해결하기 어렵다.

  • 소유권이 다른 팀의 에이전트가 있다
  • 배포 단위가 서로 다르다
  • 권한/네트워크 경계가 다르다
  • 도메인별 전문 에이전트를 독립적으로 운영하고 싶다

이때 필요한 건 임시 HTTP API 몇 개를 억지로 맞추는 게 아니라, 에이전트끼리 통신하는 공통 규약이다.

A2A는 그 역할을 노린다. 원문 기준으로 A2A는 에이전트가

  • 능력을 발견하고
  • 메시지를 교환하고
  • 작업을 조정하는

오픈 표준이다.

즉 MCP가 도구 연결 표준 쪽에 가깝다면, A2A는 에이전트 간 협업 표준에 가깝다고 이해하면 감이 빠르다.

Spring AI A2A가 해 주는 일

원문이 소개하는 spring-ai-a2a 프로젝트는 A2A Java SDK와 Spring AI를 연결해 준다. 특히 현재는 서버 측 통합에 초점이 맞춰져 있다.

즉 Spring AI 애플리케이션을 A2A 규약을 따르는 에이전트 서버로 노출할 수 있다.

여기서 제공되는 핵심은 다음과 같다.

  • Spring Boot 자동 설정
  • ChatClient와 도구를 A2A 실행 흐름에 연결
  • Agent Card 노출
  • JSON-RPC 기반 메시지 처리 엔드포인트 제공

즉 개발자는 프로토콜 세부사항을 처음부터 직접 구현하기보다, Spring AI 앱을 A2A 서버로 감싸는 방식으로 시작할 수 있다.

Agent Card가 왜 중요한가

A2A에서 핵심 개념 중 하나는 Agent Card다.

이건 쉽게 말해 에이전트의 자기소개서다.

  • 이름
  • 설명
  • URL
  • 지원 기능
  • 입력/출력 모드
  • 스킬 목록
  • 프로토콜 버전

이 정보가 /.well-known/agent-card.json 같은 표준 경로로 노출되면, 다른 에이전트가 먼저 이 카드를 읽고 “이 에이전트가 무슨 일을 할 수 있는지” 파악할 수 있다.

이게 중요한 이유는, 원격 에이전트 호출을 하드코딩된 내부 API가 아니라 발견 가능한 능력 기반 상호작용으로 바꿔 주기 때문이다.

서버 에이전트 예제가 보여 주는 것

원문 예제는 날씨 에이전트를 A2A 서버로 노출하는 흐름을 보여 준다.

핵심 감각은 이렇다.

  • AgentCard를 Bean으로 정의하고
  • AgentExecutor가 Spring AI ChatClient를 감싸고
  • 도구를 포함한 Spring AI 에이전트 응답을 A2A 메시지로 되돌린다

즉 이미 잘 만들어 둔 Spring AI 에이전트를 버리는 게 아니라, 그 위에 A2A 통신 껍질을 씌우는 방식이다.

이 점이 좋다. 새로운 아키텍처를 강요하기보다, 기존 Spring AI 앱을 외부 협업 가능한 에이전트로 확장하는 접근이기 때문이다.

클라이언트 측 시나리오도 실용적이다

원문 후반부의 더 흥미로운 예제는 원격 A2A 에이전트를 호출하는 호스트 에이전트다.

예를 들어 여행 계획 에이전트가 있다고 해 보자.

  • 날씨 에이전트는 기상 정보 전문
  • 숙소 에이전트는 숙박 검색 전문
  • 호스트 에이전트는 사용자 요청을 이해하고 어디에 물어볼지 판단

이 구조에서 호스트 에이전트는 원격 에이전트의 Agent Card를 먼저 읽고, sendMessage 같은 도구를 통해 적절한 원격 에이전트에게 일을 보낸다.

이 패턴의 좋은 점은 LLM 기반 라우팅과 표준 프로토콜 호출이 결합된다는 점이다.

즉 단순한 서비스 호출이라기보다,

  • 어떤 전문 에이전트를 써야 하는지 모델이 판단하고
  • 실제 통신은 A2A SDK가 맡고
  • 결과는 다시 Spring AI 에이전트 흐름으로 돌아온다

실무적으로 기대할 수 있는 장점

1) 팀 경계에 맞는 분리

각 팀이 자기 에이전트를 독립적으로 운영하면서도 표준 방식으로 연결할 수 있다.

2) 도메인 전문화

모든 능력을 한 앱에 넣지 않아도 된다. 잘하는 에이전트를 따로 둘 수 있다.

3) 점진적 확장

처음엔 단일 앱으로 시작해도, 나중에 원격 에이전트로 분리하기 쉬워진다.

4) 상호운용성

Spring AI 밖의 에이전트 생태계와도 연결 가능성이 생긴다.

아직 초기 단계라는 점도 중요하다

원문은 이 프로젝트가 현재는 주로 서버 측 통합에 집중하고 있고, 앞으로 클라이언트 경험, 보안, 자동 발견, 스트리밍 전송 같은 확장이 더 필요하다고 설명한다.

이건 오히려 건강한 신호다. A2A 같은 표준은 개념만 크고 실제 개발자 경험이 뒤따르지 못하면 금방 흐려지는데, Spring AI 쪽은 적어도 무엇이 이미 되고 무엇이 아직 덜 됐는지를 비교적 솔직하게 보여 준다.

이 글에서 가져가야 할 핵심

A2A Integration의 포인트는 단순하다.

Spring AI 에이전트를 하나의 앱 내부 도구로만 두지 않고, 다른 에이전트와 대화 가능한 네트워크 참여자로 만든다.

이 관점은 꽤 크다. 지금은 작은 데모처럼 보일 수 있어도, 장기적으로는 에이전트 아키텍처가 도구 중심 앱에서 상호운용 가능한 에이전트 네트워크로 확장될 때 중요한 토대가 된다.

마무리

Subagent Orchestration이 한 애플리케이션 안에서 역할을 나누는 패턴이었다면, A2A Integration은 그 경계를 넘는다. 이제는

  • 다른 프로세스,
  • 다른 시스템,
  • 다른 팀,
  • 다른 배포 단위

에 있는 에이전트와도 표준 방식으로 협업할 수 있게 된다.

Spring AI 관점에서 이 글의 의미는 분명하다. ChatClient와 도구 기반 에이전트 구조를 유지하면서도, 원격 에이전트 협업이라는 다음 층위로 올라갈 수 있는 길을 보여 준다.

Series Links

참고한 원문