⏱️ 예상 읽기 시간: 25분

1. MAESTRO 소개

MAESTRO란?

MAESTRO는 AI 기반의 연구 자동화 플랫폼으로, 복잡한 연구 작업을 효율적으로 처리할 수 있도록 설계된 오픈소스 애플리케이션입니다. AI 에이전트를 활용하여 문서 수집, 분석, 보고서 생성까지 전체 연구 워크플로우를 자동화할 수 있습니다.

주요 특징

  • AI 에이전트 기반 연구: LLM을 활용한 자동화된 연구 파이프라인
  • RAG (Retrieval-Augmented Generation): 벡터 검색 기반 문서 처리
  • 실시간 웹소켓 통신: 작업 진행 상황 실시간 모니터링
  • 완전 셀프 호스팅: 로컬 환경에서 완전한 독립 운영 가능
  • 다양한 LLM 지원: OpenAI, 로컬 LLM, API 호환 모델
  • SearXNG 통합: 프라이빗 메타 검색 엔진 연동

기술 스택

  • 백엔드: FastAPI, SQLAlchemy, PostgreSQL, pgvector
  • 프론트엔드: React, TypeScript, Vite, Tailwind CSS
  • 인프라: Docker Compose, WebSocket
  • AI/ML: 벡터 임베딩, LLM API 통합

2. 시스템 요구사항

최소 하드웨어 사양

# CPU 모드 (최소)
- CPU: 4코어 이상
- RAM: 8GB 이상
- 저장공간: 10GB 이상
- OS: Linux, macOS, Windows (WSL2)

# GPU 모드 (권장)
- GPU: NVIDIA GPU (CUDA 11.0 이상)
- VRAM: 8GB 이상
- RAM: 16GB 이상
- 저장공간: 20GB 이상

필수 소프트웨어

# 공통 요구사항
- Docker Desktop (최신 버전)
- Docker Compose v2
- Git

# GPU 사용 시 추가 요구사항 (Linux)
- nvidia-container-toolkit
- NVIDIA 드라이버 (최신 버전)

# Windows 사용자
- WSL2 (Ubuntu 20.04 이상)
- Windows Terminal (권장)

3. 설치 및 초기 설정

3.1 저장소 클론 및 기본 설정

# 1. MAESTRO 저장소 클론
git clone https://github.com/murtaza-nasir/maestro.git
cd maestro

# 2. 실행 권한 부여 (Linux/macOS)
chmod +x start.sh stop.sh detect_gpu.sh maestro-cli.sh

# 3. 환경 설정 파일 생성
cp .env.example .env

3.2 환경변수 설정

.env 파일을 편집하여 기본 설정을 구성합니다:

# .env 파일 주요 설정
# ===================

# 데이터베이스 설정
POSTGRES_DB=maestro_db
POSTGRES_USER=maestro_user
POSTGRES_PASSWORD=your_secure_password_here

# JWT 보안 설정
JWT_SECRET_KEY=your_jwt_secret_key_here
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30

# LLM API 설정 (OpenAI 사용 시)
OPENAI_API_KEY=your_openai_api_key_here
LLM_MODEL=gpt-4

# 로컬 LLM 설정 (Ollama 사용 시)
LOCAL_LLM_BASE_URL=http://localhost:11434/v1
LOCAL_LLM_MODEL=llama3.1:8b
USE_LOCAL_LLM=true

# 검색 엔진 설정
SEARCH_ENGINE=searxng
SEARXNG_BASE_URL=http://searxng:8080

# GPU 설정
GPU_AVAILABLE=true
BACKEND_GPU_DEVICE=0
DOC_PROCESSOR_GPU_DEVICE=0

# CPU 전용 모드 (GPU 없는 환경)
FORCE_CPU_MODE=false

3.3 GPU 지원 확인

GPU 지원 여부를 확인하고 최적 설정을 적용합니다:

# GPU 감지 스크립트 실행
./detect_gpu.sh

# 출력 예시:
# =========== GPU Detection Results ===========
# Platform: Linux
# GPU Support: Available
# NVIDIA Driver: 525.147.05
# CUDA Version: 12.0
# Recommended Configuration: GPU-enabled
# ===========================================

4. 플랫폼별 설치 가이드

4.1 Linux (Ubuntu/Debian) - GPU 지원

# 1. NVIDIA 컨테이너 툴킷 설치
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# 2. Docker 재시작
sudo systemctl restart docker

# 3. GPU 테스트
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

# 4. MAESTRO 시작
./start.sh

4.2 macOS (Apple Silicon/Intel)

# 1. Docker Desktop 설치 확인
docker --version
docker-compose --version

