A2A(Agent2Agent)는 이름 그대로 에이전트와 에이전트가 상호작용할 수 있게 만드는 구조적 접근이다.
핵심은 단순하다.

https://codelabs.developers.google.com/intro-a2a-purchasing-concierge?hl=ko#0 (이거 봐라 잘 나와있다.)
많은 팀이 에이전트를 도입할 때 처음에는 “성능 좋은 모델 하나”에 집중한다. 하지만 운영 단계로 가면 진짜 문제는 모델 성능보다 작업 분해, 통신 계약, 실패 복구, 추적 가능성에서 발생한다. A2A 아키텍처는 바로 이 운영 문제를 풀기 위한 프레임이다.
이 글은 A2A를 유행어가 아니라 실제 설계 관점에서 설명한다.
단일 에이전트 구조는 시작이 쉽다. 프롬프트 하나로 많은 일을 처리할 수 있다.
하지만 작업이 길어지고 팀 단위 협업으로 넘어가면 한계가 빠르게 드러난다.
컨텍스트 과부하
조사, 생성, 검증, 배포 판단까지 한 맥락에 밀어 넣으면 품질 편차가 커진다.
책임 경계 부재
실패했을 때 어디서 잘못됐는지 추적이 어렵다.
재사용성 낮음
특정 작업에 맞춘 프롬프트/로직이 다른 작업에 그대로 재사용되기 어렵다.
운영 위험 증가
권한이 한 에이전트에 과도하게 몰리면 보안·안정성 리스크가 커진다.
A2A는 이 문제를 역할 분리로 해결한다.
즉, “한 명의 만능 인턴” 대신 “역할 있는 팀”으로 바꾸는 개념이다.
A2A를 제대로 구현하려면 제일 먼저 정해야 하는 건 모델이 아니라 통신 계약이다.
예를 들어,
task_id, goal, constraints, deadline이 필수status, artifact_uri, confidence, error_reason을 고정이런 구조가 없으면 에이전트끼리 대화는 되는데 운영은 안 된다.
A2A를 시스템처럼 설계하려면 레이어를 나눠 보는 게 좋다.
어떤 작업을 어느 에이전트가 언제 처리할지 결정하는 층이다.
에이전트 간 대화의 신뢰성을 담당한다.
“누가 무엇을 할 수 있는가”를 정의한다.
운영 단계에서 문제를 진단할 수 있게 해준다.
조직에서 실제로 굴릴 수 있게 만드는 안전장치다.
A2A 설계를 잘하려면 아래 원칙을 지키는 것이 중요하다.
코드보다 먼저 입출력 스키마를 고정한다.
같은 요청이 두 번 들어와도 결과가 꼬이지 않게 한다.
메시지 외피(메타데이터)는 항상 동일 구조로 유지한다.
각 에이전트는 자기 역할에 필요한 최소 권한만 가진다.
실패를 예외가 아니라 기본 경로로 취급한다.
배포, 삭제, 외부 발송 같은 민감 작업은 승인 게이트를 둔다.
모든 요청은 trace id를 가지고, 모든 단계는 로그가 남아야 한다.
처음부터 전체 자동화하지 말고 작게 시작해 확장한다.
A2A는 구조를 어떻게 짜느냐에 따라 품질이 크게 달라진다.
리서치, 로그 분석, 코드 후보 생성에 특히 유용하다.
품질 기준을 강제할 수 있다.
운영형 자동화에서 안정적인 패턴이다.
신뢰도 낮음/오류 반복/정책 충돌 시 사람에게 즉시 전달한다.
역할은 늘었는데 계약과 책임이 없으면 혼란만 커진다.
에이전트마다 다른 응답 형식 쓰면 통합 단계가 깨진다.
편해서 모든 도구 권한을 주면 보안 리스크가 폭증한다.
실패 이유를 모르면 개선이 불가능하다.
민감 작업까지 자동화하면 작은 오류가 큰 사고로 이어질 수 있다.
A2A 운영은 감으로 하면 안 된다. 최소 지표를 정해야 한다.
특히 중요한 건 실패 사유 상위 5개를 매주 보는 것이다.
A2A는 에이전트 수가 늘어나는 구조라 공격면도 커진다. 따라서 기본 보안이 필수다.
“작동한다”와 “운영 가능하다”는 다르다. 보안이 빠지면 A2A는 실무에서 오래 못 간다.
이 질문에 답하지 못하면, 구현보다 설계를 먼저 해야 한다.
A2A는 “에이전트끼리 대화한다”는 아이디어가 핵심이 아니다.
진짜 핵심은:
즉, A2A는 모델 성능 경쟁이 아니라 운영 가능한 협업 시스템 설계의 문제다.
이 원칙을 지키면 A2A는 데모 기술이 아니라, 실제 조직 생산성을 올리는 구조가 된다.
A2A는 “AI를 여러 개 붙이는 기술”이 아니다.
역할과 계약이 있는 협업 시스템을 만드는 기술이다.
그게 A2A의 본질이다.