Skip to content

ADK_REVIEW

lazybrain80 edited this page May 23, 2026 · 8 revisions

Google ADK ๊ฒ€ํ†  โ€” ๋…ผ์˜ ์ž๋ฃŒ

โš ๏ธ ์ด ๋ฌธ์„œ๋Š” ๋…ผ์˜ยท๊ฒ€ํ† ์šฉ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์„ค๊ณ„ ๊ฒฐ์ •์— ๋ฐ˜์˜๋œ ๋‚ด์šฉ์ด ์•„๋‹ˆ๋ฉฐ, 7๊ฐœ ์„ค๊ณ„ deliverable์˜ ๋ถˆ๋ณ€์‹์„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ADK(Agent Development Kit, ์—์ด์ „ํŠธ ๊ฐœ๋ฐœ ํ‚คํŠธ) ์ฑ„ํƒ ์—ฌ๋ถ€๋Š” ๋ฏธ๊ฒฐ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์ž‘์„ฑ์ผ: 2026-05-23

ํ˜„์žฌ orchestrator๋Š” LangGraph + Claude Agent SDK(Software Development Kit, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ‚คํŠธ) ๋กœ MCP(Model Context Protocol, ๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ) ์„œ๋ฒ„ 3๊ฐœ๋ฅผ LLM(Large Language Model, ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ) ๋„๊ตฌ๋กœ ๋…ธ์ถœํ•œ๋‹ค (OSS_INTEGRATION ยง3.3). "Google ADK๋กœ๋„ ๋™์ผํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€, ๊ทธ๋ฆฌ๊ณ  ๋„์ž… ์ด์ ์ด ์žˆ๋Š”๊ฐ€"๋ฅผ ๊ฒ€ํ† ํ•œ ๋ฉ”๋ชจ.

1. ๋‘ ๊ฒฐ์ •์€ ์„œ๋กœ ๋…๋ฆฝ์ ์ด๋‹ค

๊ฐ€์žฅ ๋จผ์ € ๋ถ„๋ฆฌํ•ด์•ผ ํ•  ์ : ํ”„๋ ˆ์ž„์›Œํฌ ๊ต์ฒด์™€ ๋ชจ๋ธ ๊ต์ฒด๋Š” ๋ณ„๊ฐœ์˜ ๊ฒฐ์ •์ด๋‹ค.

๊ฒฐ์ • ์ถ• ์„ ํƒ์ง€ ๋น„๊ณ 
ํ”„๋ ˆ์ž„์›Œํฌ LangGraph + Claude Agent SDK โ†” Google ADK ADK๋Š” ๋ชจ๋ธ ์ค‘๋ฆฝ์ 
๋ชจ๋ธ Claude(Opus/Sonnet) โ†” Gemini โ†” ๊ธฐํƒ€ LiteLLM ๋ž˜ํผ๋กœ ๊ต์ฐจ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋”ฐ๋ผ์„œ "ADK + Claude" ๋„, "Claude Agent SDK ์œ ์ง€ + ๋ชจ๋ธ๋งŒ Gemini" ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ADK ๋„์ž…์ด ๊ณง Gemini ์ฑ„ํƒ์„ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š”๋‹ค.

MCP๋Š” ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด๋ผ ์„œ๋ฒ„ ์ธก(mcp-robot-adapter ๋“ฑ 3๊ฐœ)์€ ์–ด๋А ๊ฒฝ์šฐ๋“  ๋ณ€๊ฒฝ ๋ถˆํ•„์š”ํ•˜๋‹ค. ๋ฐ”๋€Œ๋Š” ๊ฒƒ์€ orchestrator ์•ˆ์˜ LLM ํ˜ธ์ถœ์ž๋ฟ์ด๋‹ค.

2. ๋ชจ๋ธ ์„ฑ๋Šฅ โ€” Gemini 3.5 Flash vs Claude Opus 4.7

