Back

2026년 OpenAI Agents SDK vs Google ADK vs LangGraph: 프레임워크 최종 비교

2026년 AI 에이전트 프레임워크 전쟁의 최전선에는 세 가지가 있어요. OpenAI Agents SDK, Google ADK, 그리고 LangGraph. 각각 '자율 AI 시스템은 이렇게 만들어야 해'에 대한 전혀 다른 철학을 갖고 있죠.

6개월 전만 해도 선택지가 뚜렷하지 않았어요. 본격적인 프로덕션에는 LangGraph를 쓰거나, 아니면 API 호출을 직접 이어 붙이거나. 그 세계가 통째로 바뀌었어요. OpenAI가 완전한 에이전트 프레임워크를 내놨고, Google이 Vertex AI와 깊게 연동되는 ADK를 출시했고, LangGraph는 1.0 GA를 찍으며 그래프 기반 접근을 프로덕션급으로 안착시켰죠.

문제는, 세 프레임워크 모두 "가장 쉽고" "가장 프로덕션 레디"하다고 주장한다는 거예요. 각 회사 블로그는 사실상 마케팅 자료고요. 개발자들이 진짜 필요한 건 군더더기 없는 기술 비교, 즉 뭘 잘하고, 어디서 무너지고, 내 상황에 뭐가 맞는지예요.

이 글이 정확히 그걸 합니다. 벤더 편향 없고, 약점 숨기기 없어요. 아키텍처, 도구 연동, 메모리, 멀티에이전트 패턴, 프로덕션 준비도를 실제 코드로 비교할 거예요. 끝까지 읽으면 어떤 프레임워크를 써야 할지, 그리고 언제 피해야 할지 확실해질 겁니다.

아키텍처: 세 가지 철학

세 프레임워크는 같은 아이디어의 다른 구현이 아니에요. 에이전트 시스템을 어떻게 만들어야 하는가에 대한 세 가지 서로 다른 신념이에요.

OpenAI Agents SDK: 미니멀리즘

OpenAI는 의도적으로 단순하게 갔어요. 전체 프레임워크가 네 가지 프리미티브로 끝나요: Agents, Handoffs, Guardrails, Tools. 그래프도 없고, 복잡한 오케스트레이션 엔진도 없고, 상태 머신도 없어요.

from agents import Agent, Runner agent = Agent( name="research_assistant", instructions="You are a helpful research assistant. Find accurate, up-to-date information.", model="gpt-4.1", tools=[web_search, file_reader], ) result = await Runner.run(agent, "What are the latest developments in quantum computing?") print(result.final_output)

철학이 명확해요. 에이전트 만드는 데 분산 시스템 박사 학위가 필요하면 안 된다는 거죠. 에이전트에 지시와 도구를 정의하고, 실행하고, 결과를 받아요. 에이전트 루프(모델 호출 → 도구 실행 → 결과 피드백)는 SDK가 내부적으로 처리해요.

재미있는 점은 OpenAI가 만들었으면서도 모델에 종속되지 않는다는 거예요. Chat Completions API를 구현하는 100개 이상의 비-OpenAI 모델을 지원해요. Claude, Gemini, Mistral, 로컬 모델 뭐든 꽂을 수 있어요.

Google ADK: 소프트웨어 공학 방식

Google의 Agent Development Kit은 전혀 다른 입장이에요. ADK는 에이전트를 소프트웨어 컴포넌트, 즉 모듈화 가능하고, 테스트 가능하고, 조합 가능한 단위로 다뤄요.

from google.adk.agents import Agent from google.adk.runners import Runner from google.adk.sessions import InMemorySessionService root_agent = Agent( name="coordinator", model="gemini-2.5-pro", description="Coordinates research and analysis tasks", instruction="You coordinate research tasks. Delegate to specialists when needed.", sub_agents=[research_agent, analysis_agent], tools=[web_search_tool], ) session_service = InMemorySessionService() runner = Runner(agent=root_agent, app_name="research_app", session_service=session_service) session = await session_service.create_session(app_name="research_app", user_id="user_1") response = await runner.run_async( user_id="user_1", session_id=session.id, new_message=Content(role="user", parts=[Part(text="Analyze the AI agent framework market")]) )