# 2. CPU 최적화 모드로 시작
docker-compose -f docker-compose.cpu.yml up -d

# 또는 환경변수 설정 후 일반 시작
echo "FORCE_CPU_MODE=true" >> .env
./start.sh

4.3 Windows (WSL2)

PowerShell을 관리자 권한으로 실행:

# 1. WSL2 및 Ubuntu 설치 확인
wsl --list --verbose

# 2. Docker Desktop Windows 실행 확인
docker --version

# 3. 저장소 클론 (WSL2 내부)
wsl
cd /mnt/c/
git clone https://github.com/murtaza-nasir/maestro.git
cd maestro

# 4. 권한 설정 및 시작
chmod +x *.sh
./start.sh

# 또는 PowerShell 스크립트 사용
# .\start.ps1

5. 서비스 구성 및 시작

5.1 기본 서비스 시작

# 자동 플랫폼 감지로 시작
./start.sh

# 또는 수동으로 Docker Compose 실행
docker-compose up -d

# CPU 전용 모드
docker-compose -f docker-compose.cpu.yml up -d

5.2 서비스 상태 확인

# 컨테이너 상태 확인
docker-compose ps

# 로그 확인
docker-compose logs -f backend
docker-compose logs -f frontend
docker-compose logs -f postgres
docker-compose logs -f searxng

# 전체 로그 확인
docker-compose logs -f

5.3 데이터베이스 초기화

# 데이터베이스 상태 확인
./maestro-cli.sh reset-db --check

# 데이터베이스 통계 조회
./maestro-cli.sh reset-db --stats

# 백업과 함께 데이터베이스 리셋 (필요시)
./maestro-cli.sh reset-db --backup

6. 웹 인터페이스 접속 및 초기 설정

6.1 첫 접속 및 계정 생성

# 브라우저에서 접속
http://localhost:3000

# 또는 CLI로 관리자 계정 생성
./maestro-cli.sh create-user admin securepassword123 --admin

6.2 기본 설정 구성

웹 인터페이스에서 Settings 메뉴로 이동하여 다음을 설정합니다:

# LLM 설정
Model Provider: OpenAI / Local LLM
API Key: [YOUR_API_KEY]
Model Name: gpt-4 / llama3.1:8b
Temperature: 0.7
Max Tokens: 4000

# 검색 설정
Search Engine: SearXNG
Categories: 
  - General
  - Science
  - IT
  - News
Results per Query: 10

# 연구 매개변수
Planning Context: 200000
Max Documents: 50
Chunk Size: 1000
Overlap: 200

7. 로컬 LLM 연동 (Ollama)

7.1 Ollama 설치 및 설정

# Ollama 설치 (Linux/macOS)
curl -fsSL https://ollama.ai/install.sh | sh

# Windows (PowerShell)
# Invoke-WebRequest -Uri https://ollama.ai/install.ps1 -OutFile install.ps1; .\install.ps1

# 모델 다운로드
ollama pull llama3.1:8b
ollama pull codellama:7b
ollama pull mistral:7b

# Ollama 서비스 시작
ollama serve

7.2 MAESTRO와 Ollama 연동

.env 파일을 다음과 같이 수정:

# 로컬 LLM 설정
USE_LOCAL_LLM=true
LOCAL_LLM_BASE_URL=http://host.docker.internal:11434/v1
LOCAL_LLM_MODEL=llama3.1:8b
LOCAL_LLM_API_KEY=ollama

# OpenAI 호환 엔드포인트 사용
LLM_PROVIDER=local

7.3 연동 테스트

# CLI로 모델 테스트
./maestro-cli.sh test-llm

# 또는 Python 스크립트로 직접 테스트
python << EOF
import requests

response = requests.post('http://localhost:11434/v1/chat/completions', 
    json={
        'model': 'llama3.1:8b',
        'messages': [{'role': 'user', 'content': 'Hello, MAESTRO!'}],
        'max_tokens': 100
    }
)
print(response.json())
EOF

8. SearXNG 검색 엔진 설정

8.1 SearXNG 컨테이너 설정 확인

# SearXNG 컨테이너 상태 확인
docker-compose logs searxng

# 설정 파일 확인
docker-compose exec searxng cat /etc/searxng/settings.yml

8.2 검색 카테고리 설정

SearXNG의 settings.yml 파일을 커스터마이징:

# searxng/settings.yml
search:
  safe_search: 0
  autocomplete: duckduckgo
  default_lang: ""
  formats:
    - html
    - json  # MAESTRO 통합을 위해 필수

