본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 31. 07:50

AGTP: 에이전트를 위해 구축된 전송 프로토콜

요약

AI 에이전트의 특화된 동작을 지원하기 위해 설계된 새로운 전송 프로토콜인 AGTP를 소개합니다. HTTP 기반의 단순 요청을 넘어 에이전트의 신원, 권한, 세션 관리를 표준화하여 에이전트 생태계의 기반을 구축하고자 합니다.

핵심 포인트

  • AGTP는 에이전트의 추론 및 협상 작업에 최적화된 전송 프로토콜임
  • Agent-ID를 통해 호스트와 무관한 에이전트 고유 식별 제공
  • Authority-Scope를 통한 세밀한 권한 제어 및 감사 가능
  • IETF 오픈 표준으로 개발 중이며 TLS를 통한 보안 적용

지난 1년 동안 AI 에이전트 (AI agent)를 무엇인가에 연결하는 작업을 해보셨다면, 이미 문제의 형태를 알고 계실 것입니다. 여러분의 에이전트는 흥미로운 일들을 수행하지만, 그 트래픽을 운반하는 프로토콜은 HTTP를 사용합니다. 에이전트는 사용자의 목표를 추론하고, 다른 서비스와 협상하며, 세션 (session)을 가로질러 실행되고, 누군가를 대신하여 행동을 취하며, 무언가를 하기 위해 권한을 요청합니다. 하지만 그 아래의 통신 선로 (wire)에서는 일련의 POST 요청들로 보일 뿐입니다.

에이전트 전송 프로토콜 (Agent Transfer Protocol, AGTP)은 에이전트가 실제로 수행하는 작업에 맞춰 설계된 전송 프로토콜 (transport protocol)입니다. AGTP는 자체 포트(IANA에 등록된 4480번)에서 실행되며, 기밀성 (confidentiality)과 인증 (authentication)을 위해 TLS를 사용하며, IETF에서 오픈 표준 (open standard)으로 개발되고 있습니다. 그 의도는 SMTP가 이메일에, DNS가 호스트에 대해 가졌던 의도와 동일합니다. 즉, 상위 계층의 작업을 더 쉽게 만드는 기질 (substrate)을 정의하고, 생태계가 그 위에 구축되도록 하는 것입니다.

이 포스트는 개발자 수준의 투어입니다. AGTP가 무엇을 하는지, 이를 사용함으로써 무엇을 얻을 수 있는지, 그리고 여러분이 이미 구축한 것들과 어떻게 조화를 이루는지 설명합니다.

통신 선로에 존재하는 신원 (Identity)

익명 이외의 모든 AGTP 요청은 몇 가지 필수 헤더 (headers)를 포함하며, 이 헤더들은 중간 매개체 (intermediaries)가 실제로 답변해야 하는 질문들에 답합니다.

Agent-ID는 에이전트의 서명된 오리진 문서 (signed origin document, 즉 Agent Genesis)에서 파생된 256비트 암호화 식별자 (cryptographic identifier)입니다. 이는 호스트 (hosts), 세션 (sessions), 자격 증명 (credentials)에 관계없이 안정적으로 유지됩니다. 이는 에이전트를 실행한 사용자나 트래픽을 제공하는 도메인 (domain)과는 별개로 에이전트 자체를 식별합니다.

Owner-ID는 에이전트에 대해 책임을 지는 주체 (principal)를 식별합니다. 등록된 조직 (org), 법인, 또는 문제가 발생했을 때 답변해야 하는 인간을 의미합니다.

Authority-Scope는 이 요청에서 에이전트가 수행하고자 하는 작업을 domain:action 형식으로 쉼표로 구분하여 선언한 것입니다. 서버는 이를 강제 (enforce)할 수 있고, 게이트웨이 (gateways)는 이를 읽을 수 있으며, 감사 시스템 (audit systems)은 이를 검증할 수 있습니다.

Request-ID, Server-ID, Task-ID, Session-ID가 상관관계 표면 (correlation surface)을 완성하여, 모든 요청을 추적할 수 있고 모든 응답을 그 기원으로 다시 매칭할 수 있습니다.

실제 전송되는 데이터 (on the wire)의 모습은 다음과 같습니다:

AGTP/1.0 BOOK /reservation
Agent-ID: a3f8b91e7c2d4a6f8e1c5b9d3a2f7e4c8b6d1a5f9e3c7b2d6a4f8e1c5b9d3a2f
Owner-ID: org:acme-travel-corp
...

