AI 에이전트는 연구 데모에서 프로덕션 시스템으로 발전했습니다. 2026년까지 엔터프라이즈 AI 애플리케이션의 60% 이상이 에이전트 컴포넌트를 포함할 것으로 예상됩니다. 하지만 에이전트를 처음부터 구축하는 것 - 도구 루프, 상태, 메모리, 오류 처리, 멀티 에이전트 조율 관리 - 은 복잡합니다. 그래서 프레임워크가 필요합니다.
2026년에 네 가지 프레임워크가 주도하고 있습니다: LangGraph, CrewAI, OpenAI Agents SDK, Claude Agent SDK. 각각은 같은 문제에 대해 근본적으로 다른 접근 방식을 취합니다 - LLM에 추론, 계획, 도구 사용, 협업 능력을 부여하는 문제입니다.
한눈에 보기
| 항목 | LangGraph | CrewAI | OpenAI Agents SDK | Claude Agent SDK |
|---|---|---|---|---|
| 개발사 | LangChain | CrewAI Inc. | OpenAI | Anthropic |
| 아키텍처 | 그래프 기반 | 역할 기반 | 핸드오프 기반 | 자율 루프 |
| 철학 | 최대한의 제어 | 팀 협업 | 최소한의 추상화 | 에이전트에게 컴퓨터를 주다 |
| 언어 | Python, TypeScript | Python | Python | Python, TypeScript |
| 모델 지원 | 모든 모델 (OpenAI, Claude, 로컬) | 모든 모델 | 모든 모델 (이름과 달리) | Claude 전용 |
| GitHub stars | ~29k | ~40k | ~21k | ~6k |
| 적합한 용도 | 복잡한 상태 기반 워크플로 | 멀티 에이전트 전문화 | 라우팅 및 트리아지 | 코딩 및 파일 중심 작업 |
LangGraph: 그래프 빌더
LangGraph는 에이전트 워크플로를 유향 순환 그래프로 모델링합니다. 노드(작업을 수행하는 함수)와 엣지(노드 간 전환, 조건부 가능)를 정의합니다. 상태는 그래프를 통해 흐르고 체크포인팅을 통해 영속화됩니다.
이것은 가장 명시적이고 제어 가능한 프레임워크입니다 - 모든 단계를 직접 연결합니다.
핵심 개념
- StateGraph: 타입이 지정된 상태를 가진 그래프 정의
- Nodes: 상태를 변환하는 Python 함수
- Edges: 노드 간의 연결, 조건부 가능
- Checkpointing: 장시간 실행 워크플로를 위한 내장 영속화
코드 예제
from langgraph.graph import StateGraph, MessagesState, START, END from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o") def call_agent(state: MessagesState): response = llm.invoke(state["messages"]) return {"messages": [response]} def should_continue(state: MessagesState): last = state["messages"][-1] if last.tool_calls: return "tools" return END def call_tools(state: MessagesState): # Execute tool calls and return results results = [] for tool_call in state["messages"][-1].tool_calls: result = execute_tool(tool_call) results.append(result) return {"messages": results} graph = StateGraph(MessagesState) graph.add_node("agent", call_agent) graph.add_node("tools", call_tools) graph.add_edge(START, "agent") graph.add_conditional_edges("agent", should_continue, {"tools": "tools", END: END}) graph.add_edge("tools", "agent") app = graph.compile() result = app.invoke({"messages": [{"role": "user", "content": "What's the weather?"}]})
장점
- 모든 단계와 전환에 대한 세밀한 제어
- 체크포인팅과 human-in-the-loop 내장
- TypeScript 완전 지원
- 모든 LLM 제공자와 호환
- 조건 분기와 루프가 있는 복잡한 워크플로에 최적
단점
- 가파른 학습 곡선 - 그래프 이론 개념을 이해해야 함
- 간단한 사용 사례에 대해 장황함 - 기본 에이전트도 다른 프레임워크보다 많은 보일러플레이트가 필요
- LangSmith 없이는 그래프 흐름 디버깅이 어려울 수 있음
가격
오픈소스 (MIT). LangSmith (관리형 관측 플랫폼)는 프로덕션 모니터링을 위한 유료 티어가 있음.
CrewAI: 팀 어셈블러
CrewAI는 인간의 비유를 사용합니다: 전문화된 에이전트로 구성된 크루를 편성하고, 각 에이전트에 역할, 목표, 배경 이야기를 부여합니다. 에이전트는 도구를 사용하여 태스크에 협업하며, 프로세스 (순차, 계층, 합의)로 조율됩니다.
각 구성원이 특정 직함과 전문 분야를 가진 팀을 고용하는 것으로 생각하세요.
핵심 개념
- Agent: 역할, 목표, 배경 이야기, 도구를 가진 페르소나
- Task: 설명, 예상 출력, 배정된 에이전트를 가진 과제
- Crew: 함께 작업하는 에이전트 그룹
- Process: 실행 전략 (순차, 계층, 합의)
- Flow: 여러 크루를 연결하는 이벤트 기반 오케스트레이션 레이어
코드 예제
from crewai import Agent, Task, Crew, Process researcher = Agent( role="Senior Research Analyst", goal="Find comprehensive data about the given topic", backstory="You have 10 years of experience in technology research. " "You are thorough and always verify facts from multiple sources.", tools=[web_search_tool], verbose=True, ) writer = Agent( role="Technical Writer", goal="Create clear, engaging technical content", backstory="You write for a developer audience. " "Your articles are practical and include code examples.", tools=[file_tool], verbose=True, ) research_task = Task( description="Research the latest developments in WebAssembly in 2026. " "Focus on WASI, Component Model, and production use cases.", expected_output="A structured research document with key findings and sources.", agent=researcher, ) writing_task = Task( description="Write a blog post based on the research. " "Include code examples and Mermaid diagrams.", expected_output="A complete blog post in Markdown format.", agent=writer, context=[research_task], # Writer receives researcher's output ) crew = Crew( agents=[researcher, writer], tasks=[research_task, writing_task], process=Process.sequential, verbose=True, ) result = crew.kickoff() print(result.raw)
장점
- 직관적인 역할 기반 추상화 - 이해하기 쉬움
- 100개 이상의 내장 도구 통합
- 에이전트 간 공유 메모리 (단기, 장기, 엔티티)
- 가장 큰 커뮤니티 (~40k GitHub stars)
- 위임과 검증을 수행하는 "매니저" 에이전트가 있는 계층 프로세스
단점
- LangGraph보다 세밀한 제어가 적음 - 정확한 실행 경로가 아닌 역할을 정의
- 에이전트 간 의견이 다를 때 계층 프로세스가 예측 불가능할 수 있음
- 멀티 에이전트 대화 디버깅이 단일 에이전트 흐름보다 어려움
가격
오픈소스 코어 (무료). CrewAI Platform: $99/월 (Teams)에서 $120k/년 (Enterprise). 활성 크루 수와 월간 실행 수 기반 가격 책정.
OpenAI Agents SDK: 라우터
OpenAI Agents SDK (Swarm의 정신적 후계자)는 핸드오프 - 에이전트가 대화를 다른 전문 에이전트에게 전달하는 것 - 에 초점을 맞춥니다. 가장 미니멀한 프레임워크로, 에이전트, 도구, 핸드오프, 가드레일로만 구성됩니다. 그게 전부입니다.
핵심 개념
- Agent: 모델 + 지시사항 + 도구 + 핸드오프
- Handoff: 다른 에이전트로의 전달 (LLM이 호출할 수 있는 도구로 모델링)
- Guardrail: 에이전트와 병렬로 실행되는 입출력 유효성 검사
- Runner: 에이전트 루프 실행
- Tracing: 모든 LLM 호출, 도구 실행, 핸드오프에 대한 내장 관측 기능
코드 예제
from agents import Agent, Runner, handoff, InputGuardrail, GuardrailFunctionOutput from pydantic import BaseModel class SafetyCheck(BaseModel): is_safe: bool reason: str async def content_safety(ctx, agent, input_text): result = await Runner.run( Agent(name="Safety", instructions="Check if input is safe. No PII."), input_text, context=ctx, ) output = SafetyCheck.model_validate_json(result.final_output) return GuardrailFunctionOutput( output_info=output, tripwire_triggered=not output.is_safe ) billing_agent = Agent( name="Billing Agent", instructions="You handle billing inquiries. Be precise with numbers.", tools=[lookup_invoice, process_payment], ) refund_agent = Agent( name="Refund Agent", instructions="You process refund requests. Always verify the order first.", tools=[lookup_order, issue_refund], ) triage_agent = Agent( name="Triage Agent", instructions="Route the customer to the right specialist. " "Ask clarifying questions if needed.", handoffs=[billing_agent, refund_agent], input_guardrails=[InputGuardrail(guardrail_function=content_safety)], ) result = await Runner.run(triage_agent, "I need a refund for order #4521") print(result.final_output) # The triage agent routes to refund_agent, which processes the refund
장점
- 깔끔한 핸드오프 패턴 - 라우팅/트리아지 워크플로에 자연스러움
- 가드레일이 실행과 병렬로 동작 (fail-fast, 논블로킹)
- 디버깅을 위한 트레이싱 대시보드 내장
- 이름과 달리 OpenAI 외 모델도 지원
- 최소한의 추상화 - 이해하기 쉽고 확장하기 쉬움
단점
- LangGraph보다 상태 관리가 덜 성숙
- 내장 영속화나 체크포인팅이 없음
- 서드파티 도구 에코시스템이 작음
- 핸드오프 중심 설계가 모든 아키텍처에 맞지 않을 수 있음
가격
오픈소스 (MIT). 사용하는 모델에 따라 토큰당 과금.
Claude Agent SDK: 개발자
Claude Agent SDK는 다른 접근 방식을 취합니다: 워크플로나 역할을 정의하는 대신, 에이전트에게 도구 세트를 주고 작업을 어떻게 수행할지 스스로 판단하게 합니다. Claude Code와 동일한 자율 루프 - 읽기, 실행, 검증, 반복 - 를 사용합니다.
핵심 개념
- query(): 에이전트 루프를 시작하는 메인 진입점
- 내장 도구: Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch
- MCP를 통한 커스텀 도구: 인프로세스 MCP 서버로 도구 정의
- 서브 에이전트: 부모가 위임할 수 있는 전문 에이전트
- Sessions: 여러 상호작용에 걸쳐 컨텍스트 유지
코드 예제
import { tool, createSdkMcpServer, query } from "@anthropic-ai/claude-agent-sdk"; import { z } from "zod"; const searchDocs = tool( "search_docs", "Search the internal documentation for relevant information", { query: z.string().describe("Search query") }, async ({ query }) => { const results = await vectorStore.similaritySearch(query, 5); return { content: [{ type: "text", text: results.map(r => r.pageContent).join("\n\n") }], }; } ); const docsServer = createSdkMcpServer({ name: "docs", version: "1.0.0", tools: [searchDocs], }); for await (const message of query({ prompt: "Find how authentication works in our system and write a summary", options: { mcpServers: { docs: docsServer }, allowedTools: ["Read", "Glob", "Grep", "mcp__docs__search_docs"], }, })) { if (message.type === "result" && message.subtype === "success") { console.log(message.result); } }
장점
- 퍼스트클래스 MCP 통합 - 모든 MCP 서버 에코시스템에 연결 가능
- 파일 작업, 터미널, 웹 접근을 위한 내장 도구
- 대규모 코드베이스를 위한 자동 컨텍스트 압축
- 복잡한 작업을 위한 서브 에이전트 병렬 처리
- Claude Code와 동일한 엔진 - 실제 개발 워크플로에서 실전 검증
단점
- Claude 모델만 지원 - 멀티 제공자 지원 없음
- 새로운 프레임워크로 커뮤니티가 작음
- Python SDK에서도 Node.js 런타임이 필요
- LangGraph에 비해 워크플로 제어가 덜 명시적
가격
오픈소스. 표준 Claude API 토큰 요금. Managed Agents (호스팅 버전): 토큰 비용 외 세션 시간당 $0.08.
어떤 것을 선택할까
LangGraph를 선택해야 할 때:
- 워크플로의 모든 단계를 정밀하게 제어해야 할 때
- 복잡한 조건 로직과 루프를 포함하는 사용 사례일 때
- 내장 영속화와 human-in-the-loop 체크포인트가 필요할 때
- 같은 워크플로에서 여러 LLM 제공자를 사용해야 할 때
CrewAI를 선택해야 할 때:
- 직관적인 역할 기반 추상화를 원할 때
- 서로 다른 전문 분야를 가진 여러 에이전트가 관여하는 작업일 때
- 에이전트 간 협업과 컨텍스트 전달이 필요할 때
- 가장 큰 커뮤니티와 가장 많은 내장 통합을 중시할 때
OpenAI Agents SDK를 선택해야 할 때:
- 주요 패턴이 대화를 전문가에게 라우팅하는 것일 때
- 입출력을 병렬로 검증하는 가드레일이 필요할 때
- 최소한의 보일러플레이트로 가장 단순한 추상화를 원할 때
- 내장 트레이싱과 관측 기능이 중요할 때
Claude Agent SDK를 선택해야 할 때:
- 에이전트가 코드를 읽고, 쓰고, 실행해야 할 때
- 퍼스트클래스 MCP 서버 통합을 원할 때
- 반복하고 자체 수정하는 자율 에이전트가 필요할 때
- 이미 Claude를 사용하고 있어 가장 깊은 통합을 원할 때
프레임워크를 조합할 수 있을까?
네. 일반적인 패턴은 하나의 프레임워크를 오케스트레이션에, 다른 프레임워크를 개별 에이전트에 사용하는 것입니다:
- LangGraph를 전체 워크플로 그래프에
- CrewAI를 멀티 에이전트 협업이 필요한 특정 노드에
- Claude Agent SDK를 MCP를 통한 코딩 관련 서브 태스크에
- OpenAI Agents SDK를 고객 대면 트리아지와 라우팅에
이 프레임워크들은 상호 배타적이지 않습니다. 시스템의 각 부분에 맞는 것을 사용하세요.
결론
각 프레임워크는 명확한 방향성을 가지고 있습니다:
- LangGraph는 제어를 최적화 - 모든 전환을 직접 결정
- CrewAI는 협업을 최적화 - 에이전트가 팀으로 일함
- OpenAI Agents SDK는 단순함을 최적화 - 최소한의 추상화, 깔끔한 핸드오프
- Claude Agent SDK는 자율성을 최적화 - 도구를 주고 일하게 함
올바른 선택은 여러분의 워크플로, 팀, 그리고 기존 기술 스택에 따라 달라집니다. 주요 사용 사례에 맞는 것을 선택하고, 잘 익히고, 다른 프레임워크가 강점을 발휘하는 영역을 만났을 때 도입하세요.