CrewAI & Mastra
CrewAI — 역할 기반 팀 에이전트
섹션 제목: “CrewAI — 역할 기반 팀 에이전트”CrewAI는 현실의 팀 구조를 에이전트 시스템에 그대로 반영합니다. 역할(Role)을 가진 에이전트들이 목표(Task)를 분담하여 팀(Crew)으로 협업합니다.
세 가지 핵심 개념
섹션 제목: “세 가지 핵심 개념”Agent (에이전트) — 역할, 목표, 배경을 가진 전문가Task (태스크) — 구체적인 작업 + 기대 결과물Crew (크루) — 에이전트 + 태스크의 조합 + 실행 프로세스Agent 정의
섹션 제목: “Agent 정의”from crewai import Agentfrom crewai_tools import FileReadTool, CodeInterpreterTool
# 시니어 개발자 에이전트senior_developer = Agent( role="시니어 소프트웨어 엔지니어", goal="확장 가능하고 유지보수하기 쉬운 코드를 작성한다", backstory=""" 당신은 10년 경력의 시니어 엔지니어입니다. 클린 코드, 테스트 주도 개발, 코드 리뷰에 전문성을 가집니다. 항상 동료 개발자의 코드 이해성을 최우선으로 생각합니다. """, tools=[FileReadTool(), CodeInterpreterTool()], verbose=True, allow_delegation=True, # 다른 에이전트에게 위임 허용)
# QA 엔지니어 에이전트qa_engineer = Agent( role="QA 엔지니어", goal="버그를 발견하고 코드 품질을 보장한다", backstory=""" 당신은 품질에 집착하는 QA 전문가입니다. 엣지 케이스, 경계값 테스트, 보안 취약점 발견에 탁월합니다. """, tools=[FileReadTool(), CodeInterpreterTool()], verbose=True,)Task 정의
섹션 제목: “Task 정의”from crewai import Task
# 코드 작성 태스크coding_task = Task( description=""" 다음 요구사항에 따라 사용자 인증 모듈을 구현하세요: - JWT 기반 토큰 인증 - 비밀번호 bcrypt 해싱 - 로그인 시도 횟수 제한 (5회) 파일: src/auth/authentication.py """, expected_output="완성된 Python 인증 모듈 (타입 힌트, 독스트링 포함)", agent=senior_developer,)
# 코드 리뷰 태스크review_task = Task( description=""" 작성된 인증 모듈을 리뷰하세요: - 보안 취약점 검토 - 테스트 커버리지 확인 - 코드 품질 평가 """, expected_output="리뷰 보고서 (발견된 이슈 목록, 심각도 분류)", agent=qa_engineer, context=[coding_task], # 이전 태스크 결과를 컨텍스트로 사용)Crew — 팀 조립 및 실행
섹션 제목: “Crew — 팀 조립 및 실행”from crewai import Crew, Process
crew = Crew( agents=[senior_developer, qa_engineer], tasks=[coding_task, review_task], process=Process.sequential, # 순차 실행 verbose=True, memory=True, # 에이전트 간 장기 기억 공유 cache=True, # 도구 호출 결과 캐싱 max_rpm=30, # 분당 API 요청 제한)
result = crew.kickoff( inputs={"project_name": "AuthService", "deadline": "2026-04-01"})print(result.raw)Mastra — TypeScript 우선 에이전트 프레임워크
섹션 제목: “Mastra — TypeScript 우선 에이전트 프레임워크”Mastra는 TypeScript를 first-class citizen으로 설계한 에이전트 프레임워크입니다. 강타입 시스템, 워크플로우 엔진, 에이전트 메모리가 통합되어 있습니다.
에이전트 정의
섹션 제목: “에이전트 정의”import { Mastra, Agent } from '@mastra/core';import { z } from 'zod';
// 타입 안전한 도구 정의const readFileTool = { name: 'readFile', description: '파일 내용을 읽습니다', inputSchema: z.object({ path: z.string().describe('읽을 파일 경로'), }), outputSchema: z.object({ content: z.string(), lines: z.number(), }), execute: async ({ path }: { path: string }) => { const content = await fs.readFile(path, 'utf-8'); return { content, lines: content.split('\n').length }; },};
// 에이전트 정의const codeReviewAgent = new Agent({ name: 'CodeReviewer', instructions: `당신은 시니어 코드 리뷰어입니다. 보안, 성능, 가독성 관점에서 코드를 분석합니다.`, model: { provider: 'ANTHROPIC', name: 'claude-opus-4-5', }, tools: { readFileTool },});워크플로우 엔진
섹션 제목: “워크플로우 엔진”Mastra의 워크플로우는 에이전트 파이프라인을 타입 안전하게 정의합니다.
import { createWorkflow, createStep } from '@mastra/core';
// 각 스텝의 입출력 타입 정의const analyzeStep = createStep({ id: 'analyze', inputSchema: z.object({ filePath: z.string() }), outputSchema: z.object({ issues: z.array(z.string()), score: z.number() }), execute: async ({ inputData, mastra }) => { const agent = mastra.getAgent('CodeReviewer'); const result = await agent.generate( `${inputData.filePath} 파일을 분석해주세요`, ); return parseReviewResult(result.text); },});
const reportStep = createStep({ id: 'report', inputSchema: z.object({ issues: z.array(z.string()), score: z.number() }), outputSchema: z.object({ reportPath: z.string() }), execute: async ({ inputData }) => { const reportPath = await generateReport(inputData); return { reportPath }; },});
// 워크플로우 조립const reviewWorkflow = createWorkflow({ name: 'code-review', triggerSchema: z.object({ filePath: z.string() }),}) .then(analyzeStep) .then(reportStep) .commit();
// Mastra 인스턴스 구성const mastra = new Mastra({ agents: { codeReviewAgent }, workflows: { reviewWorkflow },});
// 실행const run = await mastra.getWorkflow('code-review').createRun();await run.start({ triggerData: { filePath: 'src/auth.ts' } });CrewAI vs Mastra 비교
섹션 제목: “CrewAI vs Mastra 비교”| 항목 | CrewAI | Mastra |
|---|---|---|
| 언어 | Python | TypeScript |
| 철학 | 역할 기반 팀 협업 | 타입 안전 워크플로우 |
| 강점 | 직관적인 팀 구조 모델링 | 엄격한 타입, 워크플로우 엔진 |
| 학습 곡선 | 낮음 | 중간 |
| 커뮤니티 | 매우 활발 | 성장 중 |
| 엔터프라이즈 | 가능 | 강점 |
| 적합한 상황 | 역할 분담이 명확한 작업 | TypeScript 팀, 파이프라인 중심 |
CrewAI는 Agent(역할), Task(작업), Crew(팀)라는 직관적인 구조로 역할 기반 멀티에이전트 시스템을 빠르게 구축할 수 있습니다. Mastra는 TypeScript 타입 시스템과 워크플로우 엔진을 결합하여 안전하고 예측 가능한 에이전트 파이프라인을 제공합니다. 두 프레임워크 모두 실제 팀 구조를 에이전트로 표현하는 역할 기반 설계 철학을 공유합니다.