ํ•ญ๋ชฉ Gemini 3.5 Flash Claude Opus 4.7 ์ด ํ”„๋กœ์ ํŠธ ์ค‘์š”๋„
์ถœ๋ ฅ ์†๋„ / TTFT(Time To First Token, ์ฒซ ํ† ํฐ๊นŒ์ง€ ์‹œ๊ฐ„) ~4๋ฐฐ ๋น ๋ฆ„, <500ms 1โ€“3์ดˆ โ–ณ
๋น„์šฉ (input/output, 1M tokens) ~$0.075 / ~$0.30 ~$15 / ~$75 (~100๋ฐฐ) โ—Ž
์ค‘์ฒฉ tool callยท์—๋Ÿฌ ๋ณต๊ตฌ ์–‘ํ˜ธ ๋” ์‹ ๋ขฐ์„ฑ ๋†’์Œ โ—Ž
๊ธด ๋ฉ€ํ‹ฐํ„ด instruction adherence ๋ณดํ†ต ์šฐ์ˆ˜ โ—Ž
agentic ๋ฒค์น˜ (MCP Atlas, Toolathlon ๋“ฑ) Flash๊ฐ€ ์ƒํšŒ (๊ตฌ๊ธ€ ๋ฐœํ‘œ ๊ธฐ์ค€) โ€” โ—‹

ํ•ด์„:

  • orchestrator๋Š” vision/zone/enter ๊ฐ™์€ ์‚ฌ๋žŒ-์ƒํ˜ธ์ž‘์šฉ ํŽ˜์ด์Šค์˜ ์ด๋ฒคํŠธ ํŠธ๋ฆฌ๊ฑฐ์ด๊ณ  per-session lock์œผ๋กœ ์ง๋ ฌํ™”๋œ๋‹ค (SYSTEM_DESIGN ยง7.3). ์ดˆ๋‹น ์ˆ˜์‹ญ ๋ฒˆ ๋„๋Š” tight loop์ด ์•„๋‹ˆ๋ฏ€๋กœ Flash์˜ ์†๋„ ์šฐ์œ„๊ฐ€ ๊ฒฐ์ •์ ์ด์ง€ ์•Š๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ์ถœ๋ ฅ์€ ๋กœ๋ด‡ ๋ฌผ๋ฆฌ ๋™์ž‘ ๋ช…๋ น์ด๋‹ค. ์ค‘์ฒฉ tool call ์‹ ๋ขฐ์„ฑยท์กฐ๊ฑด๋ถ€ instruction ์ค€์ˆ˜๊ฐ€ ์•ˆ์ „๊ณผ ์ง๊ฒฐ๋˜์–ด Opus์˜ ๊ฐ•์ ์ด ์ •๋‹นํ™”๋œ๋‹ค. ์ด๋Š” SYSTEM_DESIGN ยง15์—์„œ Opus(ํ’ˆ์งˆ) vs Sonnet(latency)์„ ์ €์šธ์งˆํ•˜๋˜ ์ถ•๊ณผ ๊ฐ™๋‹ค.
  • ๋น„์šฉ 100๋ฐฐ ์ฐจ์ด๋Š” ๋ฌด์‹œ ๋ชป ํ•œ๋‹ค. ๊ฐ€๋“œ๋ ˆ์ผ์ด ์ด๋ฏธ MCP ์„œ๋ฒ„ ์ธก์— ๊ฐ•์ œ๋˜๋ฏ€๋กœ(JSON schema โ†’ capability whitelist โ†’ zone polygon clamp โ†’ velocity clamp), "๋ชจ๋ธ์ด ๊ฐ€๋” ํ‹€๋ ค๋„ ์„œ๋ฒ„์—์„œ ๋ง‰ํžŒ๋‹ค"๋Š” ์•ˆ์ „๋ง์ด ์žˆ๋‹ค. โ†’ ์ €๋นˆ๋„ ๋‹จ์ˆœ ๊ฒฐ์ •์€ ์ €๋น„์šฉ ๋ชจ๋ธ, ๊ณ ์œ„ํ—˜ ๊ฒฐ์ •์€ Opus ๊ฐ™์€ ํ‹ฐ์–ด๋ง ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค.

์š”์ง€: Gemini๋กœ ๋ฐ”๊ฟ€ ๊ฐ•ํ•œ ์ด์œ ๋Š” ์„ฑ๋Šฅ์ด ์•„๋‹ˆ๋ผ ๋น„์šฉ์ด๋‹ค. ์•ˆ์ „ยท์‹ ๋ขฐ์„ฑ ๊ด€์ ์—์„  Claude Opus๊ฐ€ ์ด ์›Œํฌ๋กœ๋“œ์— ์—ฌ์ „ํžˆ ๋” ๋ถ€ํ•ฉํ•œ๋‹ค.