명시적 세션 관리, 계층적 에이전트 구조, 러너 패턴이 눈에 띄죠? ADK는 에이전트를 마이크로서비스처럼 다루길 원해요. 명확한 경계, 명시적 상태, 조합 가능한 아키텍처.

핵심 차별점은 네이티브 멀티모달 지원이에요. ADK 에이전트는 같은 워크플로우에서 텍스트, 이미지, 비디오, 오디오를 다 처리할 수 있어요. 그리고 Google Cloud(Vertex AI, Cloud Run, Agent Engine)와의 깊은 연동으로 관리형 배포가 바로 가능하고요.

LangGraph: 상태 머신

LangGraph는 에이전트 워크플로우를 영속 상태를 가진 방향 그래프로 모델링해요. 모든 결정 포인트가 노드, 모든 전환이 엣지이고, 전체 실행 흐름이 명시적이고 검사 가능해요.

from langgraph.graph import StateGraph, MessagesState, START, END from langgraph.prebuilt import ToolNode def should_continue(state: MessagesState): last_message = state["messages"][-1] if last_message.tool_calls: return "tools" return END def call_model(state: MessagesState): response = model.invoke(state["messages"]) return {"messages": [response]} workflow = StateGraph(MessagesState) workflow.add_node("agent", call_model) workflow.add_node("tools", ToolNode(tools=[web_search, calculator])) workflow.add_edge(START, "agent") workflow.add_conditional_edges("agent", should_continue, ["tools", END]) workflow.add_edge("tools", "agent") app = workflow.compile() result = await app.ainvoke({"messages": [("user", "What's 2+2 and then search for that number")]})

셋 중 가장 장황하지만, 그 장황함이 사주는 게 있어요: 실행 흐름에 대한 완전한 제어. 어떤 노드가 언제 돌아가는지 정확히 보이고, 조건 분기를 추가하고, 루프를 구현하고, 사람이 개입하는 체크포인트를 넣고, 타임 트래블 기능으로 전체 흐름을 디버깅할 수 있어요.

LangGraph는 블랙박스를 신뢰하지 않는 개발자를 위한 프레임워크예요.

철학 정리

관점OpenAI Agents SDKGoogle ADKLangGraph
핵심 비유함수 호출소프트웨어 컴포넌트상태 머신
제어 흐름암시적 (에이전트 루프)계층적 (서브 에이전트)명시적 (그래프 엣지)
코드량최소중간많음
유연성컨벤션 기반설정 기반코드 기반
사고 모델"정의하고 실행""조합하고 배포""그래프를 그리고 순회"

도구 연동: 에이전트의 핵심 역량

도구가 AI 에이전트와 챗봇을 가르는 기준이에요. 각 프레임워크가 도구 정의, 실행, 에러 복구를 어떻게 처리하느냐가 프로덕션 적합성을 말해줘요.

OpenAI Agents SDK: 세 종류의 도구

SDK는 세 가지 카테고리를 제공해요:

1. 호스팅 도구 (OpenAI가 관리하는 빌트인):

