# Skillhub 마이크로서비스 아키텍처 설계

## 개요
이 문서는 로빙의 스킬 시스템을 HTTP API 기반 마이크로서비스로 구성하는 아키텍처를 설명합니다. 각 스킬은 독립된 마이크로서비스로 배포되어 로빙 본체와 HTTP 통신을 통해 상호작용하며, 리소스 효율성과 확장성을 동시에 달성합니다.

## 핵심 설계 원칙
1. 모든 스킬은 독립된 FastAPI 기반 마이크로서비스로 개발되어 Docker 컨테이너로 배포됩니다.
2. 스킬 간 통신은 표준화된 HTTP REST API를 통해 이루어지며, JSON 기반 요청/응답을 사용합니다.
3. 각 스킬은 독립된 컨테이너에서 실행되어 의존성 충돌과 장애 전파를 방지합니다.
4. 로빙 본체는 스킬 레지스트리를 통해 사용 가능한 스킬 목록과 엔드포인트를 관리합니다.
5. 100개의 로빙이 1개의 스킬 서비스를 공유하여 리소스 효율성을 극대화합니다.

## 마이크로서비스 구조
```
로빙 본체 (Container)
    │
    ├─[HTTP API]→ skill-email:8501
    ├─[HTTP API]→ skill-news:8505  
    ├─[HTTP API]→ skill-pdf:8502 (계획)
    ├─[HTTP API]→ skill-calendar:8503 (계획)
    └─[HTTP API]→ skill-digest:8504 (계획)
```

각 스킬 서비스는:
- FastAPI로 구현된 REST API 제공
- 표준화된 /execute 엔드포인트
- Pydantic 모델 기반 요청/응답 검증
- 독립적인 로깅 및 모니터링

## API 표준화
모든 스킬 서비스는 다음 표준을 따릅니다:
```python
# 요청
POST /execute
{
    "user_id": "string",
    "robeing_id": "string", 
    "params": {...}  # 스킬별 파라미터
}

# 응답
{
    "success": bool,
    "data": {...},  # 스킬별 결과
    "error": "string" # 실패 시
}
```

## 현재 구현 상태
### 완료된 스킬 서비스
1. **skill-email (8501)**: Gmail API 연동, 이메일 읽기/전송
   - 독립 마이크로서비스로 완전 분리
   - Nginx 리버스 프록시 설정 완료
   
2. **skill-news (8505)**: 뉴스 수집 및 요약
   - Google News API 연동
   - 자동 요약 기능

### 계획 중인 스킬
1. **skill-digest (8504)**: Thread 대화 요약
2. **skill-pdf (8502)**: PDF 파싱 및 변환  
3. **skill-calendar (8503)**: 캘린더 연동 및 일정 관리

## 배포 및 운영
### 배포 구조
- 모든 스킬은 Docker 컨테이너로 패키징
- docker-compose를 통한 일괄 배포
- 51124 서버에서 모든 스킬 서비스 실행
- Nginx를 통한 리버스 프록시 설정

### 스킬 레지스트리
로빙 본체는 사용 가능한 스킬 목록을 다음과 같이 관리:
```python
SKILL_REGISTRY = {
    "email": "http://skill-email:8501",
    "news": "http://skill-news:8505",
    # 추가 스킬...
}
```

### 확장성
- 새로운 스킬 추가 시 독립된 서비스로 개발
- 기존 스킬에 영향 없이 배포 가능
- 스킬별 독립적인 스케일링 가능