3. Google ADK ๋„์ž… ์ด์  (ํ”„๋ ˆ์ž„์›Œํฌ)

ADK๋Š” 2026๋…„ 1.0 GA(General Availability, ์ •์‹ ์ถœ์‹œ) ์— ๋„๋‹ฌํ–ˆ๊ณ  (Python/Go/Java/TypeScript), ์ฃผ์š” ๊ฐ•์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ข‹์€ ์ 

  • MCP 1๊ธ‰ ์ง€์› โ€” MCPToolset์œผ๋กœ MCP ์„œ๋ฒ„๋ฅผ ๋ถ™์ด๋ฉด ๋„๊ตฌ ์ž๋™ ๋“ฑ๋ก. ๊ธฐ์กด MCP ์„œ๋ฒ„ 3๊ฐœ๋Š” ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉ.
  • ์ถ”๋ก ์„ ์„œ๋ธŒ ์—์ด์ „ํŠธ๋กœ ์ชผ๊ฐœ๊ธฐ ํŽธํ•˜๋‹ค (ํŽธ์˜) โ€” orchestrator๊ฐ€ ํ”„๋กœ์„ธ์Šค๋กœ๋Š” ํ•˜๋‚˜์—ฌ๋„, ๊ทธ ์•ˆ์˜ ํŒ๋‹จ์„ ์—ญํ• ๋ณ„ ์„œ๋ธŒ ์—์ด์ „ํŠธ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ) ์•ˆ์ „ ํŒ๋‹จ โ†’ ๋กœ๋ด‡ ๋™์ž‘ ๊ณ„ํš / ํƒœ๋ธ”๋ฆฟ UX ์‘๋‹ต. ADK๋Š” ์ด๋Ÿฐ ์œ„์ž„ ๊ตฌ์กฐ๋ฅผ LlmAgent+sub_agents, Sequential/Parallel/Loop ๊ฐ™์€ ๊ธฐ์„ฑ ์ถ”์ƒํ™”๋กœ ์ ์€ ์ฝ”๋“œ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ ์ด๋Š” ADK๋งŒ์˜ ๊ณ ์œ  ๋Šฅ๋ ฅ์ด ์•„๋‹ˆ๋‹ค โ€” ํ˜„์žฌ LangGraph ์„ค๊ณ„๋„ call_claude ํ•œ ๋…ธ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ์ชผ๊ฐœ๋ฉด ๋™์ผํ•˜๊ฒŒ ๋œ๋‹ค(์•„๋ž˜ ยง3.2). ์ฆ‰ ์ฐจ์ด๋Š” "ํ•  ์ˆ˜ ์žˆ๋А๋ƒ"๊ฐ€ ์•„๋‹ˆ๋ผ "์–ผ๋งˆ๋‚˜ ์ ์€ ์†์œผ๋กœ ํ‘œํ˜„ํ•˜๋А๋ƒ"์˜ ํŽธ์˜ ๋ฌธ์ œ๋‹ค.
  • Vertex AI / GKE(Google Kubernetes Engine, ๊ตฌ๊ธ€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์—”์ง„) ๋ฐฐํฌ ํ†ตํ•ฉ โ€” GCP(Google Cloud Platform, ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ) ์œ„์—์„œ ์šด์˜ํ•œ๋‹ค๋ฉด ๋งค๋„๋Ÿฌ์›€.