from agents import Agent, WebSearchTool, CodeInterpreterTool agent = Agent( name="analyst", instructions="You analyze data and search the web for context.", tools=[ WebSearchTool(), # 빌트인 웹 검색 CodeInterpreterTool(), # 샌드박스 코드 실행 ], )

2. 함수 도구 (직접 작성하는 커스텀 코드):

from agents import function_tool @function_tool def get_stock_price(symbol: str) -> dict: """Fetch real-time stock price for a given ticker symbol.""" response = requests.get(f"https://api.stocks.com/v1/price/{symbol}") return response.json() agent = Agent( name="financial_advisor", tools=[get_stock_price], )

3. MCP 도구 (Model Context Protocol 연동):

from agents.mcp import MCPServerStdio async with MCPServerStdio( command="npx", args=["-y", "@modelcontextprotocol/server-filesystem", "/path/to/data"] ) as server: tools = await server.list_tools() agent = Agent( name="file_agent", tools=tools, )

MCP 연동이 특히 주목할 만해요. MCP가 AI 모델과 외부 도구/데이터를 잇는 범용 프로토콜로 자리잡고 있는데, OpenAI의 퍼스트 클래스 지원 덕에 MCP 호환 서버에 바로 연결할 수 있어요.

Google ADK: 조합식 도구 설계

ADK는 도구를 카테고리별로 정리하면서 조합성과 컨텍스트 공유를 강조해요:

from google.adk.tools import FunctionTool, google_search def analyze_sentiment(text: str) -> dict: """Analyze the sentiment of the given text.""" return {"sentiment": "positive", "confidence": 0.87} sentiment_tool = FunctionTool(func=analyze_sentiment) agent = Agent( name="market_analyst", model="gemini-2.5-pro", instruction="Analyze market sentiment using web data and text analysis.", tools=[sentiment_tool, google_search], )

ADK의 킬러 기능은 에이전트를 도구로 쓸 수 있다는 점이에요:

research_agent = Agent( name="researcher", model="gemini-2.5-flash", instruction="You research topics thoroughly.", tools=[google_search], ) coordinator = Agent( name="coordinator", model="gemini-2.5-pro", instruction="Coordinate research and analysis.", tools=[research_agent.as_tool()], # 에이전트가 도구가 됨 )

이 에이전트-as-도구 패턴은 계층적 시스템에서 엄청 강력해요. 전문 에이전트가 상위 오케스트레이터의 도구 역할을 하거든요.

LangGraph: 최대 제어

LangGraph는 도구 실행에 대한 가장 세밀한 제어를 제공해요:

from langchain_core.tools import tool from langgraph.prebuilt import ToolNode @tool def web_search(query: str) -> str: """Search the web for information.""" return search_results @tool def database_query(sql: str) -> str: """Execute a SQL query against the analytics database.""" return results tool_node = ToolNode(tools=[web_search, database_query]) def route_tools(state): last_message = state["messages"][-1] if not last_message.tool_calls: return END # 커스텀 라우팅: 민감한 도구는 승인 필요 sensitive_tools = {"database_query"} called_tools = {tc["name"] for tc in last_message.tool_calls} if called_tools & sensitive_tools: return "human_approval" # 사람 개입으로 라우팅 return "tools"

핵심 차이: LangGraph는 도구 실행을 절대 추상화 뒤에 숨기지 않아요. 모든 도구 호출이 그래프에서 보이고, 도구별로 다른 노드로 라우팅하고, 어디든 승인 단계나 에러 복구를 끼워넣을 수 있어요.

도구 연동 비교

기능OpenAI Agents SDKGoogle ADKLangGraph
커스텀 함수@function_toolFunctionTool@tool
빌트인 도구웹 검색, 코드 인터프리터Google Search, 코드 실행LangChain 통합
MCP 지원퍼스트 클래스제한적커뮤니티 패키지
에이전트→도구Handoff 방식네이티브 as_tool()서브그래프
도구 승인Guardrail콜백그래프 라우팅
에러 복구자동 재시도설정 가능수동 (완전 제어)

메모리와 상태: 영속성 문제

메모리 없는 에이전트는 그냥 고급 API 호출이에요. 각 프레임워크가 단기 컨텍스트, 장기 메모리, 상태 영속을 어떻게 다루느냐가 실전 대화를 처리할 수 있는지를 결정해요.

OpenAI Agents SDK: 컨텍스트 변수

SDK는 단순하지만 효과적인 접근을 써요. 실행 도중 유지되는 컨텍스트 변수인데요:

from agents import Agent, RunContextWrapper @function_tool async def save_preference(wrapper: RunContextWrapper[dict], key: str, value: str): """Save a user preference.""" wrapper.context[key] = value return f"Saved {key} = {value}" agent = Agent( name="assistant", instructions="You remember user preferences across the conversation.", tools=[save_preference, get_preference], ) result = await Runner.run(agent, "My favorite color is blue", context={"user_id": "123"})

세션 간 영속성은 SQLiteSession 같은 백엔드로 가능해요. 직관적이지만, 전문 메모리 시스템만큼 정교하진 않아요.

Google ADK: 세션 기반 아키텍처

ADK는 셋 중 가장 체계적인 메모리 모델을 갖추고 있어요:

from google.adk.sessions import InMemorySessionService, DatabaseSessionService # 개발용 인메모리 session_service = InMemorySessionService() # 프로덕션용 PostgreSQL session_service = DatabaseSessionService(connection_string="postgresql://...") session = await session_service.create_session( app_name="my_agent", user_id="user_123", state={ "preferences": {}, "conversation_history": [], "long_term_facts": [], } )

ADK는 단기 메모리(세션 상태, 대화 컨텍스트)와 장기 메모리(플러거블 메모리 서비스)를 분리해요. 세션 개념이 프레임워크에 내장돼 있어서 모든 상호작용이 세션 안에서 일어나고, 세션은 저장, 재개, 에이전트 간 공유가 가능해요.

LangGraph: 체크포인팅과 타임 트래블

LangGraph의 메모리 모델은 가장 강력하면서 가장 복잡해요:

from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver async with AsyncPostgresSaver.from_conn_string("postgresql://...") as checkpointer: app = workflow.compile(checkpointer=checkpointer) config = {"configurable": {"thread_id": "conversation_123"}} # 모든 상태 전환이 체크포인트됨 result = await app.ainvoke( {"messages": [("user", "Research AI frameworks")]}, config=config, ) # 과거 어느 체크포인트로든 이동 (타임 트래블 디버깅) history = [state async for state in app.aget_state_history(config)] # 이전 상태로 롤백 previous_state = history[2] await app.aupdate_state(config, previous_state.values)

체크포인팅 시스템이 그래프의 모든 상태 전환을 기록해요. 이걸로 할 수 있는 것들:

  • 타임 트래블 디버깅: 과거 상태를 재생해서 뭐가 잘못됐는지 파악
  • 사람 개입: 아무 노드에서 멈추고, 사람 승인 받고, 이어서 진행
  • 재개: 장시간 워크플로우를 중단했다가 아무 지점에서 재개
  • 분기: 아무 체크포인트에서 갈라져서 대안 경로 탐색

단순 챗봇에는 과한 기능이지만, 감사 추적이 중요한 복잡한 멀티스텝 워크플로우에서는 필수예요.

메모리 비교

기능OpenAI Agents SDKGoogle ADKLangGraph
단기컨텍스트 변수세션 상태그래프 상태
장기SQLiteSession플러거블 서비스체크포인터 백엔드
영속성SQLite, 커스텀PostgreSQL, Cloud SQLPostgreSQL, SQLite, Redis
타임 트래블✅ 전체 이력
크로스 세션수동빌트인 세션 관리Thread ID 기반
상태 스키마비구조화 dict구조화 세션 상태TypedDict / Pydantic

멀티에이전트 오케스트레이션: 복잡성이 사는 곳

단일 에이전트는 쉬워요. 진짜 도전은 서로 다른 역량을 가진 여러 에이전트를 조율하는 것이에요. 여기서 프레임워크 차이가 가장 크게 벌어져요.

OpenAI Agents SDK: 핸드오프

SDK의 멀티에이전트 패턴은 핸드오프예요. 한 에이전트가 다른 에이전트에게 제어를 넘기는 방식이죠:

from agents import Agent, handoff triage_agent = Agent( name="triage", instructions="""You triage incoming requests. - For billing questions, hand off to the billing specialist. - For technical issues, hand off to the tech support agent. - For general questions, answer directly.""", handoffs=[ handoff(billing_agent), handoff(tech_support_agent), ], ) billing_agent = Agent( name="billing_specialist", instructions="You handle billing inquiries. Access account data as needed.", tools=[get_account_info, process_refund], handoffs=[handoff(triage_agent)], # 다시 넘길 수 있음 )

핸드오프는 고객 지원 플로우, 트리아지 패턴, "적합한 전문가"가 쿼리를 처리해야 하는 모든 시나리오에 잘 맞아요.

한계: 핸드오프는 본질적으로 위임이지, 병렬 오케스트레이션이 아니에요. 여러 에이전트를 동시에 돌리고 결과를 합치는 게 쉽지 않아요.

Google ADK: 계층적 팀

ADK는 여러 오케스트레이션 패턴을 네이티브로 지원해요:

from google.adk.agents import Agent, SequentialAgent, ParallelAgent researcher = Agent(name="researcher", model="gemini-2.5-flash", instruction="Research the given topic thoroughly.", tools=[google_search]) writer = Agent(name="writer", model="gemini-2.5-pro", instruction="Write a comprehensive report based on the research.") reviewer = Agent(name="reviewer", model="gemini-2.5-pro", instruction="Review the report for accuracy and completeness.") # 순차 파이프라인: 리서치 → 작성 → 검토 pipeline = SequentialAgent(name="report_pipeline", sub_agents=[researcher, writer, reviewer]) # 또는 병렬 실행하고 결과 병합 parallel_research = ParallelAgent(name="parallel_research", sub_agents=[web_researcher, academic_researcher, news_researcher])

반복 정제를 위한 LoopAgent도 있어요:

from google.adk.agents import LoopAgent refinement_loop = LoopAgent( name="refinement", sub_agents=[draft_agent, critique_agent, revise_agent], max_iterations=3, )

Sequential, Parallel, Loop 패턴을 빌트인으로 제공하니 대부분의 멀티에이전트 워크플로우를 커스텀 오케스트레이션 코드 없이 처리할 수 있어요.

LangGraph: 그래프 기반 오케스트레이션

LangGraph는 멀티에이전트를 큰 그래프 안의 서브그래프로 처리해요:

from langgraph.graph import StateGraph, MessagesState research_graph = create_research_subgraph() analysis_graph = create_analysis_subgraph() writing_graph = create_writing_subgraph() def supervisor(state: MessagesState): response = supervisor_model.invoke([ SystemMessage(content="Route to the appropriate specialist."), *state["messages"] ]) return {"next_agent": response.content} main = StateGraph(MessagesState) main.add_node("supervisor", supervisor) main.add_node("researcher", research_graph) main.add_node("analyst", analysis_graph) main.add_node("writer", writing_graph) main.add_conditional_edges("supervisor", route_to_agent) main.add_edge("researcher", "supervisor") main.add_edge("analyst", "supervisor") main.add_edge("writer", "supervisor")

가장 유연하지만 가장 많은 코드가 필요해요. 정확한 흐름을 설계하고, 순차/병렬 실행 시점을 결정하고, 모든 엣지 케이스를 명시적으로 처리해야 해요.

멀티에이전트 비교

패턴OpenAI Agents SDKGoogle ADKLangGraph
순차핸드오프 체인SequentialAgent그래프 엣지
병렬네이티브 XParallelAgent병렬 브랜치
계층중첩 핸드오프sub_agents서브그래프
루프/반복수동LoopAgent그래프 사이클
슈퍼바이저수동루트 에이전트 경유네이티브 패턴
사람 개입Guardrail콜백interrupt()

프로덕션 준비도: 실전에서 중요한 것

프레임워크 비교는 "hello world" 예제를 보여주길 좋아해요. 프로덕션은 달라요. 뭔가 터졌을 때 각 프레임워크가 뭘 제공하는지를 봐야 해요. 프로덕션에서는 반드시 뭔가 터지거든요.

관찰성과 트레이싱

OpenAI Agents SDK는 빌트인 트레이싱이 있어요:

from agents import trace with trace("customer_support_flow"): result = await Runner.run(triage_agent, user_message) # 모든 LLM 호출, 도구 실행, 핸드오프가 트레이싱됨

Google ADK는 Google Cloud 관찰성과 연동:

from google.adk.evaluation import evaluate_agent eval_results = await evaluate_agent( agent=my_agent, test_cases=test_suite, metrics=["accuracy", "latency", "tool_usage"], )

LangGraph는 LangSmith로 심층 관찰성 제공:

# 모든 그래프 실행이 자동으로 LangSmith에 트레이싱 # 노드별 실행, 상태 전환, 토큰 사용량 확인 가능 # 아무 실행의 아무 지점으로 타임 트래블

가드레일과 안전

OpenAI Agents SDK는 퍼스트 클래스 가드레일을 제공해요:

from agents import Guardrail, GuardrailFunctionOutput, Agent @input_guardrail async def check_for_pii(ctx, agent, input_text): """개인정보가 포함된 요청을 차단.""" result = await Runner.run(pii_detector_agent, input_text) if result.contains_pii: return GuardrailFunctionOutput( output_info={"blocked": True}, tripwire_triggered=True, ) agent = Agent( name="assistant", input_guardrails=[check_for_pii], output_guardrails=[check_for_harmful_content], )

Google ADK는 콜백 기반 안전:

async def safety_callback(context, message): if contains_harmful_content(message): return "I cannot process this request." return None agent = Agent(name="assistant", before_model_callback=safety_callback)

LangGraph는 그래프 구조로 안전 처리:

def safety_check(state): if is_unsafe(state["messages"][-1]): return {"messages": [AIMessage(content="Request blocked.")], "should_continue": False} return state workflow.add_node("safety", safety_check) workflow.add_edge(START, "safety") workflow.add_conditional_edges("safety", lambda s: "agent" if s.get("should_continue", True) else END)

프로덕션 준비도 종합

역량OpenAI Agents SDKGoogle ADKLangGraph
트레이싱빌트인Google CloudLangSmith
가드레일퍼스트 클래스콜백그래프 노드
에러 재시도자동설정 가능수동
배포아무 Python 호스트Vertex AI, Cloud Run아무 Python 호스트
스케일링수동자동 (Cloud Run)수동 / LangGraph Platform
A2A 프로토콜미지원네이티브통합 방식
스트리밍

실전 선택 가이드

"어느 게 최고야?"를 그만 물어보고 **"내 조건에 뭐가 맞아?"**를 물어보세요.

OpenAI Agents SDK를 선택할 때:

  • 최단 시간에 작동하는 에이전트가 필요할 때. 최소한의 API라 배울 게 적고, 반복이 빨라요. "LLM에 도구 주고 알아서 하게 하고 싶다"면 이거예요.

  • 깔끔한 핸드오프 패턴이 필요할 때. 고객 지원 트리아지, 부서간 라우팅, 에스커레이션 플로우 같은 유스케이스에 핸드오프 모델이 딱 맞아요.

  • MCP 연동이 중요할 때. MCP 생태계가 커지면서, 퍼스트 클래스 지원은 전략적으로 유리해요.

  • 팀이 에이전트 프레임워크를 처음 접할 때. 학습 곡선이 셋 중 가장 완만해요.

Google ADK를 선택할 때:

  • Google Cloud 위에서 구축할 때. Vertex AI, Cloud Run과의 깊은 연동으로 관리형 배포, 오토스케일링, 모니터링이 별도 인프라 없이 가능해요.

  • 멀티모달 에이전트가 필요할 때. 텍스트와 함께 이미지, 오디오, 비디오를 처리해야 한다면, ADK의 네이티브 멀티모달 지원이 독보적이에요.

  • 빌트인 오케스트레이션 패턴을 원할 때. SequentialAgent, ParallelAgent, LoopAgent가 90%의 멀티에이전트 워크플로우를 커버해요.

  • 프레임워크 간 상호운용이 중요할 때. A2A 프로토콜 지원으로 다른 프레임워크의 에이전트와 통신할 수 있어요.

LangGraph를 선택할 때:

  • 복잡한 조건 분기 로직이 있을 때. 누적된 상태에 따라 다른 결정을 내리고, 이전 단계로 돌아가고, 수십 개의 분기 경로를 관리해야 한다면 LangGraph의 명시적 그래프 모델만이 스케일돼요.

  • 감사 추적이 필수일 때. 금융, 의료, 법률 등 규제 산업에서 LangGraph의 타임 트래블 디버깅과 완전한 실행 이력이 필요한 감사 트레일을 제공해요.

  • 아무 지점에서나 사람이 개입해야 할 때. LangGraph의 interrupt()는 아무 노드에서 실행을 멈추고, 사람 승인을 받고, 입력을 상태에 반영한 후 이어갈 수 있어요.

  • 플랫폼을 만들고 있을 때. 다른 개발자들이 에이전트를 만들 시스템을 구축한다면, LangGraph의 명시적 구조가 원래 작성자가 아닌 사람도 디버깅하고 유지보수할 수 있게 해줘요.

하이브리드 접근법

잘 안 알려진 사실: 섞어 쓸 수 있어요. 미친 소리 같지만 전략적으로는 합리적이에요:

  • OpenAI Agents SDK로 빠른 독립형 에이전트 (내부 도구, 챗봇)
  • Google ADK로 멀티모달 파이프라인 (Google Cloud 위)
  • LangGraph로 감사 추적이 필요한 복잡한 상태 관리 워크플로우

A2A 프로토콜 덕에 프레임워크 간 통신이 점점 실용화되고 있어요.

앞으로의 전망

세 프레임워크 모두 빠르게 진화하고 있어요:

OpenAI Agents SDK (2026년 3월 기준 v0.11.1)는 미친 속도로 반복 중이에요. 최근 릴리스에서 Computer Use 도구 GA(스크린샷 기반 UI 조작으로 소프트웨어를 직접 제어), Tool Search(GPT-5.4에서 동적 도구 로딩으로 스키마 부하 방지), WebSocket 트랜스포트(영속적 저지연 멀티턴 연결)가 추가됐어요. OpenAI는 Assistants API 서비스 종료도 발표했고(2026년 8월), Responses API + Agents SDK 조합이 표준이 되고 있어요.

Google ADK (v1.26.0)는 엔터프라이즈 시장을 공략 중이에요. 확장되는 통합 생태계(MongoDB, Pinecone, 관찰성 플랫폼)와 네이티브 A2A 프로토콜 지원이 Google Cloud에서의 퍼스트 클래스 시민을 지향해요. 최근 다국어 지원(Python, Java, Go, TypeScript)도 범위를 넓히고 있고요.

LangGraph (2026년 3월 기준 v1.1.0)는 복잡한 에이전트 시스템의 프로덕션 표준으로 자리잡았어요. LangGraph Platform(현재 LangSmith Deployment로 통합)이 관리형 배포를 제공하고, LangSmith 연동의 관찰성은 경쟁 프레임워크가 따라오기 어려운 수준이에요. Q2 2026에 LangGraph 2.0이 예정돼 있고, API 안정성과 타입 안전성이 강화될 예정이에요.

큰 흐름은 수렴이에요. OpenAI가 더 많은 구조를 추가하고, Google이 ADK를 더 유연하게 만들고, LangGraph가 API를 단순화하고 있어요. 2년 뒤면 비슷해 보일 수도 있지만, 지금은 차이가 확실히 중요해요. 잘못 고르면 마이그레이션에 몇 주를 쏟게 되거든요.

결론

단일 승자는 없어요. 내 상황에서의 승자가 있을 뿐이에요.

한 문장으로 솔직하게 정리하면:

빠르게 만들려면 OpenAI Agents SDK. Google Cloud + 멀티모달이면 ADK. 복잡한 프로덕션 워크플로우면 LangGraph.

OpenAI Agents SDK는 제로에서 작동하는 에이전트까지 가장 빠른 길이에요. Google ADK는 Google Cloud 팀에게 가장 통합된 경로고요. LangGraph는 개발 속도보다 안정성과 감사 추적이 중요한 시스템에서 가장 많은 제어를 제공해요.

좋은 소식? 2026년 AI 에이전트 프레임워크 생태계는 진심으로 훌륭해요. 세 프레임워크 모두 프로덕션 가능하고, 탄탄한 팀이 활발히 개발하고, 빠르게 좋아지고 있어요. "잘못된" 선택은 에이전트를 아예 안 만드는 거예요. 경쟁자는 이미 만들고 있으니까요.

팀이 생각하는 방식에 맞는 프레임워크를 고르고, 진짜 돌아가는 걸 배포하고, 반복하세요. 최고의 에이전트 프레임워크는 실제로 출시하는 프레임워크예요.

AIOpenAIGoogle ADKLangGraphAI AgentsLLMPythonAI EngineeringMCP

관련 도구 둘러보기

Pockit의 무료 개발자 도구를 사용해 보세요