콘텐츠로 이동

CrewAI & Mastra

CrewAI는 현실의 팀 구조를 에이전트 시스템에 그대로 반영합니다. 역할(Role)을 가진 에이전트들이 목표(Task)를 분담하여 팀(Crew)으로 협업합니다.

Agent (에이전트) — 역할, 목표, 배경을 가진 전문가
Task (태스크) — 구체적인 작업 + 기대 결과물
Crew (크루) — 에이전트 + 태스크의 조합 + 실행 프로세스
from crewai import Agent
from 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,
)
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], # 이전 태스크 결과를 컨텍스트로 사용
)
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' } });
항목CrewAIMastra
언어PythonTypeScript
철학역할 기반 팀 협업타입 안전 워크플로우
강점직관적인 팀 구조 모델링엄격한 타입, 워크플로우 엔진
학습 곡선낮음중간
커뮤니티매우 활발성장 중
엔터프라이즈가능강점
적합한 상황역할 분담이 명확한 작업TypeScript 팀, 파이프라인 중심

CrewAI는 Agent(역할), Task(작업), Crew(팀)라는 직관적인 구조로 역할 기반 멀티에이전트 시스템을 빠르게 구축할 수 있습니다. Mastra는 TypeScript 타입 시스템과 워크플로우 엔진을 결합하여 안전하고 예측 가능한 에이전트 파이프라인을 제공합니다. 두 프레임워크 모두 실제 팀 구조를 에이전트로 표현하는 역할 기반 설계 철학을 공유합니다.