crewAI로 다중 AI 에이전트 시스템 구축하기 — 멀티 에이전트 자동화 완벽 가이드

# crewAI로 다중 AI 에이전트 시스템 구축하기 — 멀티 에이전트 자동화 완벽 가이드

지금까지 AI를 활용하는 다양한 방법을 다뤘습니다. Vibe Coding으로 코드를 쓰고, RAG로 AI에게 지식을 부여하고, MCP로 AI가 서버를 관리하게 했습니다. 하지만 현실의 업무는 하나의 작업으로 끝나지 않습니다. 서버를 모니터링하고, 로그를 분석하고, 문제를 진단하고, 해결책을 적용하고, 결과를 보고하는 — 이 모든 게 연쇄적으로 일어납니다.

한 명의 AI 에이전트가 전부 하기엔 너무 복잡하고, 각 단계마다 다른 전문성이 필요합니다. 이럴 때 **crewAI**를 사용하면 여러 AI 에이전트가 각자의 역할을 맡아 협업하는 시스템을 구축할 수 있습니다.

## 멀티 에이전트란? 단일 vs 멀티 비교

멀티 에이전트 시스템이란, 여러 AI 에이전트가 각자의 **역할과 목표**를 가지고 서로 소통하면서 복잡한 작업을 완수하는 구조를 말합니다. 사람의 조직과 비슷합니다. 기획팀, 개발팀, QA팀이 각자의 역할을 하면서 제품을 만드는 것처럼요.

단일 에이전트는 한 명이 기획도 하고, 코딩도 하고, 테스트도 합니다. 간단한 작업에는 충분합니다. 하지만 작업이 복잡해지면 하나의 프롬프트에 너무 많은 역할을 넣게 되고, 에이전트가 혼란스러워합니다. “서버 상태를 확인하고, 로그를 분석하고, 문제를 수정하고, 결과를 이메일로 보내줘”라고 한 번에 시키면, 중간 단계를 건너뛰거나 엉뚱한 결과를 낼 수 있습니다.

멀티 에이전트는 이 문제를 **역할 분담**으로 해결합니다. 모니터링 에이전트는 서버 상태만 확인합니다. 분석 에이전트는 그 결과를 받아서 원인을 분석합니다. 보고 에이전트는 분석 결과를 정리해서 알림을 보냅니다. 각 에이전트는 자신의 역할에만 집중하므로 더 정확한 결과를 냅니다.

## crewAI 기본 구조 — Agent, Task, Crew

crewAI의 핵심 구성 요소는 세 가지입니다.

**Agent**는 하나의 AI 역할 단위입니다. 역할(role), 목표(goal), 배경지식(backstory)을 정의합니다. 예를 들어 “서버 모니터링 전문가” 에이전트는 이렇게 정의합니다.

“`python
from crewai import Agent, Task, Crew

monitoring_agent = Agent(
role=”VPS 모니터링 전문가”,
goal=”서버 상태를 실시간으로 점검하고 이상을 감지한다”,
backstory=”””10년차 DevOps 엔지니어. Nginx, systemd,
리소스 모니터링에 능통. CPU, 메모리, 디스크 지표를
한눈에 파악할 수 있다.”””,
tools=[ssh_tool, system_status_tool],
llm=”qwen2.5:14b”,
verbose=True
)
“`

**Task**는 에이전트가 수행할 구체적 작업입니다. expected_output으로 결과물 형식을 지정할 수 있습니다.

“`python
monitoring_task = Task(
description=”””
다음 항목을 점검해서 보고하시오:
1. CPU 사용률 (top)
2. 메모리 사용량 (free -h)
3. 디스크 여유 공간 (df -h)
4. Nginx 프로세스 상태 (systemctl status nginx)
5. 최근 5분간 500 에러 발생 여부
“””,
expected_output=”각 항목별 상태와 이상 징후 요약”,
agent=monitoring_agent
)
“`

**Crew**는 에이전트와 태스크를 묶어서 실행하는 컨테이너입니다. `process=”sequential”`이면 순차 실행, `”consensus”`면 토론 후 합의합니다.

## 실전: VPS 관리 3에이전트 시스템 구축

이제 실제로 작동하는 3에이전트 VPS 관리 시스템을 만들어 봅니다.

“`python
from crewai import Agent, Task, Crew, Process

# Agent 1: 모니터링
monitor = Agent(
role=”VPS 모니터링 전문가”,
goal=”서버 상태를 점검하고 이상을 감지한다”,
backstory=”DevOps 베테랑. 리소스 지표와 로그를 분석해 문제를 찾아낸다.”,
tools=[ssh_tool],
llm=”qwen2.5:14b”
)

# Agent 2: 분석
analyst = Agent(
role=”로그 분석가”,
goal=”모니터링 결과를 바탕으로 문제의 근본 원인을 분석한다”,
backstory=”데이터 분석 전문가. 로그 패턴에서 숨겨진 인과관계를 찾아낸다.”,
llm=”qwen2.5:14b”
)

# Agent 3: 보고
reporter = Agent(
role=”보고서 작성자”,
goal=”분석 결과를 이해하기 쉬운 보고서로 정리한다”,
backstory=”기술 작가. 복잡한 기술 내용을 비개발자도 이해할 수 있게 풀어쓴다.”,
llm=”qwen2.5:14b”
)
“`

세 에이전트에 각각 태스크를 할당하고, Crew로 묶습니다.

