npx skillsauth add excatt/superclaude-plusplus scalingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
확장성 설계 가이드를 실행합니다.
┌─────────────┐ ┌─────────────┐
│ Server │ → │ Server │
│ 4 CPU │ │ 16 CPU │
│ 8GB RAM │ │ 64GB RAM │
└─────────────┘ └─────────────┘
장점: 단순함, 애플리케이션 변경 불필요
단점: 물리적 한계, 단일 장애점, 비용
┌─────────────┐ ┌─────────────┐
│ Server │ → │ Server x N │
│ │ │ Load │
│ │ │ Balancer │
└─────────────┘ └─────────────┘
장점: 무한 확장 가능, 고가용성
단점: 복잡성, 상태 관리 어려움
// ❌ Bad: 서버 메모리에 세션
const sessions = {};
app.use((req, res, next) => {
const session = sessions[req.cookies.sid];
});
// ✅ Good: 외부 저장소
const RedisStore = require('connect-redis').default;
app.use(session({
store: new RedisStore({ client: redisClient }),
secret: 'secret',
}));
// ❌ Bad: 로컬 파일 시스템
fs.writeFile('/uploads/file.jpg', data);
// ✅ Good: 객체 스토리지 (S3)
await s3.upload({
Bucket: 'my-bucket',
Key: 'uploads/file.jpg',
Body: data,
}).promise();
Round Robin 순차적 분배
Weighted 가중치 기반
Least Connections 연결 수 기반
IP Hash 클라이언트 IP 기반
upstream backend {
least_conn;
server backend1:3000 weight=3;
server backend2:3000 weight=2;
server backend3:3000 weight=1;
keepalive 32;
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
upstream backend {
server backend1:3000;
server backend2:3000;
health_check interval=5s fails=3 passes=2;
}
┌────────────┐
│ Master │ ← Write
│ (Primary) │
└─────┬──────┘
│ Replication
┌─────┴──────┐
│ Replica │ ← Read
│ (Secondary)│
└────────────┘
// 연결 분리
const writeDb = new Pool({ host: 'master' });
const readDb = new Pool({ host: 'replica' });
async function getUser(id) {
return readDb.query('SELECT * FROM users WHERE id = $1', [id]);
}
async function createUser(data) {
return writeDb.query('INSERT INTO users ...', [data]);
}
User ID 1-1000 → Shard 1
User ID 1001-2000 → Shard 2
User ID 2001-3000 → Shard 3
// 샤드 결정 함수
function getShard(userId) {
return shards[userId % shards.length];
}
-- 시간 기반 파티셔닝
CREATE TABLE orders (
id SERIAL,
created_at TIMESTAMP,
...
) PARTITION BY RANGE (created_at);
CREATE TABLE orders_2024_01 PARTITION OF orders
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
Browser Cache → CDN → App Cache → Redis → Database
# 정적 자원
location /static/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# API 응답
location /api/ {
add_header Cache-Control "private, max-age=60";
}
const cache = new Map();
const CACHE_TTL = 60000;
async function getCachedData(key, fetchFn) {
const cached = cache.get(key);
if (cached && Date.now() - cached.time < CACHE_TTL) {
return cached.data;
}
const data = await fetchFn();
cache.set(key, { data, time: Date.now() });
return data;
}
┌────────┐ ┌─────────┐ ┌──────────┐
│Producer│ → │ Queue │ → │ Consumer │
└────────┘ │(RabbitMQ│ └──────────┘
│ /Kafka) │
└─────────┘
// Producer
await channel.sendToQueue('tasks', Buffer.from(JSON.stringify(task)));
// Consumer
channel.consume('tasks', async (msg) => {
const task = JSON.parse(msg.content.toString());
await processTask(task);
channel.ack(msg);
});
// Bull Queue (Redis 기반)
const Queue = require('bull');
const emailQueue = new Queue('email');
// 작업 추가
await emailQueue.add({ to: '[email protected]', subject: 'Hello' });
// 처리
emailQueue.process(async (job) => {
await sendEmail(job.data);
});
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
# 조건 기반 확장
ScalingPolicy:
- Metric: CPUUtilization
Threshold: 70%
ScaleOut: +2 instances
ScaleIn: -1 instance
Cooldown: 300s
## Scaling Strategy
### Current Bottlenecks
| 구성요소 | 현재 | 병목 | 해결책 |
|---------|------|------|--------|
| API | 1 instance | CPU 90% | Scale Out |
| DB | Single | Read heavy | Read Replica |
### Architecture
[LB] → [App x3] → [Cache] → [DB Master] → [DB Replica]
### Scaling Plan
1. [단기] 읽기 복제 구성
2. [중기] 캐싱 레이어 추가
3. [장기] 샤딩 검토
### Cost Estimation
| 구성 | 현재 | 확장 후 |
|------|------|---------|
| Compute | $100 | $300 |
| Database | $200 | $400 |
요청에 맞는 확장 전략을 설계하세요.
testing
사용자 계획을 기존 도메인 모델에 대해 stress-test하는 인터뷰 세션. 용어를 날카롭게 다듬고, 결정이 굳어질 때마다 CONTEXT.md(도메인 어휘 사전)와 ADR을 인라인으로 갱신한다. 새 기능 요구사항 탐색은 `/brainstorm`을, 기존 도메인 모델·용어와의 정합성 점검은 이 스킬을 사용한다.
development
# Excel (XLSX) Spreadsheet Skill Claude Code supports comprehensive spreadsheet operations through the **xlsx** skill, enabling creation, editing, and analysis of Excel files (.xlsx, .xlsm, .csv, .tsv). ## Trigger - When user needs Excel spreadsheet creation or editing - Financial modeling or data analysis required - Spreadsheet formulas and calculations needed - Data import from CSV/TSV files ## Core Capabilities **Primary functions include:** - Creating new spreadsheets with formulas and f
tools
Generate structured implementation workflows from PRDs and feature requirements
development
실시간 통신 설계 가이드를 실행합니다.