์ด ํ”„๋กœ์ ํŠธ์— ํ•œํ•ด ํšŒ์˜์ ์ธ ์ 

  • ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ (A2A(Agent-to-Agent, ์—์ด์ „ํŠธ ๊ฐ„ ํ†ต์‹ )) โ€” ADK๋Š” ๋ณ„๊ฐœ๋กœ ๋–  ์žˆ๋Š” ์—์ด์ „ํŠธ๋“ค์ด ์„œ๋กœ ์ง์ ‘ ๋Œ€ํ™”ํ•˜๋ฉฐ ์ผ์„ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์„ ์ž˜ ์ง€์›ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ MQTT ํ•œ ๊ณณ์„ ๊ฑฐ์ณ์„œ๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ๋กœ ์ •ํ–ˆ๊ณ (์„ค๊ณ„ ๋ถˆ๋ณ€์‹), ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋Š” ๋ณ„๋„ ์—์ด์ „ํŠธ ์„œ๋น„์Šค๋„ ์—†๋‹ค. ์ด ์ธต์œ„์—์„œ๋Š” A2A๋ฅผ ์“ธ ์ž๋ฆฌ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค. (orchestrator "์•ˆ"์˜ ์„œ๋ธŒ ์—์ด์ „ํŠธ ๋ถ„ํ•ด๋Š” ๋ณ„๊ฐœ๋กœ ์‹ค์ต์ด ์žˆ์–ด ์œ„ "์ข‹์€ ์ "์— ์ •๋ฆฌ)
  • ์„ธ์…˜ ์ƒํƒœ ๊ด€๋ฆฌ โ€” ADK๋Š” ๋Œ€ํ™” ๋งฅ๋ฝยท์ง„ํ–‰ ์ƒํƒœ๋ฅผ ์ž๊ธฐ ์•ˆ์— ์ €์žฅํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋ชจ๋“  ์ƒํƒœ๋ฅผ Home Assistant ํ•œ ๊ณณ์—๋งŒ ์ €์žฅํ•˜๊ธฐ๋กœ ๋ชป ๋ฐ•์•˜๋‹ค(orchestrator๋Š” ์ƒํƒœ๋ฅผ ์•ˆ ๋“ค๊ณ  ๋งค๋ฒˆ HA์—์„œ ์กฐํšŒํ•˜๋Š” stateless graph). ADK์˜ ์ƒํƒœ ์ €์žฅ ๊ธฐ๋Šฅ์„ ์ „๋ฉด์ ์œผ๋กœ ์ผœ๋ฉด "์ƒํƒœ๋ฅผ ๋‘ ๊ณณ์— ๋‘๋Š”" ์…ˆ์ด๋ผ ์›์น™๊ณผ ์ถฉ๋Œํ•œ๋‹ค. ๋‹ค๋งŒ ์„œ๋ธŒ ์—์ด์ „ํŠธ ๋ถ„ํ•ด๋ฅผ ์“ฐ๋”๋ผ๋„ ์˜์† ์ƒํƒœ๋Š” HA์— ๋‘๊ณ  ADK ์„ธ์…˜ ์ƒํƒœ๋Š” ๋‹จ์ผ ์š”์ฒญ ์ฒ˜๋ฆฌ ์ค‘์˜ ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋งŒ ์ œํ•œํ•˜๋ฉด ์ถฉ๋Œ ์—†์ด ์–‘๋ฆฝ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐฐํฌ ๋ชจ๋ธ์ด ghcr.io ๊ธฐ๋ฐ˜ cloud-build/local-run (DEPLOYMENT) ์ด๋ผ GCP ์ข…์† ์ด์ ์ด ์•ฝํ•˜๋‹ค.
  • ํ”„๋กฌํ”„ํŠธ ์บ์‹ฑ ๋ฆฌ์Šคํฌ: "system prompt + zone playbook โ†’ Anthropic prompt caching" ์ตœ์ ํ™”๋Š” Claude Agent SDK๊ฐ€ Anthropic API๋ฅผ ์ง์ ‘ ์น  ๋•Œ ๊ฐ€์žฅ ๊น”๋”ํ•˜๋‹ค. ADK๊ฐ€ Claude๋ฅผ LiteLLM ๊ฒฝ์œ ๋กœ ๋ถ€๋ฅด๋ฉด cache_control ์ „๋‹ฌ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•ด์•ผ ํ•˜๊ณ , ์•ˆ ๋˜๋ฉด ๋น„์šฉ ์ด์ ์ด ๊นŽ์ธ๋‹ค.

3.1 ๋Œ€ํ™” ์ƒํƒœ ์ €์žฅ: ADK vs LangGraph (์ž๋ฃŒ ์กฐ์‚ฌ)