categories:
  general:
    - google
    - bing
    - duckduckgo
  science:
    - arxiv
    - pubmed
    - semantic scholar
  it:
    - github
    - stackoverflow
    - documentation
  news:
    - google news
    - reuters
    - bbc

8.3 프라이빗 검색 테스트

# SearXNG API 테스트
curl "http://localhost:8080/search?q=artificial+intelligence&format=json&category=science"

# MAESTRO에서 검색 테스트
# 웹 인터페이스 > Settings > Search > Test Search 버튼 클릭

9. 실전 활용 시나리오

9.1 문서 수집 및 분석

# CLI로 문서 일괄 업로드
./maestro-cli.sh ingest username ./research_documents

# 지원 형식
# - PDF, DOCX, TXT, MD
# - 웹 URL, arXiv 논문
# - JSON, CSV 데이터

# 업로드 진행 상황 모니터링
./maestro-cli.sh status username

9.2 연구 프로젝트 생성

웹 인터페이스에서 새 연구 프로젝트 생성:

# 연구 설정 예시
Project Name: "AI Agent Architecture Analysis"
Research Question: "What are the latest trends in AI agent architectures?"
Scope: 
  - Academic papers (2023-2024)
  - Industry reports
  - Technical documentation
Output Format: "Comprehensive report with citations"

9.3 AI 에이전트 워크플로우 실행

# 1. 계획 수립 단계
Research Agent -> Planning Context Analysis
              -> Outline Generation
              -> Resource Identification

# 2. 데이터 수집 단계  
Search Agent -> Web Search (SearXNG)
             -> Document Retrieval
             -> Content Extraction

# 3. 분석 단계
Analysis Agent -> RAG-based Analysis
               -> Cross-reference Validation
               -> Insight Generation

# 4. 보고서 생성 단계
Report Agent -> Content Synthesis
             -> Citation Management
             -> Output Formatting

10. 고급 설정 및 최적화

10.1 GPU 메모리 최적화

# GPU 메모리 모니터링
nvidia-smi -l 1

# 메모리 사용량 최적화 설정
# .env 파일에 추가
MAX_GPU_MEMORY=8192  # MB 단위
BATCH_SIZE=32
CHUNK_OVERLAP=100

10.2 다중 GPU 설정

# 서비스별 GPU 할당
BACKEND_GPU_DEVICE=0
DOC_PROCESSOR_GPU_DEVICE=1
CLI_GPU_DEVICE=0

# GPU 로드 밸런싱 확인
nvidia-smi topo -m

10.3 성능 튜닝

# PostgreSQL 튜닝
# docker-compose.yml에서 postgres 서비스 설정
environment:
  - POSTGRES_SHARED_PRELOAD_LIBRARIES=pg_stat_statements,auto_explain
  - POSTGRES_LOG_STATEMENT=all
  - POSTGRES_EFFECTIVE_CACHE_SIZE=4GB
  - POSTGRES_SHARED_BUFFERS=1GB

# pgvector 인덱스 최적화
docker-compose exec postgres psql -U maestro_user -d maestro_db
CREATE INDEX CONCURRENTLY idx_embeddings_cosine ON documents 
USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);

11. 문제 해결 가이드

11.1 일반적인 오류 및 해결책

# 1. 포트 충돌 오류
Error: Port 3000 already in use
해결: sudo lsof -i :3000; kill -9 <PID>

# 2. GPU 메모리 부족
CUDA out of memory
해결: FORCE_CPU_MODE=true 설정 또는 배치 크기 조정

# 3. 데이터베이스 연결 오류
Connection refused to PostgreSQL
해결: docker-compose restart postgres

# 4. Ollama 연결 실패
Local LLM connection failed
해결: host.docker.internal 대신 실제 IP 사용

11.2 디버깅 도구 활용

# 상세 로그 활성화
export MAESTRO_LOG_LEVEL=DEBUG
docker-compose up -d

# 컨테이너 내부 접근
docker-compose exec backend bash
docker-compose exec postgres psql -U maestro_user -d maestro_db

# 건강 상태 검사
curl http://localhost:8000/health
curl http://localhost:3000/health

11.3 데이터 백업 및 복구

# 데이터베이스 백업
docker-compose exec postgres pg_dump -U maestro_user maestro_db > backup.sql

# 벡터 데이터 백업 (pgvector 확장 포함)
docker-compose exec postgres pg_dump -U maestro_user -Fc maestro_db > backup.dump

# 복구
docker-compose exec -T postgres psql -U maestro_user -d maestro_db < backup.sql

12. 보안 고려사항

12.1 인증 및 권한 관리

# 강력한 JWT 시크릿 생성
openssl rand -hex 32

