
Mastra로 AI 에이전트 구축하기 — TypeScript 버전 (그리고 두 번이나 망가뜨렸습니다) 🪡🤖
요약
TypeScript 네이티브 프레임워크인 Mastra를 사용하여 AI 에이전트를 구축하는 방법을 소개합니다. 에이전트, 도구, 워크플로우, 메모리 등을 통합하여 커뮤니티 소식을 스캔하는 'Community Radar' 프로젝트를 구현하는 과정을 다룹니다.
핵심 포인트
- Mastra는 에이전트, 도구, 워크플로우를 통합하는 TypeScript 프레임워크입니다.
- CLI를 통해 빠르게 프로젝트를 설정하고 예시 에이전트를 생성할 수 있습니다.
- 에이전트가 커뮤니티 채팅 내 주요 성과를 추출하고 트윗 초안을 작성하는 사례를 제시합니다.
여러분 안녕하세요! Konichiwa, Khushi입니다 (참고로 지금 일본어를 배우고 있는 URESHIKO예요 🌸)
이번에는 Mastra에 대해 다뤄보려 합니다. Mastra는 AI 에이전트(AI agents), 에이전트 번들링, 도구(tools), 워크플로우(workflows), 그리고 메모리(memory)를 다섯 개의 라이브러리를 이어 붙이고 기도하는 대신 하나의 툴킷으로 묶어주는 TypeScript 네이티브 프레임워크입니다.
이것을 탐색하다가 이런 생각이 들었습니다. 그냥 읽기만 하는 대신 실제로 무언가를 만들어 보자! 밤을 꼬박 새워 파고든 끝에, 아주 멋진 것을 만들어냈습니다!
나의 아이디어
여러분 모두 제가 커뮤니티를 사랑한다는 것을 아실 테니, 이번에도 커뮤니티에 관한 것입니다.
채팅은 매우 빠르게 흘러갑니다. 누군가 오전 9시에 놀라운 것을 출시하면, 9시 40분쯤에는 미팅 계획이나 "혹시 괜찮은 React 상태 관리 라이브러리 아는 분 계신가요?" 같은 잡담 속에 묻혀버리곤 하죠.
그렇다면 에이전트가 그 소음 속을 스캔하여 진짜 성과들을 뽑아내고, 심지어 그것에 대한 트윗 초안까지 작성할 수 있다면 어떨까요?
저는 이것을 Community Radar라고 불렀습니다. 작은 아이디어지만 실제 사용 사례가 있는, 그저 분위기와 호기심으로 만든 프로젝트입니다 🌸
설정
npm create mastra@latest
CLI가 모든 것을 처리합니다. 몇 가지 간단한 질문(프로젝트 이름, AI 제공자)에 답하면, 이미 구축된 예시 **날씨 에이전트 (weather agent)**가 포함된 작동 가능한 프로젝트를 갖게 됩니다.
결과적으로 src/mastra/ 폴더에는 다음이 포함됩니다:
index.ts— Mastra에 모든 것을 등록합니다.agents/weather-agent.ts— 에이전트 본체입니다.tools/weather-tool.ts— 에이전트가 날씨를 가져오기 위해 사용하는 도구입니다.workflows/weather-workflow.ts— 에이전트를 실행하는 워크플로우입니다.scorers/weather-scorer.ts— 에이전트의 출력을 평가합니다.
이것은 단순한 채우기(filler)가 아닙니다. Mastra가 원하는 정확한 패턴을 보여주는 _템플릿_입니다: 에이전트 (Agent, 두뇌) + 도구 (Tool, 손) + 워크플로우 (Workflow, 과정). 이 패턴을 여러분의 아이디어에 적용하세요.
저는 먼저 날씨 에이전트를 테스트해 보았습니다. 그냥 고향인 비하르(Bihar), 부샤르(Buxar)의 날씨를 물어보면서 파이프라인이 작동하는지 확인했습니다. 작동했습니다. 실제 날씨, 실제 응답입니다.
참고로, 저는 Google AI Studio에서 Gemini API 키를 사용했는데, 이런 실험에는 무료였습니다.
에이전트 구축하기 (Building My Agent)
날씨 에이전트의 구조를 복사하여 저만의 것으로 다시 작성했습니다:
index.ts에 등록했습니다 (모든 에이전트를 메인 Mastra 설정에 수동으로 연결해야 합니다. 그렇지 않으면 Studio가 존재 자체를 알지 못합니다. 제 에이전트가 나타나지 않았을 때 뼈저리게 배웠습니다 😂).
첫 번째 실제 테스트 (The First Real Test)
가짜 커뮤니티 채팅 로그를 작성했습니다. 사소한 잡담 속에 숨겨진 진짜 승리들, 정확히 제가 실제로 사용하는 커뮤니티 채팅과 같습니다:
이 순간, 이것은
const response = await agent.stream([{ role: 'user', content: chatText }]);
let resultText = '';
...
상태(Status): 성공 ✅. 4초 동안은 기분이 좋았지만, 출력을 확인했을 때까지는 아니었습니다:
빈 문자열(Empty string).
먼저 만들고, 문서는 나중에 읽으세요. 하룻밤이 지날 무렵, 저는 실제로 작동하는 무언가를 만들어냈고, Mastra가 단순히 랜딩 페이지에서 설명하는 것 이상의 무엇인지 훨씬 더 명확하게 파악할 수 있었습니다.
만약 새로운 프레임워크를 시도할지 고민 중이라면, 여러분의 아이디어를 작고 단순한 버전으로 먼저 만들어 보세요. 한 시간 동안 문서를 읽는 것보다, 한 번의 망가진 워크플로우 (workflow)를 통해 더 많은 것을 배울 수 있습니다.
리소스 (Resources)
- Mastra GitHub 리포지토리 (Repo) → github.com/mastra-ai/mastra
- Community Radar (나의 리포지토리) → github.com/khushikumari239/community-radar
💌 여러분도 무언가를 만들고 계신가요? 무엇인지 알려주세요 — 함께 만들고, 망가뜨리고, 함께 해결해 나갑시다 🫶
— Khushiii
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기