์œ„ "์„ธ์…˜ ์ƒํƒœ ๊ด€๋ฆฌ" ํ•ญ๋ชฉ์˜ ํ•ต์‹ฌ ์งˆ๋ฌธ โ€” ๋Œ€ํ™” ๋‚ด์šฉ์„ ๊ธฐ์–ตยท์ €์žฅํ•˜๋Š” ์ผ ๋•Œ๋ฌธ์— ADK๊ฐ€ ๊ผญ ํ•„์š”ํ•œ๊ฐ€, ์•„๋‹ˆ๋ฉด LangGraph๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•œ๊ฐ€ โ€” ๋ฅผ ๊ณต๊ฐœ ์ž๋ฃŒ๋กœ ํ™•์ธํ–ˆ๋‹ค.

๋จผ์ € ์šฉ์–ด ์ •๋ฆฌ. ์—ฌ๊ธฐ์„œ "์ƒํƒœ(state)"๋Š” ๋กœ๋ด‡ยท์‹œ์Šคํ…œ์ด ๋Œ€ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ ์ ์–ด ๋‘๋Š” ๋ฉ”๋ชจ์žฅ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "์ด ์†๋‹˜์€ ์ข€ ์ „์— ์ปคํ”ผ๋ฅผ ๊ณจ๋ž๋‹ค" ๊ฐ™์€ ๋‚ด์šฉ์„ ์ ์–ด ๋’€๋‹ค๊ฐ€ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ๋‹ค์‹œ ๊บผ๋‚ด ์“ฐ๋Š” ์‹์ด๋‹ค. ์ด ๋ฉ”๋ชจ์žฅ์„ ์ž ๊น ์“ฐ๊ณ  ๋ฒ„๋ฆด์ง€(์ฒ˜๋ฆฌ ์ค‘์—๋งŒ), ์•„๋‹ˆ๋ฉด ์–ด๋”˜๊ฐ€์— ์˜ค๋ž˜ ๋ณด๊ด€ํ• ์ง€๊ฐ€ ๋‘ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋น„๊ต ํฌ์ธํŠธ๋‹ค.

๋‘ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋Œ€ํ™” ๋‚ด์šฉ์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹

ํ•ญ๋ชฉ LangGraph Google ADK
๋Œ€ํ™” ๋„์ค‘ ๊ธฐ์–ตํ•˜๋Š” ๋ฒ• ๊ณต์šฉ ๋ฉ”๋ชจ์žฅ์„ ๋‹จ๊ณ„๋งˆ๋‹ค ๋Œ๋ ค๊ฐ€๋ฉฐ ์ฝ๊ณ  ์”€ ๊ณต์šฉ ๋ฉ”๋ชจ์žฅ์— ๋‹จ๊ณ„๋งˆ๋‹ค ์ ๊ณ  ์ฝ์Œ (๊ฑฐ์˜ ๋™์ผ)
์˜ค๋ž˜ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ "์ฒดํฌํฌ์ธํ„ฐ(Checkpointer)"๊ฐ€ ๋‹จ๊ณ„๋งˆ๋‹ค ์ž๋™์œผ๋กœ ์ €์žฅ "์„ธ์…˜ ์„œ๋น„์Šค(SessionService)"๊ฐ€ ์ €์žฅ
์ €์žฅ ์žฅ์†Œ ์„ ํƒ ๋ฉ”๋ชจ๋ฆฌยทSQLiteยทPostgresยทRedis ์ค‘ ๊ณจ๋ผ ๋ผ์›€(์ž์œ  ๊ต์ฒด) ๊ธฐ๋ณธ์€ ๋ฉ”๋ชจ๋ฆฌ, ์˜ค๋ž˜ ์ €์žฅํ•˜๋ ค๋ฉด ๊ตฌ๊ธ€ Vertex AI
์—ฌ๋Ÿฌ ๋Œ€ํ™”๋ฅผ ๊ธธ๊ฒŒ ๋ˆ„์  ์™ธ๋ถ€ ์ €์žฅ์†Œ๋ฅผ ์ง์ ‘ ์—ฐ๊ฒฐ ์ „์šฉ "๋ฉ”๋ชจ๋ฆฌ ์„œ๋น„์Šค"(๋ฒกํ„ฐ DB ๋“ฑ) ์ œ๊ณต
ํŠน์ด ๊ธฐ๋Šฅ ๊ณผ๊ฑฐ ์‹œ์ ์œผ๋กœ ๋˜๊ฐ์•„์„œ ๋””๋ฒ„๊น… A2Aยท๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ์™€ ๋งค๋„๋Ÿฌ์šด ์—ฐ๋™
ํŠน์ • ํ”Œ๋žซํผ์— ๋ฌถ์ด๋‚˜ ์•ˆ ๋ฌถ์ž„ โ€” ์–ด๋””์„œ ๋Œ๋ฆฌ๋“  ๊ฐ™์€ ์ฝ”๋“œ ์˜ค๋ž˜ ์ €์žฅํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ๋กœ ๊ธฐ์›€

