MyZubster를 위한 AI 자동화 시스템 구축
요약
MyZubster 프로젝트의 GitHub 이슈, 바운티, Telegram 알림을 자동으로 처리하기 위한 AI 자동화 시스템 구축 사례를 소개합니다. Ollama를 통해 Gemma, Llama, DeepSeek와 같은 로컬 모델을 활용하여 효율적인 모듈형 아키텍처를 구현했습니다.
핵심 포인트
- GitHub 이슈 및 PR 자동 감지 및 분석 시스템 구축
- Ollama를 활용한 Gemma, Llama, DeepSeek 로컬 모델 연동
- Node.js 기반의 모듈형 자동화 아키텍처 설계
- Telegram Bot을 통한 실시간 알림 자동화 구현
🚀 MyZubster를 위한 AI 자동화 시스템 구축
서론
MyZubster는 식물 매핑, Monero를 이용한 개인정보 우선 결제, 그리고 인간 중심의 AI를 위한 오픈 소스 (open-source) 생태계입니다. 이 포스트에서는 GitHub 이슈, 바운티 (bounties), 그리고 Telegram 알림을 자동으로 처리하는 AI 자동화 시스템을 어떻게 구축했는지 공유하겠습니다.
📋 문제점
MyZubster와 같은 오픈 소스 프로젝트를 관리하는 것은 복잡합니다:
수동 분류 (triage)가 필요한 너무 많은 이슈들
바운티 (Bounties)를 수동으로 생성하고 관리해야 함
...
🎯 해결책
저는 다음과 같은 기능을 수행하는 모듈형 시스템을 구축했습니다:
GitHub 모니터링 - 새로운 이슈와 PR (Pull Requests)을 자동으로 감지
AI를 통한 분석 - 로컬 모델 (Gemma, Llama, DeepSeek) 사용
...
🏗️ 아키텍처 (Architecture)
┌─────────────────────────────────────────────────────────────┐
│ MyZubster AI 자동화 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Telegram │ │ GitHub │ │ AI Models │ │
│ │ Bot Handler │ │ Monitor │ │ │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │
│ └─────────────────┼──────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Automation │ │
│ │ Orchestrator │ │
│ └─────────────────┘ │
│ │ │
│ ┌─────────────────┼──────────────────┐ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌───────▼───────┐ ┌──────▼──────┐ │
│ │ Database │ │ Backend │ │ Frontend │ │
│ │ (MongoDB) │ │ (Node.js) │ │ (React) │ │
│ └─────────────┘ └───────────────┘ └─────────────┘ │
│
└─────────────────────────────────────────────────────────────┘
🛠️ 기술 스택 (Technology Stack)
핵심 기술 (Core Technologies)
Node.js - 런타임 환경 (Runtime environment)
Express - API 서버
...
AI 스택 (AI Stack)
Ollama - 로컬 AI 모델 실행기 (Local AI model runner)
Gemma 2B - Google의 경량 AI 모델 (기본값)
...
자동화 스택 (Automation Stack)
node-telegram-bot-api - Telegram 연동
Octokit - GitHub API 클라이언트
...
🧠 AI 모델 설정 (AI Models Setup)
🧠 AI 모델 설정 (AI Models Setup)
AI 모델은 Ollama를 사용하여 로컬에서 실행됩니다. 설정 방법은 다음과 같습니다:
Ollama 설치
curl -fsSL https://ollama.com/install.sh | sh
모델 가져오기 (Pulling the Models)
ollama pull gemma:2b
ollama pull llama3.2:3b
ollama pull deepseek-r1:1.5b
모델 테스트
ollama run gemma:2b "What is MyZubster?"
🤖 Telegram 봇
봇은 커뮤니티를 위한 대화형 명령어를 제공합니다:
사용 가능한 명령어
| 명령어 | 설명 |
|---|---|
| /start | 환영 메시지 및 가이드 |
| /status | 시스템 및 서비스 상태 |
| /github | 최근 GitHub 활동 |
| /bounties | 활성화된 바운티(bounties) 목록 |
| /analyze | 이슈에 대한 AI 분석 |
| /help | 사용 가능한 모든 명령어 표시 |
봇 설정
class TelegramBotHandler {
async start() {
this.bot = new TelegramBot(this.token, { polling: true });
// 명령어 핸들러 등록
this.bot.onText(/^/start/, this.handleStart.bind(this));
this.bot.onText(/^/status/, this.handleStatus.bind(this));
...
}
🐙 GitHub 모니터 (GitHub Monitor)
GitHub 모니터는 저장소(repositories)를 감시하고 이벤트를 발생시킵니다:
const { Octokit } = require('@octokit/rest');
const EventEmitter = require('events');
class GitHubMonitor extends EventEmitter {
constructor(token, logger) {
super();
this.token = token;
this.logger = logger;
this.issues = {};
this.repo = process.env.GITHUB_REPO;
}
async start() {
this.octokit = new Octokit({
auth: this.token,
...
}
🧠 AI 오케스트레이터 (AI Orchestrator)
AI 오케스트레이터는 시스템의 두뇌 역할을 합니다. 폴백 전략 (fallback strategies)과 함께 여러 모델을 사용합니다:
class AIOrchestrator {
constructor(logger) {
this.logger = logger;
this.models = {
gemma: {
url: 'http://localhost:11434/api',
model: 'gemma:2b'
},
llama: {
url: 'http://localhost:11434/api',
model: 'llama3.2:3b'
},
deepseek: {
url: process.env.DEEPSEEK_API_URL,
key: process.env.DEEPSEEK_API_KEY
}
};
}
async analyzeIssue(issue) {
const prompt = `
이 GitHub 이슈를 분석하세요:
제목: ${issue.title}
설명: ${issue.body}
라벨 (Labels): ${issue.labels.map(l => l.name).join(', ')}
다음 내용을 제공하세요:
1. 요약 (Summary) (1-2문장)
2. 복잡도 (Complexity) (낮음/중간/높음 및 이유)
3. 우선순위 (Priority) (낮음/중간/높음 및 이유)
4. 기술적 접근 방식 (Technical Approach) (단계별)
5. 예상 소요 시간 (Estimated Effort) (시간 단위)
6. 의존성 (Dependencies)
7. 잠재적 리스크 (Potential Risks)
8. 제안된 보상 금액 (Suggested Bounty Amount)
`;
```
// 폴백(fallback)을 포함하여 순서대로 모델 시도
const models = [
{ name: 'gemma', config: this.models.gemma, method: 'ollama' },
...
```
}
}
🔧 Systemd 서비스 관리
프로덕션 배포를 위해, 다음과 같이 systemd 서비스를 생성했습니다:
ini
[Unit]
Description=MyZubster AI Automation Service
After=network.target mongod.service
[Service]
Type=simple
User=root
WorkingDirectory=/root/myzubster/myzubster-merged/services/ai-automation
ExecStart=/usr/bin/node /root/myzubster/myzubster-merged/services/ai-automation/index.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production
Environment=PORT=5678
[Install]
WantedBy=multi-user.target
📊 실제 사례 분석
다음은 Monero 결제 이슈에 대해 시스템이 수행한 실제 분석 결과입니다:
text
📊 AI 분석 결과:
**1. 요약 (Summary):**
이 이슈는 보상금(bounties) 결제를 위해 Monero (XMR) 지원을 추가할 것을 제안합니다.
**2. 복잡도 (Complexity):**
높음 (High). XMR와 같은 새로운 암호화폐의 통합은 API 통합, 스마트 컨트랙트 (smart contract) 개발, 그리고 기존 시스템과의 잠재적인 호환성 문제와 관련된 기술적 복잡성을 수반합니다.
**3. 우선순위 (Priority):**
높음 (High). XMR 결제를 통합하면 암호화폐 중심의 사용자들을 유인할 수 있습니다.
**4. 기술적 접근 방식 (Technical Approach):**
• Monero 블록체인과의 API 통합 개발
• 보상금 관리를 위한 스마트 컨트랙트 (smart contracts) 생성
• 보상 플랫폼과의 통합
• 사용자 인터페이스 (user interfaces) 구현
**5. 예상 소요 시간 (Estimated Effort):**
3-4주 (120-160시간)
**6. 권장 보상 (Suggested Bounty):**
0.01 XMR per bounty (~$2-5 USD)
🚀 결과 (Results)
시스템을 배포한 후, 즉각적인 이점을 확인했습니다:
| 지표 (Metric) | 이전 (Before) | 이후 (After) |
| :--- | :--- | :--- |
| 이슈 응답 시간 (Issue response time) | 24-48시간 | 5분 미만 |
| 보상 생성 (Bounty creation) | 수동 (2-3일) | 자동 (5분) |
| 기여자 알림 (Contributor notifications) | 수동 이메일 | 자동 Telegram |
| 분류에 소요되는 시간 (Time spent on triage) | 주당 5시간 이상 | 0시간 (자동화) |
📁 프로젝트 구조 (Project Structure)
```text
services/ai-automation/
├── src/
│ ├── telegram/
│ │ └── bot.js # Telegram 봇 핸들러
│ ├── github/
│ │ └── monitor.js # GitHub 모니터
│ ├── ai/
│ │ └── orchestrator.js # AI 오케스트레이터 (orchestrator)
│ └── orchestrator/
│ └── index.js # 메인 오케스트레이터 (Main orchestrator)
├── logs/
├── scripts/
├── .env.example
├── index.js
├── package.json
└── README.md
💡 주요 학습 내용 (Key Lessons Learned)
로컬 AI (Local AI)는 강력합니다 - 모델을 로컬에서 실행하면 API 비용을 절감하고 데이터를 비공개로 유지할 수 있습니다.
폴백 전략 (Fallback Strategies)이 중요합니다 - 여러 모델을 사용하면 신뢰성을 보장할 수 있습니다.
...
🔗 링크 (Links)
저장소 (Repository): https://github.com/MyZubster-Ecosystem/myzubster
Telegram 봇 (Telegram Bot): @myzubster_bot
...
📝 직접 시도해보기 (Try It Yourself)
# 저장소 클론 (Clone the repository)
git clone https://github.com/MyZubster-Ecosystem/myzubster.git
cd myzubster/services/ai-automation
# 의존성 설치 (Install dependencies)
npm install
# 환경 설정 (Configure environment)
cp .env.example .env
# 토큰 추가: TELEGRAM_BOT_TOKEN, GITHUB_TOKEN
# 시스템 시작 (Start the system)
npm start
🎯 다음 단계는? (What's Next?)
다음 기능들을 추가할 계획입니다:
웹 대시보드 (Web Dashboard) - 모든 서비스의 시각적 모니터링
Slack 연동 (Slack Integration) - 대체 알림 채널
...
🙏 결론 (Conclusion)
이 AI 기반 자동화 시스템을 구축함으로써 MyZubster를 관리하는 방식이 완전히 바뀌었습니다. 단순한 아이디어로 시작된 것이 복잡한 작업을 자동으로 처리하는 완전한 생태계로 성장했습니다.
가장 좋은 점은 무엇일까요? 이 모든 것이 오픈 소스이며 여러분의 프로젝트에도 사용할 수 있다는 점입니다!
Built with ❤️ by the MyZubster Team
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기