Google ADK 실전 가이드 — Python·TypeScript로 AI 에이전트 만들기, LangChain·Mastra와 비교
Google이 2026년 4월 TypeScript 버전을 추가 출시한 ADK(Agent Development Kit) 완전 분석. 멀티 에이전트 계층 구조, Python·TypeScript 퀵스타트, LLM judge 기반 평가 파이프라인, Vertex AI 배포, LangChain·Mastra와의 실전 비교까지 코드 중심으로 정리.
AI 에이전트를 만들 때 가장 어려운 건 "어디에 어떻게 배포하느냐"다. LangChain으로 프로토타입은 금방 만들지만, 프로덕션 수준의 추적, 평가, 배포 파이프라인을 갖추려면 직접 구현해야 할 것들이 쌓인다. Google이 2026년 4월 TypeScript 버전을 추가 출시한 ADK(Agent Development Kit)는 이 문제를 공식 툴킷으로 해결하려는 시도다.
이 글은 Google ADK가 무엇인지, LangChain·Mastra와 무엇이 다른지, Python/TypeScript로 첫 에이전트를 만드는 실전 절차를 정리한다. Google Cloud나 Vertex AI를 쓰는 백엔드 개발자, AI 에이전트를 프로덕션에 올려야 하는 팀에게 필요한 판단 기준을 제공한다.
Google ADK란 무엇인가
ADK(Agent Development Kit)는 Google이 2026년 공개한 오픈소스 AI 에이전트 프레임워크다. Python과 TypeScript를 지원하며, 에이전트를 계층적으로 구성하고 프로덕션에 배포하는 전체 워크플로우를 커버한다. Apache 2.0 라이선스로 공개돼 있고, Gemini 전용이 아니라 모델 비종속(model-agnostic) 구조다.
ADK가 다른 프레임워크와 구분되는 지점은 세 가지다. 첫째, 멀티 에이전트 계층 구조가 1급 지원이다. 상위 오케스트레이터가 하위 에이전트에게 태스크를 위임하고, 각 에이전트는 고유의 도구·메모리·모델을 가질 수 있다. 둘째, 평가(Evaluation) 내장이다. LLM judge 기반으로 에이전트 출력을 자동 채점하는 파이프라인이 들어 있어 CI에 연결할 수 있다. 셋째, Vertex AI Agent Engine 직접 배포다. adk deploy 커맨드 하나로 Google Cloud의 관리형 에이전트 런타임에 올라간다.
Google ADK의 핵심 개념 — 오케스트레이터 에이전트가 서브 에이전트를 조율하는 계층 구조
LangChain·Mastra·LangGraph와 어떻게 다른가
프레임워크를 고를 때 가장 중요한 질문은 "지금 내가 풀려는 문제에 맞는가"다. 각 프레임워크의 실제 차이를 정리하면 이렇다.
정리하면, Mastra는 TypeScript 앱에 에이전트를 빠르게 붙이는 데 적합하고, LangGraph는 복잡한 상태 기계(state machine) 형태의 에이전트 플로우에 적합하다. Google ADK는 Google Cloud 인프라 위에서 프로덕션 수준의 멀티 에이전트 시스템을 구축하고 평가·배포까지 하나의 도구로 해결하고 싶을 때 강점이 있다.
Python로 첫 에이전트 만들기 — 10분 퀵스타트
Python 3.10+ 환경이 준비됐다면 아래 단계로 바로 시작할 수 있다. Google AI Studio에서 Gemini API 키를 발급받아 두는 것이 전제다.
설치 및 환경 설정
# 가상환경 생성 후 설치
python -m venv .venv && source .venv/bin/activate
pip install google-adk
# API 키 설정
export GOOGLE_API_KEY="your-gemini-api-key"
# 프로젝트 스캐폴딩 (선택)
adk create my_agent
# → my_agent/__init__.py, my_agent/agent.py, .env 생성
my_agent/agent.py — 기본 에이전트 정의
from google.adk.agents import Agent
# 커스텀 도구 정의
def get_weather(city: str) -> dict:
"""특정 도시의 현재 날씨를 반환한다."""
# 실제로는 외부 API 호출
return {"city": city, "temp_c": 22, "condition": "맑음"}
def search_docs(query: str) -> str:
"""내부 문서에서 관련 정보를 검색한다."""
# 실제로는 벡터 DB 검색
return f"'{query}'에 관한 문서 검색 결과..."
# 에이전트 정의
root_agent = Agent(
name="assistant",
model="gemini-2.0-flash", # 또는 다른 모델
description="날씨 조회와 문서 검색을 도와주는 어시스턴트",
instruction="사용자 질문에 제공된 도구를 활용해 정확하게 답변해라. "
"확실하지 않은 정보는 추측하지 말고 솔직하게 말해라.",
tools=[get_weather, search_docs], # 함수를 그대로 전달
)
로컬 실행 — 웹 UI 또는 CLI
# 방법 1: 웹 UI (adk web) — 브라우저에서 인터랙티브 테스트
adk web
# → http://localhost:8000 에서 채팅 인터페이스 제공
# 방법 2: CLI 실행
adk run my_agent
# 방법 3: Python 코드에서 직접 실행
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
session_service = InMemorySessionService()
runner = Runner(
agent=root_agent,
app_name="my_agent",
session_service=session_service
)
# 단일 쿼리 실행
from google.genai import types
async def run():
session = await session_service.create_session(
app_name="my_agent", user_id="user_1"
)
async for event in runner.run_async(
user_id="user_1",
session_id=session.id,
new_message=types.Content(
role="user",
parts=[types.Part(text="서울 날씨 알려줘")]
)
):
if event.is_final_response():
print(event.response.text)
adk web 실행 시 브라우저에서 에이전트와 직접 대화하며 테스트할 수 있다
TypeScript로 에이전트 만들기 — 4월 신규 지원
2026년 4월 출시된 TypeScript 버전(@google/adk)은 Python 버전과 API 구조가 거의 동일하다. Next.js나 Node.js 서버에 바로 통합할 수 있어 프론트엔드·풀스택 개발자에게 특히 유용하다.
TypeScript 설치 및 기본 에이전트
npm install @google/adk
# .env 파일
# GOOGLE_API_KEY=your-gemini-api-key
agent.ts — TypeScript 에이전트 정의
import { Agent, InMemorySessionService, Runner } from '@google/adk/agents';
import { Content, Part } from '@google/genai';
// 도구 정의 — JSDoc으로 설명을 명시해야 모델이 도구를 올바르게 사용한다
function getWeather(city: string): Record<string, unknown> {
/** 특정 도시의 현재 날씨를 반환한다 */
return { city, temp_c: 22, condition: 'sunny' };
}
// 에이전트 생성
const agent = new Agent({
name: 'weather_agent',
model: 'gemini-2.0-flash',
description: '날씨 정보를 제공하는 에이전트',
instruction: '사용자가 요청한 도시의 날씨를 getWeather 도구로 조회해 답변해라.',
tools: [getWeather],
});
// 실행
async function main() {
const sessionService = new InMemorySessionService();
const runner = new Runner({
agent,
appName: 'weather_app',
sessionService,
});
const session = await sessionService.createSession({
appName: 'weather_app',
userId: 'user_1',
});
const events = runner.runAsync({
userId: 'user_1',
sessionId: session.id,
newMessage: new Content({
role: 'user',
parts: [new Part({ text: '서울 날씨 알려줘' })],
}),
});
for await (const event of events) {
if (event.isFinalResponse()) {
console.log(event.response?.text);
}
}
}
main();
멀티 에이전트 구성 — 오케스트레이터 패턴
ADK의 핵심 강점은 에이전트가 다른 에이전트를 도구처럼 호출하는 계층 구조다. 오케스트레이터가 사용자 요청을 받아 전문 에이전트에게 분배하고, 결과를 조합해 응답을 만든다. 실제 엔터프라이즈 환경에서 도메인별 전문 에이전트를 독립적으로 개발하고 중앙 오케스트레이터에서 조합하는 패턴에 적합하다.
multi_agent/agent.py — 멀티 에이전트 구성
from google.adk.agents import Agent
# 전문 에이전트 1: 날씨 조회
weather_agent = Agent(
name="weather_specialist",
model="gemini-2.0-flash",
description="날씨 정보 조회 전문 에이전트. 도시별 날씨, 예보, 기상 특보를 제공한다.",
instruction="날씨 관련 질문에만 답변해라. 다른 주제는 다룰 수 없다고 명시해라.",
tools=[get_weather_api],
)
# 전문 에이전트 2: 문서 검색
docs_agent = Agent(
name="docs_specialist",
description="내부 문서 및 지식베이스 검색 전문 에이전트.",
model="gemini-2.0-flash",
instruction="문서 검색 결과를 요약해서 제공해라. 출처를 항상 명시해라.",
tools=[search_vector_db],
)
# 오케스트레이터 — 서브 에이전트를 도구로 사용
root_agent = Agent(
name="orchestrator",
model="gemini-2.0-flash",
description="사용자 요청을 분석해 적절한 전문 에이전트에게 위임하는 오케스트레이터",
instruction=(
"사용자 요청을 분석해라. "
"날씨 관련이면 weather_specialist에게 위임해라. "
"문서 검색이면 docs_specialist에게 위임해라. "
"결과를 통합해서 최종 답변을 작성해라."
),
# 서브 에이전트를 도구로 등록
agents=[weather_agent, docs_agent],
)
에이전트 라우팅 팁: 오케스트레이터의 instruction에서 각 서브 에이전트의 역할을 명확히 기술할수록 라우팅 정확도가 올라간다. 애매한 경우를 위한 fallback 지시도 함께 넣어두는 것이 좋다.
에이전트 평가(Evaluation) — CI 연동 방법
에이전트가 실제로 올바르게 작동하는지 자동으로 검증하는 것이 ADK의 차별점 중 하나다. 테스트 케이스를 JSON으로 정의하고, adk eval 명령으로 LLM judge가 출력을 자동 채점한다. GitHub Actions 같은 CI에 연결해 배포 전 품질 게이트로 사용할 수 있다.
tests/eval_dataset.json — 평가 케이스 정의
[
{
"query": "서울 날씨 알려줘",
"expected_tool_use": [
{
"tool_name": "get_weather",
"tool_input": { "city": "서울" }
}
],
"reference": "서울의 현재 날씨 정보를 get_weather 도구로 조회해 제공해야 한다."
},
{
"query": "Python asyncio 문서 찾아줘",
"expected_tool_use": [
{
"tool_name": "search_docs",
"tool_input": { "query": "Python asyncio" }
}
],
"reference": "asyncio 관련 문서를 검색해 출처와 함께 제공해야 한다."
}
]
케이스 1: 도구가 호출되지 않는다 원인: 함수의 docstring이 없거나 파라미터 타입 힌트가 불명확하다. 해결: Python은 docstring, TypeScript는 JSDoc을 반드시 추가해라. 파라미터는 str, int, dict 등 명확한 타입만 사용해라. 복잡한 중첩 객체는 단순 타입으로 분해하는 것이 좋다.
케이스 2: 멀티 에이전트에서 서브 에이전트가 무시된다 원인: 오케스트레이터 instruction이 서브 에이전트 역할을 명확히 지정하지 않았다. 해결: instruction에 "X 관련 질문은 반드시 Y 에이전트에게 위임해라"처럼 명시적으로 라우팅 규칙을 적어라. 서브 에이전트의 description도 역할이 뚜렷해야 한다.
케이스 3: Vertex AI 배포 후 타임아웃 발생 원인: Agent Engine의 기본 타임아웃이 60초로, 복잡한 멀티 에이전트 플로우에선 부족하다. 해결: adk deploy --timeout 300으로 타임아웃을 늘려라. 또는 서브 에이전트의 복잡도를 줄이고 단계를 분리해라.
Vertex AI Agent Engine에 배포하기
로컬 테스트가 완료됐다면 Vertex AI Agent Engine에 배포할 수 있다. Google Cloud 프로젝트와 Application Default Credentials(ADC)가 설정돼 있어야 한다.
Vertex AI 배포 절차
# 1. gcloud 인증
gcloud auth application-default login
gcloud config set project YOUR_PROJECT_ID
# 2. Vertex AI API 활성화
gcloud services enable aiplatform.googleapis.com
# 3. 배포
adk deploy cloud_run my_agent \
--project YOUR_PROJECT_ID \
--region us-central1 \
--service-name my-agent-service
# 또는 Vertex AI Agent Engine 직접 배포 (관리형 런타임)
adk deploy agent_engine my_agent \
--project YOUR_PROJECT_ID \
--region us-central1
# 4. 배포된 에이전트 호출 테스트
adk run --endpoint https://YOUR-ENDPOINT.run.app
Cloud Run 배포는 컨테이너 이미지를 자동으로 빌드하고 배포한다. Agent Engine은 Google이 관리하는 런타임으로, 스케일링·모니터링·로깅이 자동으로 처리된다. 프로덕션 환경에서는 Agent Engine을 권장하지만, 커스텀 환경이 필요하다면 Cloud Run이 유연하다.
누가 써야 하고 누가 쓰지 않아도 되는가
Google ADKAI 에이전트PythonTypeScriptVertex AILLM멀티 에이전트LangChainMastra에이전트 프레임워크