์šฐ๋ฆฌ ์„ค๊ณ„(๊ธฐ์–ต์€ Home Assistant ํ•œ ๊ณณ์—๋งŒ ๋ณด๊ด€, orchestrator๋Š” ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋“ค๊ณ  ์žˆ์Œ)์— ๋Œ€์ž…ํ•˜๋ฉด:

  • ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์‚ฌ์‹ค: ๋‘ ๋„๊ตฌ ๋ชจ๋‘ "์˜ค๋ž˜ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊บผ๋‘˜ ์ˆ˜ ์žˆ๋‹ค." LangGraph๋Š” ์ €์žฅ ์žฅ์น˜๋ฅผ ์•ˆ ๋ถ™์ด๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์šฉ๋งŒ ์“ฐ๋ฉด ๋˜๊ณ , ADK๋„ ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋“œ๋งŒ ์“ฐ๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋Œ€ํ™” ๋‚ด์šฉ์ด ๋””์Šคํฌ์— ๋‚จ์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ๋งŒ ์ž ๊น ๊ธฐ์–ตํ–ˆ๋‹ค๊ฐ€ ๋ฒ„๋ฆฐ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” "์ง„์งœ ๊ธฐ์–ต(์˜๊ตฌ ๋ณด๊ด€)์€ Home Assistant(HA)์—๋งŒ ๋‘”๋‹ค"๊ณ  ์ •ํ–ˆ์œผ๋ฏ€๋กœ, ์–ด๋А ๋„๊ตฌ๋ฅผ ์“ฐ๋“  ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด ์ €์žฅ์€ ๊บผ๋‘๊ณ  ํ•„์š”ํ•œ ๊ฐ’์€ HA์—์„œ ์ฝ์–ด์˜ค๋ฉด ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋Œ€ํ™” ๊ธฐ์–ตยท์ €์žฅ๋งŒ ๋†“๊ณ  ๋ณด๋ฉด ADK๊ฐ€ ๊ผญ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋‹ค. ADK๊ฐ€ ๋‚ด์„ธ์šฐ๋Š” ์ €์žฅ ๊ธฐ๋Šฅ(๋ฉ”๋ชจ๋ฆฌ ์„œ๋น„์Šค, Vertex ์˜๊ตฌ ์ €์žฅ)์€ ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ถ€๋Ÿฌ ์•ˆ ์“ฐ๊ธฐ๋กœ ํ•œ ๊ฒƒ์ด๋ผ ์ด ๋ถ€๋ถ„์—์„œ๋Š” ์žฅ์ ์ด ๋˜์ง€ ๋ชปํ•œ๋‹ค.
  • ์˜คํžˆ๋ ค ์ด ์ ์—์„  LangGraph๊ฐ€ ๋” ์ž˜ ๋งž๋Š”๋‹ค: ์ €์žฅ ์žฅ์†Œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ์–ด ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ์— ๋ฌถ์ด์ง€ ์•Š๊ณ , ๋‚˜์ค‘์— ํ•„์š”ํ•ด์ง€๋ฉด SQLite๋‚˜ Postgres๋ฅผ ์ฝ”๋“œ๋ฅผ ๊ฑฐ์˜ ์•ˆ ๋ฐ”๊พธ๊ณ  ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๋ก (์ด ํ•ญ๋ชฉ ํ•œ์ •): ๋Œ€ํ™” ๋‚ด์šฉ ๊ธฐ์–ตยท์ €์žฅ์€ LangGraph๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋ฉฐ, ์ด๊ฒƒ์ด ADK๋ฅผ ๋„์ž…ํ•  ์ด์œ ๊ฐ€ ๋˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ADK๋ฅผ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ๊ทธ ์ด์œ ๋Š” ์ €์žฅ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ์ถ”๋ก ์„ ์„œ๋ธŒ ์—์ด์ „ํŠธ๋กœ ์ชผ๊ฐœ ํ‘œํ˜„ํ•˜๋Š” ํŽธ์˜(ยง3 ์ข‹์€ ์ )์—์„œ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ๋‹จ ๊ทธ ํŽธ์˜์กฐ์ฐจ "์—†๋˜ ๋Šฅ๋ ฅ"์€ ์•„๋‹ˆ๋‹ค(ยง3.2 ์ฐธ๊ณ ).

