๐ฏ ์์ด์ ํธ ํ๋กํ ์ฝ
MCP ยท A2A ยท AG-UI โ ์์ด์ ํธ ์ฐ๊ฒฐ์ ํ์คํํ๋ ํ๋กํ ์ฝ ์ํ๊ณ
์์ด์ ํธ ํ๋กํ ์ฝ
MCP ยท A2A ยท AG-UI ยท ์ ํ ๊ธฐ์ค
์ฐ๊ฒฐ์ ํ์คํ
์์ด์ ํธ โ ๋๊ตฌ, ์์ด์ ํธ โ ์์ด์ ํธ, ์์ด์ ํธ โ ์ฌ์ฉ์
์ํ๊ณ ๊ฐ์
์ ํ์ค์ด ํ์ํ๊ฐ ยท 3๊ณ์ธต ยท ํ๋กํ ์ฝ ํฌ์ง์ ๋
์ํ๊ณ ๊ฐ์
NรM ํตํฉ ๋ฌธ์ ์ ์ด๋ฅผ ํธ๋ 3๊ณ์ธต ํ๋กํ ์ฝ ์คํ์ ์กฐ๊ฐ
MCP ยท A2A ยท AG-UI
๋๊ตฌยท์์ด์ ํธยท์ฌ์ฉ์ โ ์ธ ๋ฐฉํฅ์ ์ฐ๊ฒฐ์ ๊ฐ๊ฐ ๋ค๋ฅธ ํ์ค์ด ๋ด๋นํฉ๋๋ค.
- NรM ๋ฌธ์ โ ํ์ค ์์ด๋ ์ปค๋ฅํฐ ์กฐํฉ ํญ๋ฐ
- MCP โ ์์ด์ ํธ โ ๋๊ตฌ/๋ฐ์ดํฐ (์์ง)
- A2A โ ์์ด์ ํธ โ ์์ด์ ํธ (์ํ)
- AG-UI โ ์์ด์ ํธ โ ์ฌ์ฉ์ (์ ๋ฉด)
์ธ ํ๋กํ ์ฝ์ ๊ฒฝ์์ด ์๋๋ผ ์๋ก ๋ค๋ฅธ ์ฐ๊ฒฐ์ ๋ด๋นํ๋ ์ํธ ๋ณด์ ๊ด๊ณ์ ๋๋ค โ ํํธ 2ยท3ยท4์์ ํ๋์ฉ ๋ค๋ฃน๋๋ค.
NรM ํตํฉ ๋ฌธ์
์์ด์ ํธ 10๊ฐ ร ๋๊ตฌ 10๊ฐ = 100๊ฐ ์ปค์คํ ์ปค๋ฅํฐ โ ํ์ค์ด ์์ผ๋ฉด ์กฐํฉ ํญ๋ฐ
๋๊ตฌ ์ถ๊ฐ ์ ๋ชจ๋ ์์ด์ ํธ ์์
NรM ์ปค๋ฅํฐ ๊ด๋ฆฌ ๋ถ๊ฐ โ 1๊ฐ ํ์ค ์ธํฐํ์ด์ค๋ก ํต์ผ
์ ๋๊ตฌ = MCP ์๋ฒ 1๊ฐ ์ถ๊ฐ
๋ชจ๋ ์์ด์ ํธ๊ฐ ์ฆ์ ์ฌ์ฉ
ํ๋ฆฐํฐ, ๋ง์ฐ์ค, ํค๋ณด๋ ํฌํธ๊ฐ ๊ฐ๊ฐ ๋ค๋ฆ
์ ๊ธฐ๊ธฐ = ์ ํฌํธ ํ์ โ USB-C ์๋ โ ํ๋์ ํฌํธ๋ก ๋ชจ๋ ๊ฒ
์ถฉ์ , ๋ฐ์ดํฐ, ๋์คํ๋ ์ด, ์ค๋์ค
๊ธฐ๊ธฐ๊ฐ ๋์ด๋ ํฌํธ๋ ๋์ผ
3๊ณ์ธต ํ๋กํ ์ฝ ์คํ
๊ฐ ํ๋กํ ์ฝ์ด ๋ค๋ฅธ "์ฐ๊ฒฐ"์ ๋ด๋น โ ์์ง(๋๊ตฌ) ยท ์ํ(์์ด์ ํธ) ยท ์ ๋ฉด(์ฌ์ฉ์)
AG-UI โ ์์ด์ ํธ โ ์ฌ์ฉ์
ํ๋ก ํธ์๋ ์ค์๊ฐ ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ. CopilotKit ๊ฐ๋ฐ.
A2A โ ์์ด์ ํธ โ ์์ด์ ํธ
๋ ๋ฆฝ ์์ด์ ํธ ๊ฐ ํ์คํฌ ์์๊ณผ ๊ฒฐ๊ณผ ๊ตํ. Google ๋ฐํ.
MCP โ ์์ด์ ํธ โ ๋๊ตฌ/๋ฐ์ดํฐ
๋ชจ๋ธ์ด ๋๊ตฌ๋ฅผ ํธ์ถํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ํ์ค. Anthropic ๋ฐํ.
ํ๋กํ ์ฝ ๋น๊ต
๊ฐ์ "์ฐ๊ฒฐ"์ด๋ผ๋ ์๋ก ๋ค๋ฅธ ๋ฐฉํฅ๊ณผ ๋ชฉ์
| ํญ๋ชฉ | MCP | A2A | AG-UI |
|---|---|---|---|
| ์ฐ๊ฒฐ ๋ฐฉํฅ | ์์ง โ AgentโTool | ์ํ โ AgentโAgent | ์ ๋ฉด โ AgentโUser |
| ํต์ฌ ๋์ | ๋๊ตฌ ํธ์ถ, ๋ฐ์ดํฐ ์ฝ๊ธฐ | ํ์คํฌ ์์, ๊ฒฐ๊ณผ ์์ | ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ, ์ํ ๋๊ธฐํ |
| ๋ฐํ/๊ฑฐ๋ฒ๋์ค | Anthropic 2024-11 โ Agentic AI Foundation (Linux Foundation ์ฐํ, 2025-12) | Google 2025-04 โ Linux Foundation | CopilotKit 2025 โ ์คํ์์ค |
| ์ ์ก | stdio ยท Streamable HTTP | JSON-RPC 2.0 ยท gRPC ยท HTTP+JSON(REST) โ ์ ๋ฐ์ดํธ ์์ ์ SSEยทPush Notification | SSE(๋ํ) โ ์ ์ก ๋ฌด๊ด(WebSocketยทwebhook ๊ฐ๋ฅ) |
| ๋ฐ๊ฒฌ ๋ฐฉ์ | MCP ์๋ฒ ๋ชฉ๋ก ์๋ ๋ฑ๋ก | Agent Card (.well-known) | SDK ์ฐ๊ฒฐ ์ ์๋ |
์ฐ๊ฒฐ ๋ฐฉํฅ์ด ๋ค๋ฅด๋ฉด ์ ์กยท๋ฐ๊ฒฌ ๋ฐฉ์๋ ๋ฌ๋ผ์ง๋๋ค โ ์์ง์ MCP, ์ํ์ A2A, ์ ๋ฉด์ AG-UI๋ก ๊ธฐ์ตํ๋ฉด ์ถฉ๋ถํฉ๋๋ค.
MCP
Tools ยท Resources ยท Prompts โ ์์ด์ ํธ์ ์๊ณผ ๋
MCP
์์ด์ ํธ๊ฐ ๋๊ตฌ๋ฅผ ํธ์ถํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ํ์ค โ HostยทClientยทServer 3๊ณ์ธต
Host ยท Client ยท Server
JSON-RPC 2.0 ์์์ 3๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๋๊ตฌยท๋ฐ์ดํฐยทํ ํ๋ฆฟ์ ํ์ค ์ธํฐํ์ด์ค๋ก ์ฐ๊ฒฐํฉ๋๋ค.
- 3๊ณ์ธต ์ํคํ ์ฒ โ Host ยท Client ยท Server
- 3๊ฐ์ง Primitive โ Tools ยท Resources ยท Prompts
- ์ ์ก 2์ข โ stdio(๋ก์ปฌ) ยท Streamable HTTP(์๊ฒฉ)
- FastMCP โ ๋ฐ์ฝ๋ ์ดํฐ๋ก ์๋ฒ ๊ตฌํ
์ํคํ ์ฒ โ Primitive โ ์ ์ก โ ์ฝ๋ ์์ผ๋ก ๋ด๋ ค๊ฐ๋๋ค โ ์๋ฒ ํ๋๋ฅผ ๋ง๋ค๋ฉด ๋ชจ๋ MCP ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ๋๊ตฌ๋ฅผ ์๋๋ค.
๊ฐ์ ์๊ณ โ 2026-07-28 ๋๊ท๋ชจ ์คํ ๊ฐ์ ์ต์ข ํ ์์ (RC ๊ณต๊ฐ): ํ๋กํ ์ฝ statelessํ ยท Tasks ์ ์ ํ์ฅ ยท Roots/Sampling/Logging ๋จ๊ณ์ ํ๊ธฐ(12๊ฐ์ ์ ์). ๋ณธ๋ฌธ ์์ ์ ํํ ์คํ(2025-11-25) ๊ธฐ์ค์ด๋ฉฐ ํ์ ์ ๋ฐ์ ์์ ์ ๋๋ค.
MCP ์ํคํ ์ฒ
Host โ Client โ Server 3๊ณ์ธต ๊ตฌ์กฐ โ JSON-RPC 2.0 ์์์ ๋์
-
1
Host
- AI ์ ํ๋ฆฌ์ผ์ด์ (Kiro, Claude Code, Cursor ๋ฑ)
- ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ Client์ ์ ๋ฌ
- ๋ชจ๋ธ ์ถ๋ก ๊ณผ UI๋ฅผ ๋ด๋น
-
2
Client
- Host ์์์ MCP ์๋ฒ์ 1:1 ์ฐ๊ฒฐ ์ ์ง
- JSON-RPC ์์ฒญ์ ์๋ฒ์ ์ ์ก
- ๋๊ตฌ ๋ชฉ๋ก ์กฐํ (tools/list) + ๋๊ตฌ ์คํ (tools/call)
-
3
Server
- 3๊ฐ์ง Primitive๋ฅผ ๋ ธ์ถํ๋ ํ๋ก์ธ์ค
- Tools: ๋ชจ๋ธ์ด ํธ์ถํ ์ ์๋ ํจ์
- Resources: ๋ชจ๋ธ์ด ์ฝ์ ์ ์๋ ๋ฐ์ดํฐ
- Prompts: ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํ ํ๋ฆฟ
-
4
์ธ๋ถ ์์คํ
- API, DB, ํ์ผ์์คํ , SaaS ๋ฑ
- Server๊ฐ ๋ํํ์ฌ ํ์ค ์ธํฐํ์ด์ค ์ ๊ณต
- ์์ด์ ํธ๋ ์ธ๋ถ ์์คํ ๊ตฌํ์ ๋ชจ๋ฆ
์์ด์ ํธ๋ ์ธ๋ถ ์์คํ ๊ตฌํ์ ๋ชจ๋ฅธ ์ฑ Server๊ฐ ๋ ธ์ถํ ํ์ค ์ธํฐํ์ด์ค๋ง ํธ์ถํฉ๋๋ค โ ์ด ๊ณ์ธต ๋ถ๋ฆฌ๊ฐ NรM ๋ฌธ์ ๋ฅผ ๋๋ ์ง์ ์ ๋๋ค.
3๊ฐ์ง Primitive
MCP ์๋ฒ๊ฐ ๋ ธ์ถํ๋ 3์ข ๋ฅ์ ๋ฅ๋ ฅ โ ๋๊ตฌยท๋ฐ์ดํฐยทํ ํ๋ฆฟ
Tools (๋๊ตฌ)
๋ชจ๋ธ์ด ํธ์ถํ ์ ์๋ ํจ์ โ ๋ถ์์ฉ(side-effect) ๊ฐ๋ฅ
์: ์ด๋ฉ์ผ ์ ์ก, DB ์ฟผ๋ฆฌ, ํ์ผ ์์ฑ
Resources (๋ฐ์ดํฐ)
๋ชจ๋ธ์ด ์ฝ์ ์ ์๋ ์ ์ /๋์ ๋ฐ์ดํฐ
์: ํ์ผ ๋ด์ฉ, DB ๋ ์ฝ๋, API ์๋ต
Prompts (ํ ํ๋ฆฟ)
์ฌ์ ์ ์๋ ํ๋กฌํํธ ํ
ํ๋ฆฟ
์: ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋กฌํํธ, ๋ฒ์ญ ํ๋กฌํํธ
Tools๋ง ๋ถ์์ฉ์ด ๊ฐ๋ฅํ๊ณ Resources๋ ์ฝ๊ธฐ ์ ์ฉ, Prompts๋ ์ฌ์ฉ์๊ฐ ์ ํํฉ๋๋ค โ ์ ์ด ์ฃผ์ฒด(modelยทapplicationยทuser)๊ฐ ์ธ Primitive๋ฅผ ๊ฐ๋ฅด๋ ๊ธฐ์ค์ ๋๋ค.
์ ์ก ๋ฐฉ์
๋ก์ปฌ(stdio)๊ณผ ์๊ฒฉ(Streamable HTTP) โ ํ๊ฒฝ์ ๋ง๊ฒ ์ ํ
stdio
๋ก์ปฌ ํ๋ก์ธ์ค
- CLI ํ๋ก์ธ์ค๋ฅผ stdin/stdout์ผ๋ก ํต์
- ์ธ์ฆ ๋ถํ์ โ ๋ก์ปฌ ํ๋ก์ธ์ค ๊ถํ ์์
- ๊ฐ๋ฐ ํ๊ฒฝ์ ์ต์ (์ค์น ์ฆ์ ์ฌ์ฉ)
- uvx, npx๋ก MCP ์๋ฒ ๋ฐ๋ก ์คํ
๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ MCP ์๋ฒ๋ฅผ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์์ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. IDE(Kiro, Cursor)๊ฐ ์๋ฒ ํ๋ก์ธ์ค๋ฅผ ์ง์ ์คํํฉ๋๋ค.
Streamable HTTP
์๊ฒฉ ์๋ฒ
- HTTP ์๋ํฌ์ธํธ๋ก ์ฐ๊ฒฐ โ ํ ๊ณต์ ๊ฐ๋ฅ
- OAuth 2.1 ์ธ์ฆ ์ง์
- AgentCore Gateway๋ก ๊ด๋ฆฌํ ๋ฐฐํฌ
- SSE(deprecated) โ Streamable HTTP๋ก ์ ํ
ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋์ผ MCP ์๋ฒ์ ์ ์ํฉ๋๋ค. ์ธ์ฆยท๊ด์ธกยท์ค์ผ์ผ๋ง์ Gateway๊ฐ ๊ด๋ฆฌํฉ๋๋ค.
๊ฐ๋ฐ์ stdio๋ก ์ฆ์ ์์ํ๊ณ , ํ ๊ณต์ ยทํ๋ก๋์ ์ OAuth 2.1 ์ธ์ฆ์ด ๊ฐ๋ฅํ Streamable HTTP๋ก ์ ํํฉ๋๋ค.
MCP ์๋ฒ ์ฝ๋
FastMCP๋ก 3์ค์ด๋ฉด ์์ฑ๋๋ MCP ์๋ฒ
from mcp.server.fastmcp import FastMCP
# ์๋ฒ ์์ฑ โ ์ด๋ฆ์ด ํด๋ผ์ด์ธํธ์ ๋
ธ์ถ๋ฉ๋๋ค
mcp = FastMCP("weather-server")
# ๋๊ตฌ ๋ฑ๋ก โ ๋ฐ์ฝ๋ ์ดํฐ๋ง ๋ถ์ด๋ฉด ํจ์๊ฐ Tool์ด ๋ฉ๋๋ค
@mcp.tool()
def get_weather(city: str) -> str:
"""๋์์ ํ์ฌ ๋ ์จ๋ฅผ ์กฐํํฉ๋๋ค."""
# ์ธ๋ถ API ํธ์ถ
return f"{city}: ๋ง์, 24ยฐC"
@mcp.resource("config://settings")
def get_settings() -> str:
"""์๋ฒ ์ค์ ์ ๋ฐํํฉ๋๋ค."""
return '{"unit": "celsius", "lang": "ko"}'
# ์คํ โ streamable-http๋ก ์๊ฒฉ ํด๋ผ์ด์ธํธ ์ ์ ํ์ฉ
if __name__ == "__main__":
mcp.run(transport="streamable-http")
A2A
Agent Card ยท Task Lifecycle ยท ์์๊ณผ ๊ฒฐ๊ณผ
A2A
๋ ๋ฆฝ ๋ฐฐํฌ๋ ์์ด์ ํธ๋ผ๋ฆฌ ์์ ์ ์์ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ํ์ค โ ๋ฐ๊ฒฌ์์ ๋ฐํ๊น์ง
Agent Card ยท Task ยท Artifact
์์ด์ ํธ๊ฐ ์๋ก์ ๋ฅ๋ ฅ์ ๋ฐ๊ฒฌํ๊ณ , ํ์คํฌ๋ฅผ ์์ํ๊ณ , ์ฐ์ถ๋ฌผ์ ๊ตฌ์กฐํํ์ฌ ๋๋ ค๋ฐ์ต๋๋ค.
- Agent Card โ /.well-known ๋ฅ๋ ฅ ์ ์ธ
- Task Lifecycle โ submitted โ working โ ํฐ๋ฏธ๋ ์ํ
- Message Parts โ text ยท file ยท data
- MCP์ ์ํธ ๋ณด์ โ ๋๊ตฌ๋ ์์ง, ์์์ ์ํ
๋ฐ๊ฒฌ โ ์์ โ ์งํ ๋ณด๊ณ โ ๊ฒฐ๊ณผ ๋ฐํ์ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๊ณ , ๋ง์ง๋ง์ MCP์์ ์ญํ ๊ฒฝ๊ณ๋ฅผ ํ์ธํฉ๋๋ค.
A2A ํต์ฌ ๊ฐ๋
๋ ๋ฆฝ ์์ด์ ํธ๊ฐ ์๋ก๋ฅผ ๋ฐ๊ฒฌํ๊ณ , ์์ ์ ์์ํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ํ์ค
-
1
Agent Card ๋ฐํ
- /.well-known/agent-card.json์ ๋ฅ๋ ฅ ์ ์ธ
- ์ด๋ฆ, ์ค๋ช , ์ง์ ์คํฌ, ์ธ์ฆ ๋ฐฉ์ ๋ช ์
- ๋ค๋ฅธ ์์ด์ ํธ๊ฐ ์ด ์นด๋๋ฅผ ์ฝ์ด ๋ฅ๋ ฅ ๋ฐ๊ฒฌ
-
2
ํ์คํฌ ์์ฑ
- calling agent๊ฐ JSON-RPC๋ก message/send ์์ฒญ
- Task ID ๋ฐ๊ธ โ ์ํ ์ถ์ ์์
- ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ Message Parts(text/file/data)๋ก ์ ๋ฌ
-
3
์ฒ๋ฆฌ (working)
- called agent๊ฐ ๋น๋๊ธฐ๋ก ์์ ์ํ
- SSE ์คํธ๋ฆฌ๋ฐ ๋๋ push notification์ผ๋ก ์งํ ๋ณด๊ณ
- ์ค๊ฐ artifact(์ฐ์ถ๋ฌผ)๋ฅผ ์ ์ง์ ์ผ๋ก ๋ฐํ
-
4
๊ฒฐ๊ณผ ๋ฐํ
- ์ํ: completed / failed / canceled
- ์ต์ข artifact๋ฅผ Message Parts๋ก ๋ฐํ
- calling agent๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์๊ธฐ ์ปจํ ์คํธ์ ํตํฉ
calling agent๋ Task ID๋ก ์ํ๋ฅผ ์ถ์ ํ ๋ฟ, ์ค์ ์ํ์ called agent๊ฐ ์์จ์ ์ผ๋ก ํ๋จํฉ๋๋ค โ ๋๊ตฌ ํธ์ถ๊ณผ ๊ฐ๋ผ์ง๋ ์ง์ ์ ๋๋ค.
Task Lifecycle
ํ์คํฌ ์ํ ์ ์ด โ submitted์์ ์์ํ์ฌ completed/failed/canceled/rejected ํฐ๋ฏธ๋ ์ํ๋ก ์ข ๋ฃ
-
1
submitted
calling agent๊ฐ message/send ํธ์ถ
Task ๊ฐ์ฒด ์์ฑ โ ๊ณ ์ ID ๋ถ์ฌ
์์ง ์ฒ๋ฆฌ ์์ ์ ๋จ -
2
working
called agent๊ฐ ์์ ์ํ ์ค
SSE๋ก ์งํ ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ ๊ฐ๋ฅ
์ค๊ฐ ์ฐ์ถ๋ฌผ(artifact) ์ ์ง ๋ฐํ -
3
input-required
์ถ๊ฐ ์ ๋ณด๊ฐ ํ์ํ์ฌ ๋๊ธฐ
calling agent์๊ฒ ์ง๋ฌธ ์ ์ก
์๋ต ํ working์ผ๋ก ๋ณต๊ท -
4
ํฐ๋ฏธ๋ ์ํ
์ฑ๊ณต completed โ ์ต์ข artifact
์คํจ failed โ ์๋ฌ ๋ฉ์์ง
์ทจ์ canceled โ tasks/cancel ์์ฒญ
๊ฑฐ์ rejected โ called agent๊ฐ ์ํ ๊ฑฐ๋ถ
input-required๋ ๋นํฐ๋ฏธ๋ ์๋ณต ์ง์ ์ ๋๋ค โ ์๋ตํ๋ฉด working์ผ๋ก ๋ณต๊ทํฉ๋๋ค. ์คํ์๋ ์ธ์ฆ ๋๊ธฐ์ฉ ๋นํฐ๋ฏธ๋ ์ํ auth-required๋ ์ ์๋์ด ์์ผ๋ฉฐ, ๋๋จธ์ง ์ ์ด๋ ํฐ๋ฏธ๋ ์ํ๋ก ์งํํฉ๋๋ค.
MCP vs A2A โ ์ธ์ ๋ฌด์์
MCP = ๋๊ตฌ ์ฐ๊ฒฐ(์์ง), A2A = ์์ด์ ํธ ์์(์ํ) โ ์ํธ ๋ณด์์
๋๊ธฐ์ ํจ์ ํธ์ถ์ด๋ฉด MCP, ์์จ ํ๋จ์ด ํ์ํ ๋น๋๊ธฐ ์์์ด๋ฉด A2A์ ๋๋ค โ ํ๋๊ฐ ๋ค๋ฅธ ํ๋๋ฅผ ๋์ฒดํ์ง ์์ต๋๋ค.
AG-UI
Agent โ Frontend ยท ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ ยท ์ค์๊ฐ ๋๊ธฐํ
AG-UI
์์ด์ ํธ ๋ฐฑ์๋์ ๋์์ ํ๋ก ํธ์๋์ ์ค์๊ฐ ์ ๋ฌํ๋ ํ์ค โ SSE(๋ํ ์ ์ก) ์์ typed ์ด๋ฒคํธ
Agent โ Frontend ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ
์์ด์ ํธ์ ๋ชจ๋ ๋์์ typed JSON events๋ก ํ๋ก ํธ์๋์ ์ค์๊ฐ ์ ๋ฌํฉ๋๋ค.
- SSE(๋ํ) โ ์ ์ก ๋ฌด๊ด(WebSocketยทwebhook ๊ฐ๋ฅ)
- TEXT_MESSAGE ยท TOOL_CALL ยท STATE_DELTA ยท LIFECYCLE
- CopilotKit ๊ฐ๋ฐ โ ์คํ ํ์ค
- ํ๋ ์์ํฌ ๋ฌด๊ด โ Strands ยท LangGraph ยท CrewAI
ํ ์คํธ๋ง ํ๋ฆฌ๋ ์ฑํ API์ ๋ฌ๋ฆฌ ๋๊ตฌ ํธ์ถ๊ณผ ์ํ ๋ณ๊ฒฝ๊น์ง ์ด๋ฒคํธ๋ก ์ ๋ฌํฉ๋๋ค โ UI๊ฐ ์์ด์ ํธ๋ฅผ ์์ ํ ์๊ฐํํฉ๋๋ค.
AG-UI ๊ฐ์
์์ด์ ํธ ๋ฐฑ์๋์ ๋ชจ๋ ๋์์ ํ๋ก ํธ์๋์ ์ค์๊ฐ์ผ๋ก ์ ๋ฌํ๋ ์ด๋ฒคํธ ํ๋กํ ์ฝ
AG-UI = Agent-User Interaction Protocol. CopilotKit์ด ๊ฐ๋ฐํ ์คํ ํ์ค์ผ๋ก, SSE๋ฅผ ํตํด typed JSON events๋ฅผ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. ํ๋ ์์ํฌ ๋ฌด๊ด โ Strands, LangGraph, CrewAI ๋ชจ๋ ์ง์.
-
1
์์ด์ ํธ ์คํ
- ๋ฐฑ์๋์์ ์์ด์ ํธ๊ฐ ์์ ์ํ
- Strands Agent, LangGraph ๋ฑ ์ด๋ค ํ๋ ์์ํฌ๋
- ์คํ ์ค ์ด๋ฒคํธ๋ฅผ AG-UI ํฌ๋งท์ผ๋ก ๋ฐฉ์ถ
-
2
SSE ์คํธ๋ฆฌ๋ฐ
- Server-Sent Events๋ก ์ด๋ฒคํธ ์ ์ก
- messages, tool_calls, state_patches, lifecycle
- ๋จ์ผ HTTP ์ฐ๊ฒฐ๋ก ๋ชจ๋ ์ด๋ฒคํธ ์ ๋ฌ
-
3
ํ๋ก ํธ์๋ ์์
- React/Vue/Svelte ๋ฑ ํ๋ก ํธ์๋๊ฐ ์ด๋ฒคํธ ์๋น
- ์ฑํ UI ์ค์๊ฐ ์ ๋ฐ์ดํธ
- ์ํ ๋๊ธฐํ โ ์์ด์ ํธ ์ํ๋ฅผ UI์ ๋ฐ์
AG-UI ์ด๋ฒคํธ ์ ํ
์์ด์ ํธ ๋์์ ๋ชจ๋ ๋จ๋ฉด์ ์ด๋ฒคํธ๋ก ํํ
| ์ด๋ฒคํธ | ์ญํ | ์์ |
|---|---|---|
| TEXT_MESSAGE_* | ํ ์คํธ ๋ฉ์์ง ์คํธ๋ฆฌ๋ฐ | start โ content(ํ ํฐ) โ end |
| TOOL_CALL_* | ๋๊ตฌ ํธ์ถ๊ณผ ๊ฒฐ๊ณผ | start โ args โ end (์คํ ๊ฒฐ๊ณผ) |
| STATE_DELTA | ์์ด์ ํธ ์ํ ๋ณ๊ฒฝ | JSON Patch๋ก UI ์ํ ๋๊ธฐํ |
| LIFECYCLE | ์คํ ์๋ช ์ฃผ๊ธฐ | RUN_STARTED โ RUN_FINISHED |
| CUSTOM | ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ด๋ฒคํธ | ์งํ๋ฅ , ์๋ฆผ, UI ๋ช ๋ น ๋ฑ |
๋ฉ์์งยท๋๊ตฌยท์ํยท์๋ช ์ฃผ๊ธฐ ๋ค ๊ณ์ด์ด ํ์ค ์ด๋ฒคํธ๋ก ์ ์๋๊ณ , ๊ทธ ๋ฐ์ ์๊ตฌ๋ CUSTOM ์ด๋ฒคํธ๋ก ํ์ฅํฉ๋๋ค.
AG-UI vs ์ผ๋ฐ ์ฑํ API
๋จ์ ํ ์คํธ ์คํธ๋ฆฌ๋ฐ์ ๋์ด, ์์ด์ ํธ์ ์ ์ฒด ๋์์ UI์ ๋๊ธฐํ
์ผ๋ฐ ์ฑํ API
- ํ ์คํธ ํ ํฐ๋ง ์คํธ๋ฆฌ๋ฐ
- ๋๊ตฌ ํธ์ถ ์ UI๊ฐ ์ ์ ์์
- ์์ด์ ํธ ๋ด๋ถ ์ํ ๋น๊ฐ์
- ํ๋ก ํธ์๋๊ฐ ์๋์ผ๋ก ์ํ ์ถ์
๊ธฐ๋ณธ LLM API(Converse, Chat Completions)๋ ํ ์คํธ๋ง ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. ์์ด์ ํธ๊ฐ ๋ฌด์์ ํ๊ณ ์๋์ง ํ๋ก ํธ์๋๊ฐ ์ ์ ์์ต๋๋ค.
AG-UI
- ํ ์คํธ + ๋๊ตฌ ํธ์ถ + ์ํ ์ ๋ถ ์คํธ๋ฆฌ๋ฐ
- ๋๊ตฌ ์คํ ์ค UI์ ์ค์๊ฐ ํ์
- STATE_DELTA๋ก ๊ณต์ ์ํ ์๋ ๋๊ธฐํ
- ์์ด์ ํธ์ UI๊ฐ ๊ฐ์ ์ํ๋ฅผ ๊ณต์
AG-UI๋ ์์ด์ ํธ์ ๋ชจ๋ ๋์(์๊ฐ, ๋๊ตฌ ํธ์ถ, ์ํ ๋ณ๊ฒฝ)์ ์ด๋ฒคํธ๋ก ์ ๋ฌํฉ๋๋ค. ํ๋ก ํธ์๋๊ฐ ์์ด์ ํธ๋ฅผ ์์ ํ ์๊ฐํํฉ๋๋ค.
์ผ๋ฐ ์ฑํ API๋ ํ ์คํธ ํ ํฐ๋ง ๋ณด๋ด์ง๋ง, AG-UI๋ STATE_DELTA๋ก ์์ด์ ํธ์ UI๊ฐ ๊ฐ์ ์ํ๋ฅผ ๊ณต์ ํ๊ฒ ๋ง๋ญ๋๋ค.
์ ํ ๊ฐ์ด๋
์ธ์ ์ด๋ค ํ๋กํ ์ฝ์ โ ์์ฌ ๊ฒฐ์ ํ๋ฆ
์ ํ ๊ฐ์ด๋
์ฐ๊ฒฐ ๋์์ด ๋ฌด์์ธ์ง์ ๋ฐ๋ผ ํ๋กํ ์ฝ์ ๊ณ ๋ฅด๊ณ ์กฐํฉํ๋ ํ๋จ ๊ธฐ์ค
๋ฌด์์ ์ฐ๊ฒฐํ๋๊ฐ๊ฐ ํ๋กํ ์ฝ์ ๊ฒฐ์
๋๊ตฌ๋ฅผ ์ฐ๊ฒฐํ๋ฉด MCP, ์์ด์ ํธ์ ์์ํ๋ฉด A2A, ์ฌ์ฉ์ ์์ ๋ ธ์ถํ๋ฉด AG-UI์ ๋๋ค.
- ์์ฌ ๊ฒฐ์ ํ๋ฆ โ ์ฐ๊ฒฐ ๋์ 3๊ฐ์ง ์ง๋ฌธ
- ์กฐํฉ ํจํด โ ๊ธฐ๋ฐ(MCP) ยท ํ์ฅ(A2A) ยท ํ๋ฉด(AG-UI)
- ๋์ ์์ โ MCP โ A2A โ AG-UI
์ธ ํ๋กํ ์ฝ์ ๋ชจ๋ ๊ฐ์ถ ํ์๋ ์์ต๋๋ค โ ์ฐ๊ฒฐํ๋ ค๋ ๋์์ด ๋ฌด์์ธ์ง๊ฐ ์ ์ผํ ํ๋จ ๊ธฐ์ค์ ๋๋ค.
์์ฌ ๊ฒฐ์ ํ๋ฆ
๋ฌด์์ ์ฐ๊ฒฐํ๋ ค๋์ง์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ ํ๋กํ ์ฝ
-
1
๋๊ตฌ/๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐ?
- ์ธ๋ถ API, DB, ํ์ผ์ ์ ๊ทผํด์ผ ํ๋๊ฐ?
- โ MCP ์๋ฒ๋ฅผ ๋ง๋ค์ด ์์ด์ ํธ์ ์ฐ๊ฒฐ
- ๊ฐ์ฅ ๋จผ์ , ๊ฐ์ฅ ์์ฃผ ํ์ํ ํ๋กํ ์ฝ
-
2
๋ค๋ฅธ ์์ด์ ํธ์ ์์?
- ๋ ๋ฆฝ ๋ฐฐํฌ๋ ์ ๋ฌธ ์์ด์ ํธ์๊ฒ ์์ ์ ๋งก๊ธฐ๋๊ฐ?
- ๊ฒฐ๊ณผ๋ฅผ ๋น๋๊ธฐ๋ก ๋ฐ์๋ ๋๋๊ฐ?
- โ A2A๋ก ์์ด์ ํธ ๊ฐ ํ์คํฌ ์์
-
3
์ฌ์ฉ์ UI์ ์ฐ๋?
- ์์ด์ ํธ ๋์์ ์ค์๊ฐ์ผ๋ก ๋ณด์ฌ์ค์ผ ํ๋๊ฐ?
- ๊ณต์ ์ํ(์ฅ๋ฐ๊ตฌ๋, ํผ ๋ฑ)๋ฅผ ๋๊ธฐํํด์ผ ํ๋๊ฐ?
- โ AG-UI๋ก ํ๋ก ํธ์๋ ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ
ํ๋กํ ์ฝ ์กฐํฉ ํจํด
์ค์ ํ๋ก๋์ ์์ ์ธ ํ๋กํ ์ฝ์ด ํ ์ํคํ ์ฒ์ ๊ณต์กด โ ๊ธฐ๋ฐ(MCP) ยท ํ์ฅ(A2A) ยท ํ๋ฉด(AG-UI)
-
1
MCP (๊ธฐ๋ฐ)
- ๋ชจ๋ ์์ด์ ํธ๊ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉ โ ๊ธฐ๋ณธ ๋ ์ด์ด
- Gateway๋ก ์ค์ ๊ด๋ฆฌ + ์ธ์ฆ + ๊ด์ธก
- ์: ๋ ์จ API, DB ์ฟผ๋ฆฌ, ํ์ผ ์ฝ๊ธฐ
-
2
A2A (ํ์ฅ)
- ์ ๋ฌธ ์์ด์ ํธ๋ฅผ ํ์ฒ๋ผ ์กฐ์ง
- ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ specialist์๊ฒ ์์
- ์: ์ฝ๋ ๋ฆฌ๋ทฐ์ด, ๋ณด์ ์ค์บ๋, ๋ฒ์ญ๊ธฐ
-
3
AG-UI (ํ๋ฉด)
- ์ต์ข ์ฌ์ฉ์์๊ฒ ์์ด์ ํธ๋ฅผ ๋ ธ์ถ
- ์ฑํ , ๋์๋ณด๋, ์ฝํ์ผ๋ฟ UI
- ์: Streamlit + CopilotKit + React
MCP๊ฐ ๊ธฐ๋ฐ, A2A๊ฐ ํ์ฅ, AG-UI๊ฐ ํ๋ฉด์ ๋๋ค โ ํ๋ก๋์ ์์๋ ์ธ ํ๋กํ ์ฝ์ด ํ ์ํคํ ์ฒ ์์์ ๊ณต์กดํฉ๋๋ค.
๋์ ์์
๋ชจ๋ ๊ฒ์ ํ ๋ฒ์ ๊ฐ์ถ ํ์ ์๋ ๋จ๊ณ์ ๋์ ์์
MCP ๋จผ์ โ A2A ํ์ํ ๋ โ AG-UI ์ฌ์ฉ์ ์์
MCP ์์ด A2A๋ฅผ ์ธ ์ด์ ๊ฐ ์๊ณ , ์ฌ์ฉ์ UI๊ฐ ์์ผ๋ฉด AG-UI๋ ๋ถํ์ํฉ๋๋ค. ์์๋ฅผ ์งํค์ธ์.
- 1. MCP โ ๋๊ตฌ ์ฐ๊ฒฐ
- 2. A2A โ ์์ด์ ํธ ์์
- 3. AG-UI โ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
๊ฐ ํ๋กํ ์ฝ์ ์ญํ ์ ๊ตฌ๋ถํ๋ฉด ์ํคํ ์ฒ๊ฐ ๋ช ํํด์ง๋๋ค.