# 260. 아이템 시스템: 외부도구 통합과 권한 관리

## 개요

로빙의 능력을 확장하는 "아이템" 개념은 게임의 장비 시스템처럼 작동합니다. 각 아이템은 로빙에게 새로운 능력을 부여하거나 기존 능력을 강화하며, 레벨과 스탯에 따라 사용 가능 여부가 결정됩니다.

> "도구를 장착하고 해제하는 것처럼, 로빙은 필요에 따라 능력을 확장할 수 있다."

## 아이템 유형과 분류

### 1. API 아이템 (외부 서비스 접근권)
```python
class APIItem:
    name: str           # "Google Calendar API"
    type: str = "api"   # 아이템 유형
    level_req: int      # 최소 요구 레벨
    stat_req: Dict      # 최소 요구 스탯
    cooldown: int       # 재사용 대기시간
    usage_limit: int    # 일일 사용 제한
```

**예시 아이템:**
- **Gmail API** (Lv.3): 이메일 읽기/쓰기
- **Notion API** (Lv.5): 문서 관리 및 데이터베이스 조작
- **OpenAI GPT-4** (Lv.8): 고급 텍스트 생성
- **Google Cloud Vision** (Lv.10): 이미지 분석

### 2. 도구 아이템 (실행 가능한 외부 프로그램)
```python
class ToolItem:
    name: str           # "Code Executor"
    execute_method: str # "api" | "webhook" | "script"
    endpoint: str       # 실행 엔드포인트
    permissions: List   # 필요 권한 목록
```

**예시 아이템:**
- **GenSpark Runner** (Lv.7): AI 코드 생성 및 실행
- **Replit Executor** (Lv.6): 온라인 코드 실행 환경
- **Jupyter Notebook** (Lv.9): 데이터 분석 환경
- **Docker Container** (Lv.12): 격리된 실행 환경

### 3. 데이터 아이템 (특수 지식 베이스)
```python
class DataItem:
    name: str           # "법률 지식 팩"
    data_type: str      # "vector_db" | "graph" | "structured"
    size_mb: int        # 데이터 크기
    memory_cost: int    # Memory 스탯 소모량
```

**예시 아이템:**
- **도메인 전문 지식** (Lv.4): 특정 산업 용어집
- **회사 내부 문서** (Lv.5): 프라이빗 데이터
- **코드 스니펫 라이브러리** (Lv.6): 재사용 가능 코드
- **규제 컴플라이언스 DB** (Lv.10): 법규 데이터베이스

### 4. 강화 아이템 (임시 능력치 부스트)
```python
class BuffItem:
    name: str           # "집중력 부스터"
    stat_boost: Dict    # {"compute": +10, "memory": +5}
    duration: int       # 지속시간 (초)
    stack_limit: int    # 중첩 가능 횟수
```

**예시 아이템:**
- **카페인 부스트** (Lv.1): Compute +5 (30분)
- **명상 모드** (Lv.3): Empathy +10 (1시간)
- **하이퍼 포커스** (Lv.7): 모든 스탯 +3 (15분)
- **플로우 상태** (Lv.15): Leadership +20 (10분)

## 아이템 관리 시스템

### 인벤토리 구조
```python
class Inventory:
    max_slots: int = 20  # 레벨에 따라 증가
    equipped: Dict[str, Item]  # 현재 장착 아이템
    storage: List[Item]  # 보관 중인 아이템
    
    def can_equip(self, item: Item, robeing_stats: Stats) -> bool:
        """아이템 장착 가능 여부 확인"""
        return (
            robeing_stats.level >= item.level_req and
            all(robeing_stats[stat] >= req for stat, req in item.stat_req.items())
        )
```

### 장착/해제 메커니즘
1. **장착 전 검증**
   - 레벨 요구사항 확인
   - 스탯 요구사항 확인
   - 슬롯 가용성 확인
   - 충돌하는 아이템 확인

2. **장착 효과**
   - 즉시 능력 활성화
   - 스탯 보너스 적용
   - 새로운 명령어 해금

