| name | server-resource-estimator |
| description | 단일 노드에서 웹 서비스(nginx + Next.js + PostgreSQL + 백그라운드 작업) 운영 시 필요한 CPU/메모리를 추정하는 계산 스킬.
사용 시점: (1) 하루 방문자 수와 체류시간으로 서버 리소스 결정, (2) 서버가 뻗거나 느려질 때 리소스 병목 분석,
(3) 봇 트래픽 포함 리소스 산정, (4) 클라우드 인스턴스 선택 (EC2, GCP, Azure 등).
트리거 키워드: "서버 사이징", "서버 리소스 추정", "CPU/메모리 계산", "인스턴스 선택", "트래픽 기반 리소스"
|
| version | 1.0.0 |
Server Resource Estimator
트래픽(방문자/체류시간/봇) → CPU/메모리 → 서버 인스턴스 선택을 위한 계산 스킬.
핵심 원칙
- CPU는 RPS 기반:
CPU = R_peak / K_rps_per_vcpu
- 메모리는 프로세스/병렬도 기반: "요청당 MB" 대신
Base + (병렬도 × 단위메모리) + Headroom
- Headroom 필수: 다중 프로세스 동거 시 30~40% 여유
입력값 정의
필수 입력 (최소)
| 변수 | 설명 | 예시 |
|---|
V_day | 하루 방문자(세션) 수 | 1000 |
H_active | 방문 집중 시간 (시간/일) | 8 |
T_session | 평균 체류시간 (초) | 900 (15분) |
PV_per_visit | 방문당 페이지뷰 | 15 |
Req_per_PV | 페이지뷰당 서버 요청 수 | 2 (SSR+API) |
권장 입력
| 변수 | 설명 | 예시 |
|---|
Bot_RPS | 봇이 발생시키는 RPS | 30 |
Peak_mult | 피크 배수 (평균 대비) | 2 |
N_node_workers | Node/Next 프로세스 수 | 1 |
T_resp_p95 | 서버 p95 응답시간 (초) | 0.2 |
고급 입력
| 변수 | 설명 | 예시 |
|---|
N_db_pool | DB 커넥션 풀 크기 | 10 |
shared_buffers | PostgreSQL shared_buffers (MB) | 128 |
work_mem | PostgreSQL work_mem (MB) | 4 |
N_browser | Headless 브라우저 인스턴스 수 (선택) | 1 |
N_pages | 동시 페이지/탭 수 (선택) | 1 |
Headroom_pct | 안정성 여유 비율 | 0.30 |
계산 워크플로우
Step 1: 트래픽 → RPS 변환
λ (도착률) = V_day / (H_active × 3600)
U_avg (동시접속) = λ × T_session
R_human_avg = λ × PV_per_visit × Req_per_PV
R_avg = R_human_avg + Bot_RPS
R_peak = R_avg × Peak_mult
inflight_req = R_peak × T_resp_p95 # 동시 처리 중인 요청 수
Step 2: CPU 계산
CPU_req = R_peak / K_rps_per_vcpu
CPU_total = CPU_base + CPU_req + CPU_db + CPU_workers
K_rps_per_vcpu 참조표: references/constants.md 참조
Step 3: 메모리 계산
핵심: "요청당 MB" 대신 프로세스/병렬도 기반
Mem_node = N_node_workers × Mem_node_base + inflight_req × Mem_per_inflight
Mem_node_with_gc = Mem_node × 1.2 # GC 오버헤드 20%
Mem_pg = shared_buffers + (N_db_pool × Mem_per_conn) + (Active_conn × work_mem)
Mem_workers = N_browser × Mem_browser_base + N_pages × Mem_per_page # 선택
Mem_total = Mem_os + Mem_nginx + Mem_node_with_gc + Mem_pg + Mem_workers
Mem_final = Mem_total × (1 + Headroom_pct) # Headroom 30-50% 권장
상수값 테이블: references/constants.md 참조
Step 4: 인스턴스 선택
계산된 CPU/메모리에 맞는 인스턴스 선택. AWS EC2 예시: references/aws-instances.md
출력 템플릿
# 리소스 추정 결과
## 입력값
- 하루 방문자: {V_day}명
- 운영시간: {H_active}시간
- 평균 체류: {T_session}초
- 봇 RPS: {Bot_RPS}
- 피크 배수: {Peak_mult}x
## 트래픽 계산
- 도착률 (λ): {lambda}/초
- 동시접속 (U_avg): {U_avg}명
- 피크 RPS: {R_peak}
## 리소스 산정
| 항목 | CPU (vCPU) | 메모리 | 계산식 |
|------|------------|--------|--------|
| 운영체제 | {cpu_os} | {mem_os} | 기본 시스템 프로세스 |
| DB | {cpu_db} | {mem_db} | shared_buffers + conn×mem |
| nginx | {cpu_nginx} | {mem_nginx} | I/O bound |
| Next.js | {cpu_next} | {mem_next} | N_workers×base + inflight×per |
| 백그라운드 워커 | {cpu_workers} | {mem_workers} | (선택) N_browser×base + N_pages×per |
| 소계 | {cpu_sum} | {mem_sum} | |
| 안정성여유 ({Headroom_pct}%) | {cpu_headroom} | {mem_headroom} | |
| **합계** | **{cpu_total}** | **{mem_total}** | |
## 인스턴스 추천
- 추천: {instance_type} ({vcpu} vCPU, {mem}GB) - 월 ${price}
- 대안: ...
주의사항
- 버스트형 인스턴스 주의: AWS t계열, GCP e2 등은 크레딧 고갈 시 성능 급락. 상시 부하 시 비추천.
- 메모리 OOM: 계산상 충분해도 GC/단편화로 터질 수 있음. Headroom 30-50% 권장.
- peak ≠ 동시접속: peak=400은 "도착률"이지 "동시접속"이 아님. Peak_mult로 환산.
- SSR K_rps 주의: Next.js SSR heavy는 실측 10-50 RPS/vCPU. 상수표보다 낮을 수 있음.
- Cold Start: 서버 시작 시 메모리 spike 발생 (Next.js build cache 등).
References