# Server Recommendation API - New Input Format

## Change Summary

The server recommendation system now accepts **tech stack + user scale** instead of hardware specifications.

## API Changes

### Old Format (Hardware-based)
```json
POST /api/recommend
{
  "cpu_cores": 4,
  "memory_gb": 16,
  "storage_gb": 200
}
```

### New Format (Tech Stack-based)
```json
POST /api/recommend
{
  "tech_stack": ["Node.js", "MongoDB", "Redis", "Docker"],
  "expected_users": 5000,
  "use_case": "실시간 채팅 서비스",
  "traffic_pattern": "steady",
  "region_preference": ["asia", "us"],
  "budget_limit": 300
}
```

## Request Fields

### Required Fields

| Field | Type | Description | Example |
|-------|------|-------------|---------|
| `tech_stack` | string[] | Technologies used (min 1) | `["Node.js", "MongoDB"]` |
| `expected_users` | number | Expected user count | `5000` |
| `use_case` | string | Service description | `"실시간 채팅 서비스"` |

### Optional Fields

| Field | Type | Options | Default | Description |
|-------|------|---------|---------|-------------|
| `traffic_pattern` | string | `steady`, `spiky`, `growing` | `steady` | Traffic characteristics |
| `region_preference` | string[] | Region codes | - | Preferred regions |
| `budget_limit` | number | USD/month | - | Maximum monthly budget |

## Response Format

### New Response Structure
```json
{
  "recommendations": [
    {
      "server": {
        "id": "aws-t3-medium",
        "provider_name": "AWS",
        "name": "t3.medium",
        "instance_type": "t3.medium",
        "cpu_cores": 2,
        "memory_size": 4,
        "storage_size": 50,
        "storage_type": "SSD",
        "network_bandwidth": 5000,
        "sla_percentage": 99.95,
        "price_monthly": 30.36,
        "available_regions": ["us-east-1", "ap-northeast-1"]
      },
      "score": 95,
      "analysis": {
        "tech_fit": "Node.js와 MongoDB에 적합한 메모리와 SSD 스토리지 제공",
        "capacity": "5000 동시 사용자 처리 가능 (예상 부하의 150%)",
        "cost_efficiency": "가격 대비 성능 우수, 월 $30로 안정적 운영 가능",
        "scalability": "수평 확장 용이, Auto Scaling 지원으로 트래픽 변동 대응"
      },
      "estimated_capacity": {
        "max_concurrent_users": 7500,
        "requests_per_second": 1000
      }
    }
  ],
  "infrastructure_tips": [
    "Redis 캐싱으로 DB 부하 50% 감소 예상",
    "CDN 추가로 정적 자산 응답 속도 개선 권장",
    "MongoDB 인덱스 최적화로 쿼리 성능 향상"
  ],
  "total_candidates": 25,
  "cached": false
}
```

## Example Requests

### Example 1: Real-time Chat Service
```bash
curl -X POST https://your-worker.workers.dev/api/recommend \
  -H "Content-Type: application/json" \
  -d '{
    "tech_stack": ["Node.js", "Socket.io", "MongoDB", "Redis"],
    "expected_users": 5000,
    "use_case": "실시간 채팅 서비스",
    "traffic_pattern": "spiky",
    "region_preference": ["asia"],
    "budget_limit": 300
  }'
```

### Example 2: REST API Server
```bash
curl -X POST https://your-worker.workers.dev/api/recommend \
  -H "Content-Type: application/json" \
  -d '{
    "tech_stack": ["Python", "FastAPI", "PostgreSQL", "Docker"],
    "expected_users": 10000,
    "use_case": "REST API 서버",
    "traffic_pattern": "steady"
  }'
```

### Example 3: E-commerce Platform
```bash
curl -X POST https://your-worker.workers.dev/api/recommend \
  -H "Content-Type: application/json" \
  -d '{
    "tech_stack": ["Java", "Spring Boot", "MySQL", "Redis", "Elasticsearch"],
    "expected_users": 50000,
    "use_case": "전자상거래 플랫폼",
    "traffic_pattern": "growing",
    "region_preference": ["asia", "us"],
    "budget_limit": 1000
  }'
```

## Validation Rules

### Tech Stack
- Must be a non-empty array
- At least 1 technology required
- Examples: Node.js, Python, Java, MongoDB, PostgreSQL, Redis, Docker

### Expected Users
- Must be a positive number
- Represents concurrent users or daily active users
- Used to calculate capacity requirements

### Use Case
- Must be a non-empty string
- Describes the service type
- Helps AI understand context and requirements

### Traffic Pattern
- `steady`: Consistent traffic throughout the day
- `spiky`: Sudden traffic bursts (2x capacity buffer)
- `growing`: Gradually increasing users (1.5x capacity buffer)

### Region Preference
- Array of region codes
- Examples: `asia`, `us`, `eu`
- Filters servers by availability

### Budget Limit
- Non-negative number
- In USD per month
- Filters servers by price

## AI Analysis Components

### Tech Fit
Explains why the server specifications match the technology stack requirements.

### Capacity
Describes how the server handles the expected user load and headroom.

### Cost Efficiency
Assesses value for money and operational cost considerations.

### Scalability
Evaluates growth potential and scaling strategies.

### Estimated Capacity
Provides concrete numbers for:
- Maximum concurrent users
- Requests per second

### Infrastructure Tips
Practical recommendations for:
- Performance optimization
- Cost reduction
- Reliability improvement
- Architecture enhancement

## Migration Guide

### From Old Format to New Format

**Old Request:**
```json
{
  "cpu_cores": 4,
  "memory_gb": 16,
  "storage_gb": 200,
  "sla_requirement": 99.9,
  "budget_monthly": 200
}
```

**New Request:**
```json
{
  "tech_stack": ["Node.js", "PostgreSQL"],
  "expected_users": 10000,
  "use_case": "웹 애플리케이션",
  "traffic_pattern": "steady",
  "budget_limit": 200
}
```

### Key Differences

1. **Resource Calculation**: Now automatic based on tech stack and user scale
2. **Context-Aware**: AI understands technology-specific requirements
3. **Capacity Estimation**: Provides realistic user capacity numbers
4. **Practical Tips**: Includes infrastructure optimization suggestions
5. **Simpler Input**: No need to estimate hardware specifications

## Benefits

1. **User-Friendly**: No need to know hardware requirements
2. **Intelligent**: AI analyzes tech stack characteristics
3. **Accurate**: Better matches based on actual usage patterns
4. **Actionable**: Provides capacity estimates and practical tips
5. **Flexible**: Adapts to different traffic patterns and growth scenarios