3.2 ํ˜„์žฌ ์„ค๊ณ„(LangGraph)๋กœ๋„ ์„œ๋ธŒ ์—์ด์ „ํŠธ ๋ถ„ํ•ด๊ฐ€ ๋˜๋Š”๊ฐ€?

๋œ๋‹ค. ์„œ๋ธŒ ์—์ด์ „ํŠธ ๋ถ„ํ•ด๋Š” LangGraph๊ฐ€ ๋ณธ๋ž˜ ํ•˜๋Š” ์ผ์ด๋ผ, ํ˜„์žฌ ์„ค๊ณ„์— ๋น ์ง„ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋‹ค.

ํ˜„์žฌ ยง3.3์˜ ๊ทธ๋ž˜ํ”„๋Š” LLM ํ˜ธ์ถœ์„ call_claude ๋…ธ๋“œ ํ•˜๋‚˜๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ๊ทธ๋ ค ๋†จ์„ ๋ฟ์ด๋‹ค.

ํ˜„์žฌ:  assemble_context โ†’ call_claude โ†’ guardrail โ†’ dispatch

์ด call_claude ํ•œ ๋…ธ๋“œ๋ฅผ ์—ญํ• ๋ณ„๋กœ ๋‚˜๋ˆ„๋ฉด ๊ทธ๋Œ€๋กœ ์„œ๋ธŒ ์—์ด์ „ํŠธ ๋ถ„ํ•ด๊ฐ€ ๋œ๋‹ค.

๋ถ„ํ•ด ์˜ˆ:
  assemble_context โ†’ safety_reason โ”€โ”         (์•ˆ์ „ยท๊ธˆ์ง€๊ตฌ์—ญ ํŒ๋‹จ)
                     action_plan   โ”€โ”ค         (๋กœ๋ด‡ ๋™์ž‘ ๊ณ„ํš)
                     tablet_reply  โ”€โ”ดโ†’ guardrail โ†’ dispatch   (ํƒœ๋ธ”๋ฆฟ UX ์‘๋‹ต)
  (ํ•„์š”ํ•˜๋ฉด supervisor ๋…ธ๋“œ๊ฐ€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์–ด๋””๋กœ ๋ณด๋‚ผ์ง€ ์œ„์ž„)

LangGraph๋Š” ๋…ธ๋“œ๋ฅผ ๋ฌถ๋Š” subgraph, ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฐˆ๋ผ์ง€๋Š” ์กฐ๊ฑด๋ถ€ ์—ฃ์ง€, ํ•œ ๋…ธ๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ผ์„ ๋งก๊ธฐ๋Š” supervisor(๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ) ํŒจํ„ด์„ ๋ชจ๋‘ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰ ์ƒˆ ํ”„๋ ˆ์ž„์›Œํฌ(ADK) ๋„์ž… ์—†์ด ์ง€๊ธˆ ๊ตฌ์กฐ์—์„œ ๋ฐ”๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚จ๋Š” ์ฐจ์ด๋Š” "๋Šฅ๋ ฅ"์ด ์•„๋‹ˆ๋ผ "ํ‘œํ˜„ ๋ฐฉ์‹"๋ฟ์ด๋‹ค.

LangGraph (ํ˜„์žฌ ์„ค๊ณ„) Google ADK
๋ถ„ํ•ดํ•˜๋Š” ๋ฒ• ๋…ธ๋“œยท์—ฃ์ง€ยทsubgraph๋ฅผ ์ง์ ‘ ์กฐ๋ฆฝ LlmAgent+sub_agents ์œ„์ž„์„ ์„ ์–ธ
์„ฑํ–ฅ ๋” ๋ช…์‹œ์ , ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ด ์ฝ”๋“œ๊ฐ€ ์ ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ตฌ์„ฑ
์•ˆ์ „ ๋ณด์žฅ ๋ถ„ํ•ด๋ฅผ ์–ด๋””์„œ ํ‘œํ˜„ํ•˜๋“  ๋™์ผ โ€” ๊ฐ€๋“œ๋ ˆ์ผ์€ MCP ์„œ๋ฒ„ ์ธก์— ์žˆ์Œ ๋™์ผ

