AI 에이전트 하나로 복잡한 업무를 처리하는 데 한계가 생겼어요.
"에이전트가 리서치도 하고, 분석도 하고, 글쓰기도 하고, 팩트체크도 해야 하는데 한 명한테 다 시키면 성능이 떨어진다."
해결책은 멀티에이전트 시스템이에요. 각자 전문 역할을 가진 에이전트들이 협력해서 작업을 처리하는 구조예요.
그런데 프레임워크가 너무 많아요. CrewAI, LangGraph, AutoGen — 다 비슷해 보이지만 철학이 완전히 달라요. 잘못 고르면 몇 주치 리팩토링이 기다려요.
이번 글에서는 세 프레임워크를 실전 코드와 함께 완전 비교해 드릴게요.
세 프레임워크의 핵심 철학
한 줄로 정리하면 이래요.
CrewAI → 팀처럼 일한다 (역할 기반)
LangGraph → 그래프처럼 흐른다 (상태 기계)
AutoGen → 대화로 협력한다 (대화 기반)
같은 멀티에이전트 문제를 세 프레임워크가 완전히 다른 방식으로 접근해요.
CrewAI — 역할 기반 팀 구성
개념
실제 조직처럼 에이전트를 구성해요. 리서처, 분석가, 작가처럼 역할을 주고 팀(Crew)을 만들면 알아서 협력해요.
[Crew]
├─ 리서처 에이전트 (웹 검색 전담)
├─ 분석가 에이전트 (데이터 분석 전담)
└─ 작가 에이전트 (보고서 작성 전담)
구현
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool, WebsiteSearchTool
# 툴 정의
search_tool = SerperDevTool()
web_tool = WebsiteSearchTool()
# 에이전트 정의
researcher = Agent(
role="시니어 리서처",
goal="주어진 주제에 대한 최신 정보를 수집하고 핵심 내용을 정리한다",
backstory="""
당신은 10년 경력의 리서치 전문가입니다.
복잡한 주제를 빠르게 파악하고 핵심을 추출하는 능력이 뛰어납니다.
""",
tools=[search_tool, web_tool],
verbose=True,
allow_delegation=False
)
analyst = Agent(
role="데이터 분석가",
goal="수집된 정보를 분석해서 인사이트와 패턴을 도출한다",
backstory="""
당신은 데이터 분석 전문가입니다.
원시 데이터에서 의미 있는 패턴을 찾아내는 것을 좋아합니다.
""",
verbose=True,
allow_delegation=False
)
writer = Agent(
role="테크 라이터",
goal="분석 결과를 명확하고 읽기 쉬운 보고서로 작성한다",
backstory="""
당신은 기술 문서 전문 작가입니다.
복잡한 내용을 누구나 이해하기 쉽게 표현합니다.
""",
verbose=True,
allow_delegation=False
)
# 태스크 정의
research_task = Task(
description="2026년 AI 에이전트 프레임워크 트렌드를 조사하세요. 최신 동향과 주요 플레이어를 파악하세요.",
expected_output="주요 트렌드 5가지와 각 트렌드의 상세 설명",
agent=researcher
)
analysis_task = Task(
description="리서처가 수집한 정보를 바탕으로 시장 기회와 위협 요소를 분석하세요.",
expected_output="SWOT 분석 결과와 핵심 인사이트",
agent=analyst
)
writing_task = Task(
description="분석 결과를 개발자를 위한 블로그 포스트 형태로 작성하세요.",
expected_output="1500자 이상의 블로그 포스트",
agent=writer
)
# Crew 구성 및 실행
crew = Crew(
agents=[researcher, analyst, writer],
tasks=[research_task, analysis_task, writing_task],
process=Process.sequential, # 순차 실행
verbose=True
)
result = crew.kickoff()
print(result)
병렬 실행 (독립 태스크)
from crewai import Crew, Process
# 병렬로 실행 가능한 태스크들
crew = Crew(
agents=[researcher1, researcher2, researcher3],
tasks=[task1, task2, task3],
process=Process.hierarchical, # 매니저가 조율
manager_llm="gpt-4o",
verbose=True
)
장점과 단점
장점 — 진입 장벽이 낮아요. 20줄로 첫 멀티에이전트 시스템을 만들 수 있어요. 역할 기반이라 직관적이에요.
단점 — 프로덕션에서 체크포인팅이 약해요. 복잡한 조건부 흐름 구현이 어려워요. 디버깅 로깅이 불편해요.
언제 써야 하나 — 빠른 프로토타이핑, 역할 분담이 명확한 비즈니스 워크플로우.
LangGraph — 그래프 기반 상태 머신
개념
에이전트 워크플로우를 방향 그래프로 표현해요. 각 노드는 에이전트 또는 함수이고, 엣지는 흐름을 결정해요. 명시적인 상태 관리로 정확히 무슨 일이 일어나는지 추적 가능해요.
[시작]
│
▼
[리서치 노드]
│
├─ 충분한 정보? → [분석 노드] → [작성 노드] → [종료]
└─ 부족? → [추가 리서치] → 다시 [리서치 노드]
구현
from langgraph.graph import StateGraph, END
from langgraph.checkpoint.memory import MemorySaver
from typing import TypedDict, Annotated
import operator
# 공유 상태 정의
class ResearchState(TypedDict):
query: str
research_results: list[str]
analysis: str
final_report: str
iteration_count: int
is_sufficient: bool
# 각 노드 함수 정의
def research_node(state: ResearchState) -> dict:
"""웹 리서치 수행"""
query = state["query"]
# 실제로는 검색 툴 사용
results = web_search(query)
return {
"research_results": state.get("research_results", []) + results,
"iteration_count": state.get("iteration_count", 0) + 1
}
def evaluate_node(state: ResearchState) -> dict:
"""리서치 결과 충분한지 평가"""
results = state["research_results"]
iteration = state.get("iteration_count", 0)
# 3번 이상 수집하거나 충분한 데이터면 충분
is_sufficient = len(results) >= 5 or iteration >= 3
return {"is_sufficient": is_sufficient}
def analysis_node(state: ResearchState) -> dict:
"""수집된 정보 분석"""
results = state["research_results"]
analysis = llm.invoke(f"다음 정보를 분석해줘:\n{results}")
return {"analysis": analysis.content}
def writing_node(state: ResearchState) -> dict:
"""최종 보고서 작성"""
analysis = state["analysis"]
report = llm.invoke(f"다음 분석을 바탕으로 보고서 작성:\n{analysis}")
return {"final_report": report.content}
# 조건부 엣지 함수
def should_continue_research(state: ResearchState) -> str:
if state.get("is_sufficient", False):
return "analyze"
return "research" # 루프백
# 그래프 구성
workflow = StateGraph(ResearchState)
# 노드 추가
workflow.add_node("research", research_node)
workflow.add_node("evaluate", evaluate_node)
workflow.add_node("analysis", analysis_node)
workflow.add_node("writing", writing_node)
# 엣지 연결
workflow.set_entry_point("research")
workflow.add_edge("research", "evaluate")
workflow.add_conditional_edges(
"evaluate",
should_continue_research,
{
"research": "research", # 부족하면 다시 리서치
"analyze": "analysis" # 충분하면 분석으로
}
)
workflow.add_edge("analysis", "writing")
workflow.add_edge("writing", END)
# 체크포인터 설정 (중단 후 재개 가능)
checkpointer = MemorySaver()
app = workflow.compile(checkpointer=checkpointer)
# 실행
config = {"configurable": {"thread_id": "research_001"}}
result = app.invoke(
{"query": "2026년 AI 에이전트 프레임워크 비교", "iteration_count": 0},
config=config
)
print(result["final_report"])
Human-in-the-Loop (사람 승인 게이트)
# 특정 노드에서 사람 확인 요청
workflow.add_node("human_review", interrupt_before_action)
workflow.compile(
checkpointer=checkpointer,
interrupt_before=["writing"] # 작성 전 사람이 확인
)
# 재개
app.invoke(None, config=config) # 사람이 승인하면 재개
장점과 단점
장점 — 프로덕션 준비도 최고예요. 체크포인팅, 타임트래블 디버깅, LangSmith 연동이 강력해요. 실행 흐름이 완전히 명시적이에요.
단점 — 배우기 어려워요. 그래프 이론 개념이 필요하고 코드가 길어요. 단순한 워크플로우에는 오버엔지니어링이에요.
언제 써야 하나 — 프로덕션 시스템, 복잡한 조건부 분기, 장시간 실행 워크플로우, Human-in-the-Loop 필요한 경우.
2026년 초 LangGraph가 GitHub 스타 수에서 CrewAI를 추월했어요. 기업 채택이 늘어났기 때문이에요.
AutoGen — 대화 기반 협력
개념
에이전트들이 채팅으로 협력해요. 여러 에이전트가 그룹채팅에 참여해서 서로 토론하고 검증하면서 결과를 만들어요.
[그룹챗]
사용자 → 어시스턴트1 → 어시스턴트2 → 크리틱 → ...
(작성) (검증) (반박)
구현
import autogen
# LLM 설정
llm_config = {
"config_list": [{"model": "gpt-4o", "api_key": "YOUR_KEY"}],
"temperature": 0.7
}
# 에이전트 정의
user_proxy = autogen.UserProxyAgent(
name="사용자",
human_input_mode="NEVER", # 자동 실행
max_consecutive_auto_reply=10,
code_execution_config={"work_dir": "workspace", "use_docker": False}
)
researcher = autogen.AssistantAgent(
name="리서처",
llm_config=llm_config,
system_message="""
당신은 AI 기술 리서처입니다.
최신 트렌드와 기술 동향을 조사하는 전문가입니다.
항상 구체적인 데이터와 출처를 제시하세요.
"""
)
critic = autogen.AssistantAgent(
name="크리틱",
llm_config=llm_config,
system_message="""
당신은 비판적 사고 전문가입니다.
다른 에이전트의 주장에서 논리적 오류, 편향, 빠진 부분을 찾아내세요.
건설적인 피드백을 제공하세요.
"""
)
summarizer = autogen.AssistantAgent(
name="요약가",
llm_config=llm_config,
system_message="""
당신은 정보 통합 전문가입니다.
토론 결과를 종합해서 핵심 인사이트를 정리하세요.
"TERMINATE"를 출력하면 대화가 종료됩니다.
"""
)
# 그룹챗 구성
groupchat = autogen.GroupChat(
agents=[user_proxy, researcher, critic, summarizer],
messages=[],
max_round=12,
speaker_selection_method="auto" # 자동으로 다음 발언자 선택
)
manager = autogen.GroupChatManager(
groupchat=groupchat,
llm_config=llm_config
)
# 실행
user_proxy.initiate_chat(
manager,
message="2026년 AI 에이전트 프레임워크 중 프로덕션에 가장 적합한 것은 무엇인지 분석해줘."
)
비용 주의 사항
# AutoGen은 LLM 호출이 많아요
# 4개 에이전트 × 5라운드 = 최소 20번 LLM 호출
# 토큰 비용 추정:
# - GPT-4o 기준: 20 calls × ~2000 tokens = 40,000 tokens
# - 비용: 약 $0.8~1.2 per conversation
# 고빈도 프로덕션에는 비용 부담이 커요
장점과 단점
장점 — 에이전트 간 자연스러운 토론이 가능해요. 검증과 반박 과정에서 품질이 높아져요. 코드 실행을 기본 지원해요.
단점 — LLM 호출이 많아서 비용이 커요. 대화가 예측 불가능하게 길어질 수 있어요. 프로덕션 관측성이 LangGraph보다 약해요.
참고로 Microsoft는 AutoGen을 유지보수 모드로 전환하고 더 광범위한 Microsoft Agent Framework에 집중하고 있어요. 신규 기능 개발은 느려졌어요.
언제 써야 하나 — 토론과 검증이 중요한 오프라인 분석, 코드 생성 및 실행, 품질이 속도보다 중요한 경우.
세 프레임워크 완전 비교
항목 CrewAI LangGraph AutoGen
| 학습 난이도 | 낮음 | 높음 | 중간 |
| 구조 | 역할 기반 팀 | 방향 그래프 | 대화 기반 |
| 프로덕션 준비도 | 중간 | 최고 | 중간 |
| 체크포인팅 | 제한적 | 완전 지원 | 미지원 |
| LLM 호출 수 | 중간 | 중간 | 많음 |
| 디버깅 용이성 | 중간 | 높음 | 낮음 |
| 모델 독립성 | 완전 | 완전 | 완전 |
| 활발한 개발 | 활발 | 활발 | 유지보수 모드 |
| 적합한 케이스 | 프로토타입 | 프로덕션 | 오프라인 분석 |
실전 선택 가이드
빠르게 프로토타입 만들고 싶다 → CrewAI. 20줄로 첫 번째 멀티에이전트 시스템 완성.
프로덕션에 올려야 한다 → LangGraph. 체크포인팅, 타임트래블 디버깅, LangSmith 연동이 필수.
에이전트들이 토론하면서 품질 높이고 싶다 → AutoGen. 단 비용과 예측 불가능성 감안해야.
결국 프로덕션 가야 하는 프로젝트 → CrewAI로 프로토타입 → LangGraph로 마이그레이션. 많은 팀이 이 경로를 따라요.
같은 워크플로우, 세 가지 방식 비교
동일한 "리서치 → 분석 → 보고서 작성" 파이프라인을 세 프레임워크로 구현할 때 코드량 차이예요.
CrewAI: ~60줄 (가장 간결)
AutoGen: ~80줄 (중간)
LangGraph: ~120줄 (가장 많음, 대신 제어권 높음)
코드가 짧다고 좋은 게 아니에요. LangGraph의 120줄은 명시적 상태 관리와 조건부 흐름 덕분에 프로덕션에서 훨씬 안정적으로 동작해요.
마무리
세 프레임워크 선택의 핵심 원칙은 하나예요.
"프로토타입은 CrewAI, 프로덕션은 LangGraph."
AutoGen은 에이전트 토론이 꼭 필요한 특수한 케이스에 써요. 일반적인 업무 자동화에는 비용 대비 효율이 낮아요.
멀티에이전트 시스템의 핵심 도전은 프레임워크 선택이 아니라 에이전트 역할 설계와 오류 처리예요. 어떤 프레임워크를 쓰든 에이전트가 실패했을 때 어떻게 복구하는지를 먼저 설계하세요. 😄
'AI Agent' 카테고리의 다른 글
| n8n으로 AI 워크플로우 자동화 — 코드 없이 Claude 에이전트 파이프라인 만들기 (0) | 2026.04.14 |
|---|---|
| AI 에이전트 모니터링 완전 가이드 — LangSmith vs Langfuse 실전 비교 (0) | 2026.04.09 |
| AI 에이전트가 기억하는 법 — 단기/장기 메모리 아키텍처와 MemGPT 완전 정리 (0) | 2026.03.26 |
| AI 에이전트 보안 완전 정리 — Prompt Injection 공격과 방어 완전 가이드 (0) | 2026.03.26 |
| AI 에이전트 성능을 어떻게 측정하나 — Evals와 평가 방법론 완전 정리 (0) | 2026.03.25 |