# 사용자 권한 설정
./maestro-cli.sh create-user researcher pass123 --role user
./maestro-cli.sh create-user admin admin123 --role admin

# API 키 로테이션
./maestro-cli.sh rotate-keys

12.2 네트워크 보안

# 방화벽 설정 (Ubuntu/Debian)
sudo ufw allow from 192.168.1.0/24 to any port 3000
sudo ufw allow from 192.168.1.0/24 to any port 8000

# Reverse Proxy 설정 (Nginx)
# nginx/maestro.conf
server {
    listen 443 ssl;
    server_name maestro.yourdomain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_websocket_upgrade on;
    }
    
    location /api {
        proxy_pass http://localhost:8000;
    }
}

13. 모니터링 및 유지보수

13.1 시스템 모니터링

# 리소스 사용량 모니터링
docker stats maestro_backend maestro_frontend maestro_postgres

# 로그 로테이션 설정
# docker-compose.yml에 추가
logging:
  driver: json-file
  options:
    max-size: "100m"
    max-file: "3"

# 자동 건강 검사
# healthcheck.sh
#!/bin/bash
curl -f http://localhost:8000/health || exit 1
curl -f http://localhost:3000/ || exit 1

13.2 정기 유지보수

# 주간 유지보수 스크립트
#!/bin/bash
# weekly_maintenance.sh

# 1. 컨테이너 업데이트
docker-compose pull
docker-compose up -d

# 2. 데이터베이스 정리
./maestro-cli.sh cleanup-orphaned-docs

# 3. 로그 압축
find /var/log/maestro -name "*.log" -mtime +7 -exec gzip {} \;

# 4. 시스템 상태 보고
./maestro-cli.sh system-report > /var/log/maestro/weekly_report_$(date +%Y%m%d).txt

14. 확장 및 커스터마이징

14.1 커스텀 AI 에이전트 개발

# maestro_backend/agents/custom_agent.py
from maestro_backend.core.agent_base import BaseAgent

class CustomResearchAgent(BaseAgent):
    def __init__(self, config):
        super().__init__(config)
        self.specialty = "domain_specific_research"
    
    async def process_request(self, request):
        """커스텀 연구 로직 구현"""
        results = await self.search_documents(request.query)
        analysis = await self.analyze_with_llm(results)
        return await self.generate_report(analysis)
    
    async def search_documents(self, query):
        """도메인 특화 검색 로직"""
        # 구현 로직
        pass

14.2 API 확장

# maestro_backend/api/custom_endpoints.py
from fastapi import APIRouter, Depends
from maestro_backend.core.auth import get_current_user

router = APIRouter(prefix="/api/custom", tags=["custom"])

@router.post("/domain-research")
async def domain_research(
    request: DomainResearchRequest,
    current_user: User = Depends(get_current_user)
):
    """커스텀 도메인 연구 엔드포인트"""
    agent = CustomResearchAgent(config)
    results = await agent.process_request(request)
    return {"results": results, "status": "completed"}

15. 트러블슈팅 체크리스트

15.1 설치 후 체크리스트

  • Docker 컨테이너 모두 실행 중 (docker-compose ps)
  • 포트 3000, 8000, 5432, 8080 접근 가능
  • 데이터베이스 연결 정상 (./maestro-cli.sh reset-db --check)
  • LLM API 연결 테스트 통과
  • 웹 인터페이스 로그인 가능
  • 검색 기능 정상 작동

15.2 성능 최적화 체크리스트

  • GPU 메모리 사용량 모니터링
  • PostgreSQL 인덱스 최적화
  • SearXNG 응답 속도 확인
  • 문서 처리 배치 크기 조정
  • 캐시 설정 확인

16. 결론

MAESTRO는 AI 기반 연구 자동화의 새로운 패러다임을 제시하는 강력한 플랫폼입니다. 이 튜토리얼을 통해 기본 설치부터 고급 설정까지 완전히 마스터할 수 있습니다.

주요 성과

완전 셀프 호스팅 환경 구축
AI 에이전트 기반 연구 워크플로우 구현
로컬 LLM과 프라이빗 검색엔진 통합
확장 가능한 아키텍처 이해

다음 단계

  1. 고급 AI 에이전트 개발: 도메인 특화 연구 에이전트 구현
  2. 기업 환경 배포: Kubernetes 클러스터 배포 고려
  3. API 통합: 기존 연구 도구와의 연동 확장
  4. 커뮤니티 기여: MAESTRO 오픈소스 프로젝트 참여

MAESTRO를 통해 연구 생산성을 혁신적으로 향상시키고, AI 에이전트의 무한한 가능성을 경험해보세요! 🚀


참고 자료