“`python
# Task 정의
check_task = Task(
description=”SSH로 서버에 접속해서 CPU, 메모리, 디스크, Nginx 상태, 최근 에러 로그를 점검하시오.”,
expected_output=”서버 상태 요약표 및 이상 징후 목록”,
agent=monitor
)

analysis_task = Task(
description=”””모니터링 결과를 바탕으로:
1. 발견된 이상 징후의 근본 원인 분석
2. 각 문제의 심각도 평가 (Critical/High/Medium/Low)
3. 권장 조치 사항”””,
expected_output=”문제별 원인 분석, 심각도, 권장 조치”,
agent=analyst
)

report_task = Task(
description=”분석 결과를 마크다운 보고서로 작성하시오. 비개발자도 이해할 수 있게 작성할 것.”,
expected_output=”VPS 상태 보고서 (마크다운)”,
agent=reporter
)

# Crew 실행
vps_crew = Crew(
agents=[monitor, analyst, reporter],
tasks=[check_task, analysis_task, report_task],
process=Process.sequential,
verbose=True
)

result = vps_crew.kickoff()
print(result)
“`

실행하면 monitor가 서버를 점검하고, 그 결과를 analyst가 분석하고, reporter가 보고서를 작성합니다. 각 에이전트는 이전 에이전트의 출력을 입력으로 받아 자신의 작업을 수행합니다.

## sequential vs hierarchical 프로세스

crewAI는 두 가지 실행 모드를 지원합니다.

**Sequential(순차)**: 에이전트가 정의된 순서대로 실행됩니다. A → B → C. 간단하고 예측 가능합니다. 위의 예시가 이 방식입니다.

**Hierarchical(계층)**: 매니저 에이전트가 작업을 분배하고 결과를 취합합니다. 매니저가 상황을 판단해서 “이건 A가, 저건 B가 하자”라고 지시합니다. 복잡한 작업이나 에이전트 간 협업이 필요할 때 유용하지만, 토큰 소비가 많습니다.

초기에는 sequential로 시작하고, 작업이 복잡해지면 hierarchical로 전환하는 것을 권장합니다.

## Tools로 에이전트에 손발 달기

에이전트가 SSH 접속, 파일 읽기, API 호출 등을 하려면 **Tools**가 필요합니다. crewAI는 LangChain tools와 호환됩니다.

“`python
from langchain.tools import Tool

def ssh_command(command: str) -> str:
“””SSH로 VPS에 명령을 실행한다”””
import subprocess
result = subprocess.run(
[“ssh”, “user@vps”, command],
capture_output=True, text=True, timeout=30
)
return result.stdout

ssh_tool = Tool(
name=”SSH Command”,
func=ssh_command,
description=”VPS 서버에 SSH로 명령을 실행한다”
)
“`

이 도구를 에이전트의 `tools` 리스트에 넣으면, 에이전트가 필요할 때 자동으로 호출합니다. “CPU 사용률을 확인해줘”라고 하면 에이전트가 `ssh_command(“top -bn1”)`를 실행하는 식입니다.

**보안 주의**: SSH 도구를 에이전트에 줄 때는 실행 가능한 명령어를 제한해야 합니다. `rm -rf` 같은 파괴적 명령을 에이전트가 실행하지 못하도록 화이트리스트 방식으로 필터링하는 것이 좋습니다.

## 비용 최적화 — 로컬 LLM 활용

3개의 에이전트가 각각 LLM을 호출하면 토큰 비용이 3배가 됩니다. 에이전트 간 대화가 오가면 더 늘어납니다. 이를 최적화하는 방법:

**1. 로컬 LLM 사용** — VPS에 Ollama를 설치하고 qwen2.5:14b 같은 모델을 사용하면 API 비용이 0원입니다. 8GB RAM이면 7b 모델, 16GB면 14b 모델이 가능합니다.

**2. 에이전트별 모델 차등** — 모니터링 에이전트는 단순 작업이므로 작은 모델(7b), 분석 에이전트는 복잡한 추론이 필요하므로 큰 모델(14b)을 사용합니다.

**3. 캐싱** — 동일한 질문에 대한 답을 캐싱해서 반복 호출을 줄입니다.

## 실사용 팁

실제로 사용해 보면 몇 가지 패턴이 보입니다.

첫째, **에이전트 역할을 너무 광범위하게 잡지 않는다**. “서버 관리 에이전트”보다 “Nginx 로그 분석 에이전트”처럼 구체적이야 합니다. 역할이 명확할수록 결과 품질이 올라갑니다.

둘째, **expected_output을 구체적으로 작성한다**. “분석 결과”보다 “문제별 원인, 심각도, 권장 조치를 포함한 마크다운 보고서”처럼 명시해야 에이전트가 형식에 맞는 결과를 냅니다.

셋째, **초기에는 2개 에이전트로 시작한다**. 3~4개로 바로 시작하면 디버깅이 어렵습니다. 먼저 2개로 핵심 흐름을 검증하고, 필요할 때 에이전트를 추가합니다.

## 정리

crewAI로 멀티 에이전트 시스템을 구축하면, 복잡한 작업을 역할별로 분담해서 처리할 수 있습니다. 단일 에이전트의 한계를 넘어, 모니터링·분석·보고 각 역할을 전문 에이전트가 담당하는 구조입니다. 로컬 LLM을 사용하면 비용 부담 없이도 충분히 실험할 수 있습니다.

처음에는 간단한 2에이전트 시스템부터 만들어 보세요. “모니터링 에이전트 → 보고 에이전트” 두 개만으로도 단일 에이전트보다 훨씬 구조적인 결과를 얻을 수 있습니다.

**관련 영상**: 이 글은 유튜브 영상의 보충 자료입니다. 시리즈 마지막 영상에서 실제 코드 작성과 실행 과정을 확인할 수 있습니다.


관련 글