주요 AI 에이전트 프레임워크의 아키텍처, 장단점, 사용 사례를 비교하고 프로젝트에 적합한 프레임워크를 선택하는 기준을 제시합니다.
지금까지 이 시리즈에서는 에이전트 패턴을 직접 코드로 구현했습니다. 이 접근 방식은 원리를 이해하는 데 적합하지만, 프로덕션 수준의 에이전트를 구축하려면 상태 관리, 내결함성, 관찰 가능성(Observability) 등 많은 부가 기능이 필요합니다.
Anthropic의 "Building Effective Agents" 가이드는 "가능한 한 단순하게 시작하고, 필요할 때만 복잡성을 추가하라"고 권고합니다. 프레임워크도 마찬가지입니다. 단순한 에이전트라면 API를 직접 호출하는 것이 낫고, 복잡한 멀티 에이전트 시스템이라면 프레임워크의 도움을 받는 것이 현명합니다.
2026년 현재, 에이전트 프레임워크 생태계에는 다양한 선택지가 있습니다. 이 장에서는 가장 널리 사용되는 세 가지를 깊이 비교합니다.
LangGraph는 LangChain 팀이 개발한 에이전트 오케스트레이션 프레임워크입니다. 이름에서 알 수 있듯 그래프 기반 아키텍처가 핵심 특징입니다.
LangGraph는 에이전트의 실행 흐름을 방향성 그래프(Directed Graph)로 표현합니다. 그래프의 노드는 작업 단위이고, 엣지는 노드 간 전환 조건입니다.
from langgraph.graph import StateGraph, START, END
from typing import TypedDict, Annotated
from operator import add
class AgentState(TypedDict):
messages: Annotated[list, add]
current_step: str
results: dict
def research_node(state: AgentState) -> dict:
"""연구 단계를 수행하는 노드입니다."""
# 연구 로직 구현
research_result = perform_research(state["messages"][-1])
return {
"messages": [{"role": "assistant", "content": research_result}],
"results": {"research": research_result},
}
def analysis_node(state: AgentState) -> dict:
"""분석 단계를 수행하는 노드입니다."""
research_data = state["results"].get("research", "")
analysis = perform_analysis(research_data)
return {
"messages": [{"role": "assistant", "content": analysis}],
"results": {"analysis": analysis},
}
def should_continue(state: AgentState) -> str:
"""다음 단계를 결정하는 조건부 엣지입니다."""
if needs_more_research(state):
return "research"
return "analysis"
# 그래프 구성
graph = StateGraph(AgentState)
graph.add_node("research", research_node)
graph.add_node("analysis", analysis_node)
graph.add_edge(START, "research")
graph.add_conditional_edges("research", should_continue)
graph.add_edge("analysis", END)
app = graph.compile()상태 관리: TypedDict 기반의 명시적 상태 스키마로 타입 안전성을 보장합니다. Reducer 패턴을 통해 상태 업데이트를 선언적으로 관리합니다.
체크포인팅: 실행 상태를 자동으로 저장하고 복원할 수 있습니다. 장시간 실행되는 에이전트나 중단 후 재개가 필요한 워크플로우에 유용합니다.
from langgraph.checkpoint.memory import MemorySaver
checkpointer = MemorySaver()
app = graph.compile(checkpointer=checkpointer)
# 실행 시 thread_id로 세션을 구분
config = {"configurable": {"thread_id": "user-session-1"}}
result = app.invoke(initial_state, config)
# 나중에 같은 thread_id로 이어서 실행
result = app.invoke(new_input, config)순환 그래프 지원: 에이전트 루프처럼 동일한 노드를 반복 방문하는 순환 구조를 자연스럽게 표현할 수 있습니다. 이는 다른 프레임워크에서는 지원하기 어려운 기능입니다.
인간 참여(Human-in-the-Loop): 특정 노드에서 실행을 중단하고 사용자 승인을 기다리는 패턴을 기본 지원합니다.
from langgraph.graph import StateGraph
from langgraph.types import interrupt
def sensitive_action_node(state: AgentState) -> dict:
"""민감한 작업 전 사용자 확인을 요청합니다."""
action = state["pending_action"]
# 실행을 중단하고 사용자 확인을 요청
approval = interrupt(
f"다음 작업을 실행할까요?\n{action}\n승인(yes) 또는 거부(no)"
)
if approval == "yes":
result = execute_action(action)
return {"results": {"action": result}}
else:
return {"results": {"action": "사용자가 작업을 거부했습니다."}}CrewAI는 역할 기반 멀티 에이전트 프레임워크입니다. 인간 조직의 팀 구조에서 영감을 받아, 에이전트에게 역할(Role), 목표(Goal), 배경 이야기(Backstory)를 부여합니다.
CrewAI의 세 가지 핵심 개념은 Agent(에이전트), Task(작업), Crew(팀)입니다.
from crewai import Agent, Task, Crew, Process
# 에이전트 정의
researcher = Agent(
role="기술 리서처",
goal="주어진 주제에 대한 최신 기술 동향을 조사한다",
backstory=(
"당신은 10년 경력의 기술 리서처입니다. "
"빠르게 변하는 기술 트렌드를 정확하게 파악하는 것이 "
"당신의 전문 분야입니다."
),
verbose=True,
allow_delegation=False,
)
writer = Agent(
role="기술 작가",
goal="조사 결과를 바탕으로 명확하고 깊이 있는 기술 보고서를 작성한다",
backstory=(
"당신은 복잡한 기술 개념을 누구나 이해할 수 있는 "
"언어로 전달하는 기술 작가입니다."
),
verbose=True,
allow_delegation=False,
)
# 작업 정의
research_task = Task(
description=(
"2026년 AI 에이전트 프레임워크의 현황을 조사하십시오. "
"주요 프레임워크의 특징, 장단점, 사용 사례를 포함해야 합니다."
),
expected_output="프레임워크별 분석이 포함된 조사 보고서",
agent=researcher,
)
writing_task = Task(
description=(
"조사 결과를 바탕으로 기업 의사결정자를 위한 "
"프레임워크 선택 가이드를 작성하십시오."
),
expected_output="프레임워크 비교표와 선택 기준이 포함된 보고서",
agent=writer,
)
# 팀 구성 및 실행
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, writing_task],
process=Process.sequential,
verbose=True,
)
result = crew.kickoff()직관적인 설계: 역할, 목표, 배경 이야기라는 인간 친화적인 개념으로 에이전트를 정의합니다. 코드를 읽기만 해도 각 에이전트가 무엇을 하는지 이해할 수 있습니다.
위임 메커니즘: allow_delegation=True로 설정하면 에이전트가 다른 에이전트에게 작업을 위임할 수 있습니다. 감독자 패턴을 별도 구현 없이 사용할 수 있습니다.
프로세스 유형: Sequential(순차), Hierarchical(계층), Consensual(합의) 등 다양한 실행 패턴을 선언적으로 선택할 수 있습니다.
# 계층적 프로세스: 매니저가 작업을 자동으로 분배
crew = Crew(
agents=[researcher, analyst, writer],
tasks=[complex_task],
process=Process.hierarchical,
manager_llm="claude-sonnet-4-20250514",
)OpenAI가 2025년 3월에 출시한 Agents SDK는 가볍고 실용적인 에이전트 프레임워크입니다. OpenAI의 모델과 긴밀하게 통합되어 있습니다.
from agents import Agent, Runner, function_tool
@function_tool
def search_web(query: str) -> str:
"""웹에서 정보를 검색합니다."""
return f"검색 결과: {query}"
@function_tool
def calculate(expression: str) -> str:
"""수학 계산을 수행합니다."""
return str(eval(expression))
agent = Agent(
name="research_assistant",
instructions=(
"당신은 연구 보조 에이전트입니다. "
"사용자의 질문에 대해 웹 검색과 계산을 활용하여 "
"정확한 답변을 제공하십시오."
),
tools=[search_web, calculate],
)
result = Runner.run_sync(agent, "파이썬 3.13의 주요 변경사항을 알려 주세요.")
print(result.final_output)Agents SDK의 고유한 기능인 핸드오프(Handoff)는 에이전트 간 제어권 이전을 단순화합니다.
from agents import Agent, Runner
triage_agent = Agent(
name="triage",
instructions="사용자의 질문을 분류하여 적절한 전문가에게 전달합니다.",
handoffs=["tech_expert", "business_expert"],
)
tech_expert = Agent(
name="tech_expert",
instructions="기술적인 질문에 대해 상세하게 답변합니다.",
handoffs=["triage"], # 필요시 다시 분류 에이전트로
)
business_expert = Agent(
name="business_expert",
instructions="비즈니스 관련 질문에 대해 답변합니다.",
handoffs=["triage"],
)
result = Runner.run_sync(
triage_agent,
"AI 에이전트를 도입하면 ROI가 어떻게 되나요?"
)간결함: 데코레이터 기반의 도구 정의, 선언적 핸드오프 등 최소한의 코드로 에이전트를 구현합니다.
추적 기능: 내장된 추적(Tracing) 기능으로 에이전트의 실행 과정을 시각적으로 확인할 수 있습니다.
가드레일 기본 지원: 입출력 가드레일을 프레임워크 수준에서 지원합니다.
| 기준 | LangGraph | CrewAI | Agents SDK |
|---|---|---|---|
| 아키텍처 | 그래프 기반 | 역할 기반 팀 | 에이전트 + 핸드오프 |
| 학습 곡선 | 높음 | 낮음 | 낮음 |
| 유연성 | 매우 높음 | 보통 | 보통 |
| 상태 관리 | 내장 (체크포인팅) | 기본적 | 기본적 |
| 순환 워크플로우 | 네이티브 지원 | 제한적 | 핸드오프로 가능 |
| 모델 호환성 | 모든 모델 | 모든 모델 | OpenAI 중심 |
| 멀티 에이전트 | 유연한 토폴로지 | 팀 기반 | 핸드오프 기반 |
| 프로덕션 준비도 | 높음 | 보통 | 보통 |
| 커뮤니티 | 대규모 | 성장 중 | 성장 중 |
프레임워크 선택에 정답은 없습니다. 중요한 것은 프로젝트의 현재 복잡도와 미래 확장 가능성을 고려하는 것입니다. 단순한 에이전트라면 프레임워크 없이 시작하고, 복잡해지는 시점에 도입하는 것이 가장 실용적인 접근입니다.
Anthropic의 권장 사항처럼, 다음 경우에는 프레임워크 없이 직접 구현하는 것이 더 나을 수 있습니다.
10장에서는 이 시리즈에서 배운 모든 패턴을 결합하여 실전 에이전트 시스템을 처음부터 구축합니다. 요구사항 분석부터 설계, 구현, 테스트, 배포까지 전체 과정을 다룹니다.
이 글이 도움이 되셨나요?
관련 주제 더 보기
이 시리즈에서 배운 모든 패턴을 결합하여 실제 사용 가능한 리서치 에이전트 시스템을 설계하고 구축합니다.
AI 에이전트의 행동 제어, 입출력 검증, 오류 처리, 비용 관리 등 프로덕션 환경에서의 안전성 확보 전략을 다룹니다.
AI 에이전트의 단기, 장기 메모리 아키텍처를 이해하고, RAG 통합과 대화 히스토리 관리 전략을 코드로 구현합니다.