์š”์•ฝ: ์„œ๋ธŒ ์—์ด์ „ํŠธ ๋ถ„ํ•ด๋Š” ํ˜„์žฌ ์„ค๊ณ„์˜ ํ•œ๊ณ„๊ฐ€ ์•„๋‹ˆ๋‹ค. ADK๊ฐ€ ์ฃผ๋Š” ๊ฑด "๋” ์ ์€ ์ฝ”๋“œ๋กœ ์„ ์–ธํ•˜๋Š” ํŽธ์˜"์ด์ง€ "์—†๋˜ ๋Šฅ๋ ฅ"์ด ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ํ•ญ๋ชฉ๋„ ADK ๋„์ž…์˜ ๊ฒฐ์ •์  ๊ทผ๊ฑฐ๋Š” ๋˜์ง€ ๋ชปํ•œ๋‹ค.

4. ์ •๋ฆฌ / ๊ถŒ๊ณ  ๋ฐฉํ–ฅ

  • ๋ชจ๋ธ: Gemini์˜ ๋งค๋ ฅ์€ ์†๋„๋ณด๋‹ค ๋น„์šฉ(100x). ๋‹จ ์•ˆ์ „ ๋ช…๋ น ๋””์ŠคํŒจ์น˜ ์›Œํฌ๋กœ๋“œ ํŠน์„ฑ์ƒ Claude์˜ tool-use ์‹ ๋ขฐ์„ฑ์ด ๋” ๋ถ€ํ•ฉ โ†’ ์ „๋ฉด ๊ต์ฒด๋ณด๋‹ค ํ‹ฐ์–ด๋ง ๊ฒ€ํ† ๊ฐ€ ํ•ฉ๋ฆฌ์ .
  • ํ”„๋ ˆ์ž„์›Œํฌ: ADK๋Š” ํ›Œ๋ฅญํ•˜๋‚˜, MQTT ์ค‘์‹ฌยทHA ์ƒํƒœ์ €์žฅยท้žGCP ๋ฐฐํฌ ๊ตฌ์กฐ์—์„œ๋Š” LangGraph ๋Œ€๋น„ ์ถ”๊ฐ€ ์ด๋“์ด ์ œํ•œ์ ์ด๊ณ  prompt caching ๊ฒ€์ฆ ๋ถ€๋‹ด์ด ์ƒ๊ธด๋‹ค. ๋Œ€ํ™” ์ƒํƒœ ์ €์žฅ ์ถ•์€ ์ž๋ฃŒ ์กฐ์‚ฌ(ยง3.1) ๊ฒฐ๊ณผ LangGraph๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค. ์„œ๋ธŒ ์—์ด์ „ํŠธ ๋ถ„ํ•ด๋„ ํ˜„์žฌ LangGraph ์„ค๊ณ„๋กœ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ(ยง3.2), ADK๊ฐ€ ์ฃผ๋Š” ๊ฒƒ์€ "๊ณ ์œ  ๋Šฅ๋ ฅ"์ด ์•„๋‹ˆ๋ผ "๋” ์ ์€ ์ฝ”๋“œ๋กœ ์„ ์–ธํ•˜๋Š” ํŽธ์˜"์— ๊ทธ์นœ๋‹ค โ€” ๋‹จ๋…์œผ๋กœ ๋„์ž…์„ ์ •๋‹นํ™”ํ•  ๊ฒฐ์ •์  ๊ทผ๊ฑฐ๋Š” ์•ฝํ•˜๋‹ค.
  • ๋‘ ๋ณ€๊ฒฝ ๋ชจ๋‘ SYSTEM_DESIGN ยง15์— ์—†๋Š” ์‹ ๊ทœ ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •์ด๋ฏ€๋กœ, ์„ค๊ณ„ ๋ฐ˜์˜ ์ „ ํ•ฉ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

5. ์ถœ์ฒ˜

Clone this wiki locally