이 부분이 여러분이 무엇을 구축할 수 있는지를 변화시키는 지점입니다. HTTP를 사용할 때는 에이전트의 신원 (identity)이 프레임워크가 결정한 곳에 존재하며, 대개 전송 계층 (transport)이 관여하지 않는 JSON 본문 (body) 내부에 위치합니다. 반면 AGTP에서는 전송 계층 (the wire) 자체가 참여합니다. 로거 (Logger), 게이트웨이 (gateway), 범위 강제 지점 (scope-enforcement point), 감사 파이프라인 (audit pipeline) 모두 페이로드 (payload)를 파싱할 필요 없이 신원을 직접 읽을 수 있습니다.

OAuth와 OIDC는 여전히 그 위에서 작동합니다. 표준 Authorization: Bearer 헤더는 위 요청의 하단에서 볼 수 있듯이 오늘날과 정확히 동일하게 작동합니다. AGTP는 그 아래에 신원 계층 (identity layer)을 추가합니다. "무엇이 호출하고 있는가"와 "누가 이를 승인했는가"라는 두 가지 질문은 서로 다른 장소에서 별도의 답변을 얻게 됩니다. 두 정보 모두 동일한 요청에 실려 전달됩니다.

의미가 명확한 메서드들

AGTP는 에이전트가 실제로 수행하는 작업의 이름을 딴 소수의 메서드 세트를 가지고 있습니다: QUERY, BOOK, DELEGATE, PROPOSE, DISCOVER, EXECUTE, DESCRIBE, SUSPEND 및 몇 가지 더 있습니다. 또한 추가적인 의미론적 동사 (semantic verbs)를 문서화된 의미와 함께 등록할 수 있는 IANA 레지스트리도 존재합니다.

[

]

이는 부분적으로 경험적인 결과입니다. 올해 초에 발표한 7,200회 시행 벤치마크에 따르면, 메서드 이름이 CRUD 동사 대신 의도에 부합할 (intent-aligned) 때 프런티어 모델 (frontier models)이 올바른 엔드포인트 (endpoint)를 선택하는 빈도가 10~29%포인트 더 높게 나타났습니다. 신호는 이름 자체에 담겨 있으며, 이는 형편없는 문서화 속에서도 살아남을 만큼 밀도가 높습니다. 주의할 점은, 약 3B 파라미터 미만에서는 이러한 효과가 나타나지 않는다는 것입니다. 의미론적 명명 (Semantic naming)은 프런티어 규모 모델에서 누리는 이점입니다.

PROPOSE는 협상 프리미티브 (negotiation primitive)이기 때문에 특별히 언급할 가치가 있습니다. 이 아키텍처 모델은 RCNS (Runtime Contract Negotiation Substrate, 런타임 계약 협상 기질)라고 불립니다. 계약은 OpenAPI 명세 (spec)에 고정되어 있는 것이 아니라, 필요가 발생하는 시점에 생성됩니다.

네트워크 상에서의 협상은 다음과 같은 형태를 띱니다:

AGTP/1.0 PROPOSE /audit
Agent-ID: a3f8b91e...c40f2d7a
Owner-ID: org:acme-finance
...

서버는 이를 평가하고 네 가지 종료 상태 코드 (terminal status codes) 중 하나로 응답합니다:

AGTP/1.0 463 Proposal Rejected
Task-ID: task-0042
Content-Type: application/agtp+json
...

