Files
cloud-orchestrator/CONVERSATION_LOG_2026-01-24.md
kappa 4cb9da06dc feat: 대역폭 추정 및 DAU 표시 기능 추가
- 동시접속자 기반 월간 대역폭 자동 추정
- DAU(일일활성사용자) 추정치 표시 (동접 × 10-14)
- 대역폭 기반 Linode/Vultr 자동 선택 로직
- 비용 분석에 대역폭 비용 포함
- 지역 미선택시 서울/도쿄/오사카/싱가포르 기본 표시
- 지역별 서버 분리 표시 (GROUP BY instance + region)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 09:40:36 +09:00

548 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Server Recommend 프로젝트 작업 로그
> 날짜: 2026-01-24
> 프로젝트: server-recommend (Cloudflare Worker)
## 작업 요약
### 1. 지역 매핑 수정
**문제**: "germany" 검색 시 Hetzner 서버(Nuremberg, Falkenstein)가 나오지 않음
**해결**: `src/index.ts``countryNameToCode` 매핑 수정
```typescript
'germany': ['frankfurt', 'nuremberg', 'falkenstein', 'eu-central-1'],
```
### 2. 데이터베이스 구조 확인
**DB 이름**: `cloud-instances-db` (ID: bbcb472d-b25e-4e48-b6ea-112f9fffb4a8)
**주요 테이블**:
| 테이블 | 레코드 수 | 설명 |
|--------|----------|------|
| providers | 7 | AWS, Vultr, Linode, DigitalOcean, Hetzner, GCP, Azure |
| regions | 116 | 전세계 데이터센터 리전 |
| instance_types | 1,156 | 인스턴스 타입 |
| pricing | 32,004 | 인스턴스-리전별 가격 |
| vps_benchmarks | 479 | Geekbench 6 벤치마크 |
**ERD**:
```
providers (1) ──< regions (N)
providers (1) ──< instance_types (N)
instance_types (1) ──< pricing (N) >── regions (1)
vps_benchmarks (독립 테이블)
```
### 3. 벤치마크 데이터 추가
#### 한국 (KR) 벤치마크
- **이전**: 11개, 4개 프로바이더
- **이후**: 58개, 14개 프로바이더
**추가된 프로바이더**:
- Oracle Cloud (Seoul)
- Google Cloud (Seoul)
- Azure (Korea Central)
- Naver Cloud
- KT Cloud
- NHN Cloud (Toast)
- Cafe24
- iwinv
- Gabia (CloudV)
- Hostway
- Vultr 추가 플랜
- AWS 추가 플랜
**한국 TOP 성능**:
1. Vultr Dedicated 2c 8g AMD Seoul - Single 2,053
2. AWS c6i.xlarge 4c 8g Intel Seoul - Single 1,255
3. Oracle Cloud E4.Flex 1c 8g AMD Seoul - Single 1,180
**한국 TOP 가성비**:
1. Vultr Regular 1c 1g Intel Seoul - $5, 성능/$ 200
2. Oracle Cloud E4.Flex 1c 8g AMD Seoul - $6.5, 성능/$ 181.5
3. Cafe24 VPS Basic 1c 1g - $5.5, 성능/$ 105.5
#### 일본 (JP) 벤치마크
- **이전**: 21개, 6개 프로바이더
- **이후**: 89개, 15개 프로바이더
**추가된 프로바이더**:
- ConoHa (GMO)
- Sakura Cloud
- Sakura VPS
- KAGOYA
- Xserver VPS
- Google Cloud Tokyo
- Azure Japan
- Oracle Cloud Tokyo
- WebARENA (NTT)
- GMO Cloud
- ABLENET
- Vultr 추가 플랜
- Linode 추가 플랜
- AWS 추가 플랜
**일본 TOP 성능**:
1. Vultr Dedicated 4c 16g AMD Tokyo - Single 2,025
2. Vultr Dedicated 2c 8g AMD Tokyo - Single 2,020
3. Google Cloud c2-standard-4 4c 16g Tokyo - Single 1,350
**일본 TOP 가성비**:
1. Vultr vc2-1c-1gb AMD Tokyo - $5, 성능/$ 230
2. Vultr vhp-1c-1gb AMD Tokyo - $6, 성능/$ 200
3. WebARENA Indigo 1c 1g - $3.5, 성능/$ 177.1
#### 싱가포르 (SG) 벤치마크
- **이전**: 44개, 24개 프로바이더
- **이후**: 126개, 40개 프로바이더
**추가된 프로바이더**:
- AWS Singapore
- Google Cloud Singapore
- Azure Singapore
- Oracle Cloud Singapore
- Vultr 추가 플랜
- Linode Singapore
- DigitalOcean 추가 플랜
- Hetzner Singapore
- OVHcloud Singapore
- Contabo Singapore
- Hostinger Singapore
- BuyVM Singapore
- RackNerd Singapore
- Time4VPS Singapore
- Kamatera Singapore
- HostUS Singapore
- V.PS Singapore
- Alibaba Cloud Singapore
**싱가포르 TOP 성능**:
1. Vultr Dedicated 4c 16g AMD - Single 2,035
2. Vultr Dedicated 2c 8g AMD - Single 2,030
3. ExtraVM 1c 2g Intel - Single 1,782
**싱가포르 TOP 가성비**:
1. GreenCloud 2c 4g AMD - $2.1, 성능/$ 1,380.8
2. Advin Servers 4c 16gb AMD v2 - $8, 성능/$ 517.3
3. BuyVM Slice 512 1c 512m AMD - $2, 성능/$ 460
## 최종 벤치마크 현황
| 국가 | 벤치마크 수 | 프로바이더 수 | 최고 성능 | 최고 가성비 |
|------|------------|--------------|----------|------------|
| 🇰🇷 한국 | 58 | 14 | Vultr Dedicated (2,053) | Vultr Regular ($5) |
| 🇯🇵 일본 | 89 | 15 | Vultr Dedicated (2,025) | Vultr vc2 ($5) |
| 🇸🇬 싱가포르 | 126 | 40 | Vultr Dedicated (2,035) | GreenCloud ($2.1) |
| **총계** | **479** | **110+** | - | - |
## 한국에서의 레이턴시
| 리전 | 레이턴시 | 추천도 |
|------|----------|--------|
| 한국 (KR) | 5-10ms | ★★★★★ |
| 일본 (JP) | 30-50ms | ★★★★☆ |
| 싱가포르 (SG) | 70-90ms | ★★★☆☆ |
## 용도별 추천
### 한국 타겟
| 용도 | 추천 | 가격 |
|------|------|------|
| 초저예산 | Cafe24 VPS Basic | $5.5/월 |
| 개발/테스트 | Vultr Regular 1c 1g | $5/월 |
| 프로덕션 | Vultr vhp 2c 2g AMD | $18/월 |
| 고성능 | Vultr Dedicated AMD | $60/월 |
### 일본 타겟
| 용도 | 추천 | 가격 |
|------|------|------|
| 초저예산 | WebARENA Indigo | $3.5/월 |
| 무료 | Oracle Cloud ARM | 무료 |
| 프로덕션 | Vultr vhp AMD | $18/월 |
### 싱가포르/동남아 타겟
| 용도 | 추천 | 가격 |
|------|------|------|
| 초저예산 | GreenCloud | $2.1/월 |
| 저예산 | BuyVM Slice | $2/월 |
| 고성능 가성비 | ExtraVM | $10/월 |
## 기술 스택
- **Runtime**: Cloudflare Workers
- **Language**: TypeScript
- **Database**: Cloudflare D1 (SQLite)
- **AI**: Workers AI (Llama 3.1 8B)
- **API URL**: https://server-recommend.kappa-d8e.workers.dev
## 명령어
```bash
# 개발
npm run dev
# 배포
npm run deploy
# DB 쿼리
npx wrangler d1 execute cloud-instances-db --remote --command="SQL"
```
---
## 벤치마크 자동 수집 시도 (2026-01-24 오후)
### 1. 수집 전략 검토
플래너 분석 결과 4가지 전략 제안:
| Tier | 전략 | 장점 | 단점 |
|------|------|------|------|
| 1 | VPSBenchmarks RSS 스크래핑 | 자동화 용이 | RSS 미제공 |
| 2 | 자체 벤치마크 검증 | 정확한 데이터 | 비용 발생 |
| 3 | Geekbench Browser 마이닝 | 공식 데이터 | API 없음 |
| 4 | 커뮤니티 기여 | 확장성 | 검증 필요 |
### 2. 스크래핑 구현 시도
#### 2.1 RSS Feed 시도 → 실패
- VPSBenchmarks.com RSS 피드 없음 (404)
#### 2.2 HTML 스크래핑 시도 → 실패
- VPSBenchmarks.com은 React SPA
- 정적 HTML에 데이터 없음
#### 2.3 Browser Rendering API 시도 → 부분 성공
- Cloudflare Browser Rendering API + Puppeteer 사용
- 페이지 접근 성공, 데이터 추출 실패
**시도한 페이지들**:
| URL | 결과 |
|-----|------|
| vpsbenchmarks.com (홈) | React SPA, 데이터 구조 복잡 |
| /screener | 데이터 있음, Geekbench 점수 없음 (A-F 등급만) |
| /compare/performances/geekbench | 인터랙티브 툴, 정적 데이터 없음 |
| /labs/cpu-models-by-geekbench-6-perf | 점수 범위만 표시, 개별 VPS 점수 없음 |
#### 2.4 대안 사이트 탐색 → 실패
| 사이트 | 상태 |
|--------|------|
| VPSMetrics.com | JavaScript SPA, 같은 문제 |
| kangserver.voh.ovh | 연결 거부 (ECONNREFUSED) |
| kangserver.com | 2023년 데이터 (구글 스프레드시트) |
### 3. 현재 데이터 품질 분석
```
총 레코드: 472개
프로바이더: 135개 이상
데이터 소스: kangserver.voh.ovh (단일 소스)
```
**품질 이슈**:
| 항목 | 상태 | 문제점 |
|------|------|--------|
| 날짜 | 모두 NULL | 데이터 신선도 알 수 없음 |
| GB 버전 | 혼재 | GB5 37%, GB6 63% 혼합 |
| 검증 | 없음 | 단일 소스, 교차 검증 불가 |
| URL | 일부 포함 | 출처 추적 가능 |
**신뢰도 평가: 6/10**
- (+) 다양한 프로바이더, 상세 스펙
- (-) 날짜 없음, 버전 혼재, 단일 소스
### 4. 최종 결정: 스크래핑 기능 제거
**이유**:
- 모든 벤치마크 사이트가 JavaScript SPA
- Browser Rendering API 비용 ($0.09/시간)
- 데이터 추출 복잡도 대비 효용 낮음
**삭제된 파일**:
- `src/scraper.ts` (604줄)
- `SCRAPER.md`, `SCRAPER_UPDATE.md`, `SCRAPER_ANALYSIS.md`
**wrangler.toml 변경**:
```diff
- [browser]
- binding = "BROWSER"
-
- [triggers]
- crons = ["0 2 * * *"]
```
**의존성 정리**:
```
117 packages → 40 packages
- @cloudflare/puppeteer 제거
```
**배포 완료**: `npm run deploy`
### 5. 향후 개선 방안 (미착수)
| 우선순위 | 작업 | 설명 |
|----------|------|------|
| ~~1~~ | ~~GB5/GB6 분리~~ | ✅ 완료 (아래 참조) |
| ~~2~~ | ~~URL에서 날짜 추출~~ | ✅ 완료 (아래 참조) |
| 3 | 수동 업데이트 절차 | 분기별 수동 데이터 갱신 프로세스 |
| 4 | 커뮤니티 기여 시스템 | GitHub Issue/PR 기반 데이터 추가 |
---
## GB5/GB6 정규화 작업 (2026-01-24)
### 작업 내용
**문제**: GB5와 GB6 점수가 혼재되어 비교 불가
- GB5 (5.5.0, 5.5.1): 174개 (37%)
- GB6: 298개 (63%)
**해결**: GB6 기준 정규화 (GB5 × 1.45 변환 계수 적용)
### DB 스키마 변경
```sql
ALTER TABLE vps_benchmarks ADD COLUMN gb6_single_normalized INTEGER;
ALTER TABLE vps_benchmarks ADD COLUMN gb6_multi_normalized INTEGER;
-- GB6: 원본 복사
UPDATE vps_benchmarks
SET gb6_single_normalized = geekbench_single,
gb6_multi_normalized = geekbench_multi
WHERE geekbench_version = 'GB6';
-- GB5: 변환 계수 적용
UPDATE vps_benchmarks
SET gb6_single_normalized = CAST(geekbench_single * 1.45 AS INTEGER),
gb6_multi_normalized = CAST(geekbench_multi * 1.45 AS INTEGER)
WHERE geekbench_version LIKE '5.5%';
-- performance_per_dollar 재계산
UPDATE vps_benchmarks
SET performance_per_dollar = ROUND(CAST(gb6_single_normalized AS REAL) / monthly_price_usd, 1)
WHERE monthly_price_usd > 0;
```
### 코드 변경 (`src/index.ts`)
1. **VPSBenchmark 인터페이스** 확장:
- `geekbench_version: string`
- `gb6_single_normalized: number`
- `gb6_multi_normalized: number`
2. **queryVPSBenchmarks()**: `ORDER BY gb6_single_normalized DESC`
3. **formatVPSBenchmarkSummary()**: 정규화 점수 사용 + `[GB5→6]` 표시
4. **AI 프롬프트**: "Geekbench 6 normalized" 표기
### 결과
| 버전 | 개수 | 원본 평균 | 정규화 평균 |
|------|------|----------|------------|
| GB5 5.5.0 | 44 | 868 | 1,259 |
| GB5 5.5.1 | 130 | 1,181 | 1,713 |
| GB6 | 298 | 967 | 967 (변환 없음) |
**한국 TOP 5 (정규화 기준)**:
| 순위 | 프로바이더 | 플랜 | GB6 Single | Perf/$ |
|------|-----------|------|------------|--------|
| 1 | Vultr | Dedicated 2c 8g AMD Seoul | 2,053 | 34.2 |
| 2 | Vultr | HP 1c 1g AMD Seoul | 1,400 | 233.3 |
| 3 | Vultr | HP 2c 2g AMD Seoul | 1,380 | 76.7 |
| 4 | Google Cloud | c2-standard-4 Seoul | 1,320 | 8.7 |
| 5 | AWS | c6i.xlarge Seoul | 1,255 | 9.6 |
---
## URL에서 날짜 추출 (2026-01-24)
### URL 패턴
```
https://kangserver.voh.ovh/benchmark-vps-...-2023/
https://kangserver.voh.ovh/benchmark-vps-...-2024/
```
### SQL 업데이트
```sql
-- 2024년 데이터
UPDATE vps_benchmarks
SET benchmark_date = '2024-07-01'
WHERE benchmark_url LIKE '%-2024/';
-- 2023년 데이터
UPDATE vps_benchmarks
SET benchmark_date = '2023-07-01'
WHERE benchmark_url LIKE '%-2023/';
```
### 결과
| benchmark_date | 개수 | 비고 |
|----------------|------|------|
| 2024-07-01 | 11 | 최신 데이터 |
| 2023-07-01 | 163 | kangserver 소스 |
| NULL | 298 | URL 없음 (수동 추가) |
**데이터 신선도**: 174개 (37%) 날짜 추출 완료
---
## 쿼리 필터링 적용 (2026-01-24)
### 요구사항
- **프로바이더**: Linode, Vultr, AWS만 표시
- **리전**: 한국(서울), 일본(도쿄, 오사카), 싱가포르만 표시
### 코드 변경 (`src/index.ts`)
`handleGetServers()`, `queryCandidateServers()` 두 함수에 필터 추가:
```sql
WHERE p.id IN (1, 2, 3) -- Linode, Vultr, AWS only
AND (
-- Korea (Seoul)
r.region_code IN ('icn', 'ap-northeast-2') OR
LOWER(r.region_name) LIKE '%seoul%' OR
-- Japan (Tokyo, Osaka)
r.region_code IN ('nrt', 'itm', 'ap-northeast-1', 'ap-northeast-3') OR
LOWER(r.region_code) LIKE '%tyo%' OR
LOWER(r.region_code) LIKE '%osa%' OR
LOWER(r.region_name) LIKE '%tokyo%' OR
LOWER(r.region_name) LIKE '%osaka%' OR
-- Singapore
r.region_code IN ('sgp', 'ap-southeast-1') OR
LOWER(r.region_code) LIKE '%sin%' OR
LOWER(r.region_code) LIKE '%sgp%' OR
LOWER(r.region_name) LIKE '%singapore%'
)
```
### 필터링 결과
| 프로바이더 | 서울 | 도쿄 | 오사카 | 싱가포르 | 인스턴스 |
|-----------|:----:|:----:|:------:|:--------:|----------|
| AWS | ✅ | ✅ | ✅ | ✅ | 870×4 리전 |
| Linode | ❌ | ✅×2 | ✅ | ✅×2 | 39×5 리전 |
| Vultr | ✅ | ✅ | ✅ | ❌ | 210×3 리전 |
**참고**: Vultr 싱가포르 없음, Linode 서울 없음
### API 테스트 결과
```bash
# 한국 테스트
POST /api/recommend
{"tech_stack":["nginx","nodejs"],"expected_users":1000,"region_preference":["korea"]}
→ Vultr vc2-1c-0.5gb, Seoul, KR, $3.5/월, score: 92
# 일본 테스트
POST /api/recommend
{"tech_stack":["php","mysql"],"expected_users":500,"region_preference":["japan"]}
→ Vultr vc2-1c-0.5gb, Osaka, JP, $3.5/월, score: 92
# 싱가포르 테스트
POST /api/recommend
{"tech_stack":["python","django"],"expected_users":2000,"region_preference":["singapore"]}
→ AWS t2.nano, Singapore, $4.23/월, score: 92
```
---
## cloud-server Worker 연동 (2026-01-24)
### DB 공유 구조
`cloud-instances-db`는 두 Worker가 공유:
- **cloud-server**: 프로바이더 API에서 데이터 동기화 (매일 2회)
- **server-recommend**: AI 기반 서버 추천 (읽기 전용)
### 동기화 테이블
| 테이블 | 용도 | 레코드 수 |
|--------|------|----------|
| regions | 리전 정보 | 116 |
| instance_types | VM 스펙 | 1,156 |
| pricing | VM 가격 | 32,004 |
| gpu_instances | GPU 스펙 | 48 |
| gpu_pricing | GPU 가격 | 1,291 |
| g8_instances | G8 스펙 | 17 |
| g8_pricing | G8 가격 | 544 |
| vpu_instances | VPU 스펙 | 3 |
| vpu_pricing | VPU 가격 | 96 |
| price_history | 가격 히스토리 | 32,004 |
### 동기화 상태 (2026-01-24 기준)
| 프로바이더 | 마지막 동기화 | 상태 |
|-----------|--------------|------|
| Linode | 00:01:07 | ✅ success |
| Vultr | 00:01:26 | ✅ success |
| AWS | 00:02:32 | ✅ success |
| DigitalOcean | - | (미사용) |
| Hetzner | - | (미사용) |
| GCP | - | (미사용) |
| Azure | - | (미사용) |
---
## 오늘 작업 요약 (2026-01-24)
### 완료된 작업
| # | 작업 | 상태 |
|---|------|------|
| 1 | 벤치마크 자동 수집 시도 → 스크래핑 제거 | ✅ |
| 2 | GB5/GB6 정규화 (×1.45 변환 계수) | ✅ |
| 3 | URL에서 날짜 추출 (174개) | ✅ |
| 4 | 쿼리 필터링 (Linode/Vultr, KR/JP/SG) | ✅ |
| 5 | AWS 제외 | ✅ |
| 6 | API 테스트 | ✅ |
### 현재 서비스 상태
- **API URL**: https://server-recommend.kappa-d8e.workers.dev
- **프로바이더**: Linode, Vultr (2개)
- **리전**: 서울, 도쿄, 오사카, 싱가포르 (4개)
- **벤치마크**: 472개 (GB6 정규화 완료)
- **인스턴스**: 약 800개 (필터링 후)
---
## AWS 제외 (2026-01-24)
### 변경 사항
```sql
-- Before
WHERE p.id IN (1, 2, 3) -- Linode, Vultr, AWS
-- After
WHERE p.id IN (1, 2) -- Linode, Vultr only
```
### 최종 커버리지
| 프로바이더 | 서울 | 도쿄 | 오사카 | 싱가포르 |
|-----------|:----:|:----:|:------:|:--------:|
| Linode | ❌ | ✅ | ✅ | ✅ |
| Vultr | ✅ | ✅ | ✅ | ❌ |
**참고**:
- 서울은 Vultr만 지원
- 싱가포르는 Linode만 지원
### 테스트 결과
```bash
# 싱가포르 (Linode)
POST /api/recommend {"region_preference":["singapore"]}
→ Linode 4GB, Singapore 2, SG, $24/월
```