- 동시접속자 기반 월간 대역폭 자동 추정 - DAU(일일활성사용자) 추정치 표시 (동접 × 10-14) - 대역폭 기반 Linode/Vultr 자동 선택 로직 - 비용 분석에 대역폭 비용 포함 - 지역 미선택시 서울/도쿄/오사카/싱가포르 기본 표시 - 지역별 서버 분리 표시 (GROUP BY instance + region) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
15 KiB
Server Recommend 프로젝트 작업 로그
날짜: 2026-01-24 프로젝트: server-recommend (Cloudflare Worker)
작업 요약
1. 지역 매핑 수정
문제: "germany" 검색 시 Hetzner 서버(Nuremberg, Falkenstein)가 나오지 않음
해결: src/index.ts의 countryNameToCode 매핑 수정
'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 성능:
- Vultr Dedicated 2c 8g AMD Seoul - Single 2,053
- AWS c6i.xlarge 4c 8g Intel Seoul - Single 1,255
- Oracle Cloud E4.Flex 1c 8g AMD Seoul - Single 1,180
한국 TOP 가성비:
- Vultr Regular 1c 1g Intel Seoul -
5, 성능/200 - Oracle Cloud E4.Flex 1c 8g AMD Seoul -
6.5, 성능/181.5 - 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 성능:
- Vultr Dedicated 4c 16g AMD Tokyo - Single 2,025
- Vultr Dedicated 2c 8g AMD Tokyo - Single 2,020
- Google Cloud c2-standard-4 4c 16g Tokyo - Single 1,350
일본 TOP 가성비:
- Vultr vc2-1c-1gb AMD Tokyo -
5, 성능/230 - Vultr vhp-1c-1gb AMD Tokyo -
6, 성능/200 - 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 성능:
- Vultr Dedicated 4c 16g AMD - Single 2,035
- Vultr Dedicated 2c 8g AMD - Single 2,030
- ExtraVM 1c 2g Intel - Single 1,782
싱가포르 TOP 가성비:
- GreenCloud 2c 4g AMD -
2.1, 성능/1,380.8 - Advin Servers 4c 16gb AMD v2 -
8, 성능/517.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
명령어
# 개발
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 변경:
- [browser]
- binding = "BROWSER"
-
- [triggers]
- crons = ["0 2 * * *"]
의존성 정리:
117 packages → 40 packages
- @cloudflare/puppeteer 제거
배포 완료: npm run deploy
5. 향후 개선 방안 (미착수)
| 우선순위 | 작업 | 설명 |
|---|---|---|
| ✅ 완료 (아래 참조) | ||
| ✅ 완료 (아래 참조) | ||
| 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 스키마 변경
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)
-
VPSBenchmark 인터페이스 확장:
geekbench_version: stringgb6_single_normalized: numbergb6_multi_normalized: number
-
queryVPSBenchmarks():
ORDER BY gb6_single_normalized DESC -
formatVPSBenchmarkSummary(): 정규화 점수 사용 +
[GB5→6]표시 -
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 업데이트
-- 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() 두 함수에 필터 추가:
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 테스트 결과
# 한국 테스트
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)
변경 사항
-- 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만 지원
테스트 결과
# 싱가포르 (Linode)
POST /api/recommend {"region_preference":["singapore"]}
→ Linode 4GB, Singapore 2, SG, $24/월