3. **해제 조건**
   - 수동 해제
   - 시간 만료 (임시 아이템)
   - 스탯 하락으로 인한 강제 해제

### 아이템 획득 방법
1. **레벨업 보상**: 특정 레벨 달성 시 자동 지급
2. **퀘스트 완료**: 특정 작업 수행 시 획득
3. **구매**: 크레딧이나 경험치로 구매
4. **사용자 제공**: 관리자가 직접 부여

## 외부 도구 통합 예시

### GenSpark 통합 (코드 생성 및 실행)
```python
class GenSparkItem(ToolItem):
    def __init__(self):
        super().__init__(
            name="GenSpark Code Runner",
            level_req=7,
            stat_req={"compute": 30, "memory": 25}
        )
    
    async def execute(self, prompt: str) -> str:
        """GenSpark API를 통한 코드 실행"""
        # 1. 코드 생성 요청
        # 2. 샌드박스에서 실행
        # 3. 결과 반환
        pass
```

### Notion 통합 (문서 관리)
```python
class NotionItem(APIItem):
    async def create_page(self, title: str, content: str):
        """Notion 페이지 생성"""
        pass
    
    async def update_database(self, db_id: str, data: Dict):
        """Notion 데이터베이스 업데이트"""
        pass
```

## 권한과 보안

### OAuth 기반 인증
```python
class OAuthManager:
    async def authorize(self, service: str, user_id: str):
        """OAuth 플로우 시작"""
        # 1. 인증 URL 생성
        # 2. 사용자 승인 대기
        # 3. 토큰 저장
        pass
```

### API 키 암호화 저장
```python
from cryptography.fernet import Fernet

class SecureStorage:
    def __init__(self):
        self.cipher = Fernet(settings.ENCRYPTION_KEY)
    
    def store_api_key(self, item_id: str, api_key: str):
        """API 키 암호화 후 저장"""
        encrypted = self.cipher.encrypt(api_key.encode())
        # PostgreSQL에 저장
```

### 사용량 제한과 모니터링
```python
class UsageTracker:
    daily_limits = {
        "gpt-4": 100,
        "gmail_api": 1000,
        "notion_api": 500
    }
    
    async def check_limit(self, item_id: str, user_id: str) -> bool:
        """일일 사용 한도 확인"""
        usage = await self.get_daily_usage(item_id, user_id)
        return usage < self.daily_limits.get(item_id, float('inf'))
```

## 아이템 시너지와 콤보

### 시너지 예시
1. **연구원 세트**
   - Notion API + GenSpark + Jupyter = 연구 속도 +50%
   - 자동으로 코드 실행 결과를 문서화

2. **커뮤니케이터 세트**
   - Gmail API + Calendar API + Slack = 소통 효율 +100%
   - 일정 기반 자동 이메일 발송

3. **분석가 세트**
   - BigQuery + Tableau API + GPT-4 = 인사이트 품질 +75%
   - 데이터 분석 후 자동 시각화

## 미래 확장 가능성

### 아이템 진화 시스템
- 사용 빈도에 따른 아이템 레벨업
- 아이템 간 합성으로 새로운 아이템 생성
- 사용자 커스텀 아이템 제작

### 아이템 거래소
- 사용자 간 아이템 공유
- 아이템 대여 시스템
- 희귀 아이템 경매

### AI 추천 시스템
- 사용 패턴 분석 기반 아이템 추천
- 작업 유형별 최적 아이템 세트 제안
- 시너지 효과 예측 및 제안

## 구현 로드맵

### Phase 1 (현재)
- 기본 API 아이템 5개 구현
- 간단한 인벤토리 시스템
- 수동 장착/해제

### Phase 2 (2개월 내)
- 20+ 아이템 추가
- 자동 장착 추천
- 사용량 모니터링

### Phase 3 (6개월 내)
- 아이템 시너지 시스템
- 커스텀 아이템 제작
- 아이템 거래소 베타

---

*"아이템은 로빙의 가능성을 무한대로 확장한다. 마치 스마트폰의 앱처럼."*