구매자 에이전트 (buyer's agent)는 내용을 수정하여 다시 제출하며, 다음과 같은 응답을 받습니다:

AGTP/1.0 263 Proposal Approved
Task-ID: task-0042
Content-Type: application/agtp+json
...

나머지 두 응답 코드는 261 Negotiation In Progress (비동기 평가, proposal_id를 폴링(poll)할 것)와 262 Authorization Required (응답 본문에서 어떤 자격 증명 (credential)을 수정해야 하는지 알려줌)입니다. 협상 문법 (negotiation grammar)이 네트워크 상에 존재하므로, 로그, 감사 시스템 (audit systems), 그리고 중간 매개체 (intermediaries)들이 프레임워크별 JSON 관례를 파싱할 필요 없이 이를 읽을 수 있습니다.

양자 간 통합 없는 탐색 (Discovery without bilateral integration)

에이전트 네임 서비스 (Agent Name Service, ANS)는 AGTP의 DNS에 해당합니다. 이는 에이전트와 그들의 역량 (capabilities)을 쿼리할 수 있는 AGTP 인식 레지스트리입니다. 역량에 대한 설명을 담아 DISCOVER를 요청하면, ANS는 서명되고 순위가 매겨진 에이전트 매니페스트 문서 (Agent Manifest Documents) 목록을 반환하며, 사용자는 그중 하나를 선택하여 진행하면 됩니다.

AGTP/1.0 DISCOVER /agents
Agent-ID: a3f8b91e...c40f2d7a
Authority-Scope: discovery:query
...

ANS 서버는 서명된 결과 집합을 반환합니다:

AGTP/1.0 200 OK
Content-Type: application/agtp+json

...

결과는 문서화된 가중치(weights)에 따라 신뢰 계층(trust tier), 행동 신뢰 점수(behavioral trust score), 그리고 역량 일치도(capability match) 순으로 순위가 매겨집니다. 모든 응답은 ANS 거버넌스 키(governance key)에 의해 서명되며, 사용자의 에이전트는 어떠한 결과도 신뢰하기 전에 해당 서명을 검증합니다. ANS 서버는 연합(federate) 구조를 가지므로, 한 조직의 에이전트는 양측에 대한 사전 지식 없이도 다른 조직의 에이전트를 찾을 수 있습니다. 권한이 취소된 에이전트는 60초 이내에 인덱스에서 제외됩니다.

이것이 바로 네트워크 식별자(wire identity)를 인프라로 전환하는 핵심입니다. 아무도 조회할 수 없는 표준화된 에이전트 ID(Agent-ID)는 로컬 규약(local convention)에 불과합니다. 하지만 ANS를 통해 해석(resolve)되는 표준화된 에이전트 ID는 생태계(ecosystem)가 됩니다.

내장된 투명성

모든 중대한 AGTP 상호작용은 귀속 기록(Attribution-Record)을 생성할 수 있습니다. 이는 응답 에이전트의 신원, 요청 해시(request hash), 그리고 응답 상태를 재현 가능한 형태로 결합한 서명된 봉투(signed envelope)입니다. 귀속 기록은 RFC 9162 및 RFC 9943 (SCITT)에 부합하는 추가 전용 투명성 로그(append-only transparency logs)에 기록되도록 설계되었습니다.

{
  "agent_id": "a3f8b91e...c40f2d7a",
  "owner_id": "org:acme-travel-corp",
...

OAuth와 결합하여 구성될 때, 귀속 기록은 베어러 토큰(bearer token)에서 추출하여 검증된 클레임(claim)인 acting_principal_id를 포함합니다. 세 가지 식별자가 감사 추적(audit trail)으로 흐르게 됩니다: 무엇이 동작했는가(Agent-ID), 누가 책임이 있는가(Owner-ID), 누가 승인했는가(acting principal). 베어러 토큰 자체는 기록에 남지 않으며, 오직 검증된 클레임만이 유지됩니다.

코드에서의 모습

이미 HTTP를 통해 에이전트를 실행하고 있다면, AGTP는 추가적인 요소(additive)로 작용합니다. 네트워크 포맷(wire format)은 JSON으로 유지됩니다. TLS는 기존 방식대로 작동합니다. OAuth, 범위 강제(scope enforcement), 그리고 비즈니스 규칙을 위한 기존 애플리케이션 로직은 그대로 제 역할을 수행합니다.

Python 참조 구현체를 사용하면 단 몇 줄의 코드로 AGTP 요청을 보낼 수 있습니다:

from agtp import AgentClient

client = AgentClient(
...

서버 측 디스패치 (dispatch) 도 동일한 형태를 따르며, 핸들러 (handler)가 실행되기 전 요청 컨텍스트 (request context)에서 표준 Agent-ID, Authority-Scope, Owner-ID를 사용할 수 있습니다:

from agtp import AgentServer

server = AgentServer(agent_id="...", cert_path="./server-cert.pem")
...

MCP-on-AGTP 게이트웨이는 수정되지 않은 공식 MCP 서버를 AGTP 와이어 (wire) 뒤에서 이미 실행하고 있으며, 이는 MCP, A2A, ACP 및 기타 에이전트 메시징 프로토콜 (messaging protocols)이 메시징 레이어 (messaging layer)의 변경 없이 AGTP를 기질 (substrate)로 삼아 동작할 수 있음을 입증합니다.

살펴볼 곳

사양 (Specs)은 github.com/nomoticai/agtp에 있으며, 핵심 초안 (core draft)은 agtp.io에 있습니다. 또한 신뢰 (trust), 식별자 (identifiers), 로깅 (logging), 신원 인증서 (identity certificates), 디스커버리 (discovery), 컴포지션 (composition), 세션 (session)에 관한 동반 초안 (companion drafts)들도 제공됩니다. 라이브 레지스트리 (registry)는 registry.agtp.io에서 운영됩니다. 포트 (Port) 4480은 TCP와 QUIC 모두를 위해 예약되어 있습니다.

이 작업은 공개되어 있습니다. 구현 (Implementations)은 언제나 환영합니다. 실제 배포 사례가 더 빨리 나타날수록, 사양은 에이전트 경제 (agent economy)가 신뢰할 수 있는 형태로 더 빠르게 견고해질 것입니다. 에이전트 트래픽 (agent traffic)이 중요한 무엇인가를 구축하고 있다면, 지금이 바로 이를 시도해 볼 적기입니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0