- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환 - Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용 - pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관) - worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md) - D:\Rhino-MCP 경로 참조를 새 위치로 치환 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
450 lines
13 KiB
Markdown
450 lines
13 KiB
Markdown
---
|
|
template: design-enterprise
|
|
version: 1.0
|
|
description: Detailed design document for Enterprise level projects
|
|
variables:
|
|
- feature: Feature name
|
|
- date: Creation date (YYYY-MM-DD)
|
|
- author: Author
|
|
- version: Document version
|
|
- reviewers: Reviewers list
|
|
level: Enterprise
|
|
---
|
|
|
|
# {feature} Detailed Design Document
|
|
|
|
> **Version**: {version}
|
|
> **Created**: {date}
|
|
> **Author**: {author}
|
|
> **Status**: Draft
|
|
> **Reviewers**: {reviewers}
|
|
> **Planning Doc**: [{feature}.plan.md](../01-plan/features/{feature}.plan.md)
|
|
|
|
---
|
|
|
|
## 1. Executive Summary
|
|
|
|
### 1.1 Purpose
|
|
|
|
{High-level purpose of this feature}
|
|
|
|
### 1.2 Scope
|
|
|
|
{What is included and excluded from this design}
|
|
|
|
### 1.3 Goals
|
|
|
|
- {Goal 1}
|
|
- {Goal 2}
|
|
- {Goal 3}
|
|
|
|
---
|
|
|
|
## 2. Non-Functional Requirements
|
|
|
|
### 2.1 Performance
|
|
|
|
| Metric | Target | Rationale |
|
|
|--------|--------|-----------|
|
|
| Response time (P95) | < 200ms | User experience |
|
|
| Throughput | > 1000 RPS | Peak load |
|
|
| Database query time | < 50ms | Backend performance |
|
|
|
|
### 2.2 Scalability
|
|
|
|
- Horizontal scaling capability
|
|
- Expected growth: {X}% per month
|
|
- Auto-scaling thresholds
|
|
|
|
### 2.3 Availability
|
|
|
|
- Target SLA: 99.9%
|
|
- Recovery Time Objective (RTO): < 1 hour
|
|
- Recovery Point Objective (RPO): < 5 minutes
|
|
|
|
---
|
|
|
|
## 3. System Architecture
|
|
|
|
### 3.1 High-Level Architecture
|
|
|
|
```
|
|
┌──────────────────────────────────────────────────────────────┐
|
|
│ Load Balancer (ALB) │
|
|
└──────────────────────────────────────────────────────────────┘
|
|
│
|
|
┌───────────────┼───────────────┐
|
|
▼ ▼ ▼
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
│ Service A │ │ Service B │ │ Service C │
|
|
│ (API) │ │ (Worker) │ │ (Gateway) │
|
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
│ │ │
|
|
└───────────────┼───────────────┘
|
|
▼
|
|
┌──────────────────────────────────────────────────────────────┐
|
|
│ Data Layer │
|
|
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
|
│ │PostgreSQL│ │ Redis │ │ S3 │ │ ElasticSearch│ │
|
|
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
|
|
└──────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 3.2 Microservices Structure
|
|
|
|
| Service | Responsibility | Stack | Replicas |
|
|
|---------|---------------|-------|----------|
|
|
| {service-a} | {role} | {tech} | 3 |
|
|
| {service-b} | {role} | {tech} | 2 |
|
|
|
|
### 3.3 Clean Architecture Layers
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Presentation Layer │
|
|
│ (Controllers, DTOs, Mappers) │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ Application Layer │
|
|
│ (Use Cases, Services, Handlers) │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ Domain Layer │
|
|
│ (Entities, Value Objects, Interfaces) │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ Infrastructure Layer │
|
|
│ (Repositories, External APIs, Database) │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### 3.4 Inter-Service Communication
|
|
|
|
| From | To | Protocol | Pattern |
|
|
|------|-----|----------|---------|
|
|
| API Gateway | Service A | gRPC | Request/Response |
|
|
| Service A | Service B | Message Queue | Event-driven |
|
|
|
|
---
|
|
|
|
## 4. Data Model
|
|
|
|
### 4.1 Entity Definitions
|
|
|
|
```typescript
|
|
// {Entity}
|
|
interface {Entity} {
|
|
id: string;
|
|
version: number; // Optimistic locking
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
createdBy: string;
|
|
// Fields...
|
|
}
|
|
```
|
|
|
|
### 4.2 Database Schema
|
|
|
|
```sql
|
|
CREATE TABLE {table} (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
version INTEGER NOT NULL DEFAULT 1,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
created_by UUID REFERENCES users(id),
|
|
-- Fields...
|
|
);
|
|
|
|
CREATE INDEX idx_{table}_created_at ON {table}(created_at);
|
|
```
|
|
|
|
### 4.3 Event Schema (Event-driven)
|
|
|
|
```typescript
|
|
interface {Feature}Event {
|
|
eventId: string;
|
|
eventType: '{feature}.created' | '{feature}.updated';
|
|
timestamp: string;
|
|
payload: {
|
|
// Event data
|
|
};
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 5. API Specification
|
|
|
|
### 5.1 Endpoint List
|
|
|
|
| Method | Path | Description | Rate Limit |
|
|
|--------|------|-------------|------------|
|
|
| GET | /api/v1/{resource} | List | 100/min |
|
|
| POST | /api/v1/{resource} | Create | 10/min |
|
|
| PUT | /api/v1/{resource}/:id | Update | 30/min |
|
|
| DELETE | /api/v1/{resource}/:id | Delete | 5/min |
|
|
|
|
### 5.2 Response Format (Standard)
|
|
|
|
```json
|
|
// Success
|
|
{
|
|
"data": { ... },
|
|
"meta": {
|
|
"requestId": "req_xxx",
|
|
"timestamp": "2024-01-01T00:00:00Z"
|
|
}
|
|
}
|
|
|
|
// Error
|
|
{
|
|
"error": {
|
|
"code": "VALIDATION_ERROR",
|
|
"message": "User-friendly message",
|
|
"details": [ ... ]
|
|
}
|
|
}
|
|
|
|
// Pagination
|
|
{
|
|
"data": [ ... ],
|
|
"pagination": {
|
|
"total": 100,
|
|
"page": 1,
|
|
"limit": 20,
|
|
"hasMore": true
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Infrastructure
|
|
|
|
### 6.1 Kubernetes Resources
|
|
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: {service}
|
|
spec:
|
|
replicas: 3
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: {service}
|
|
resources:
|
|
requests:
|
|
cpu: "100m"
|
|
memory: "256Mi"
|
|
limits:
|
|
cpu: "500m"
|
|
memory: "512Mi"
|
|
```
|
|
|
|
### 6.2 Environment Variables
|
|
|
|
| Variable | Description | Scope |
|
|
|----------|-------------|-------|
|
|
| DB_HOST | Database host | Server |
|
|
| REDIS_URL | Redis connection | Server |
|
|
| NEXT_PUBLIC_API_URL | API base URL | Client |
|
|
|
|
---
|
|
|
|
## 7. Security
|
|
|
|
### 7.1 Authentication & Authorization
|
|
|
|
- Authentication: JWT with refresh tokens
|
|
- Authorization: RBAC with permissions
|
|
- Token expiry: Access 15min, Refresh 7days
|
|
|
|
### 7.2 Security Checklist
|
|
|
|
- [ ] Input validation (all endpoints)
|
|
- [ ] SQL injection prevention (parameterized queries)
|
|
- [ ] XSS prevention (output encoding)
|
|
- [ ] CSRF protection (tokens)
|
|
- [ ] Rate limiting (per endpoint)
|
|
- [ ] Audit logging (sensitive operations)
|
|
- [ ] Secrets management (no hardcoded secrets)
|
|
|
|
---
|
|
|
|
## 8. Monitoring & Observability
|
|
|
|
### 8.1 Monitoring Stack
|
|
|
|
| Component | Tool | Role |
|
|
|-----------|------|------|
|
|
| Error Tracking | **Sentry** | Error grouping, regression detection, session replay |
|
|
| Metrics | Prometheus | Counter/Gauge/Histogram, 15s scrape interval |
|
|
| Dashboards | Grafana | Unified view (Prometheus + Loki + Tempo + Sentry) |
|
|
| Logs | Loki + Promtail | JSON structured log aggregation, 30d retention |
|
|
| Tracing | Tempo + OpenTelemetry | Distributed tracing, 10% sampling (prod) |
|
|
| Alerting | Alertmanager | Route: Critical→PagerDuty, Warning→Slack |
|
|
|
|
### 8.2 Metrics & SLOs
|
|
|
|
| Metric | Type | SLO/Threshold | Alert |
|
|
|--------|------|---------------|-------|
|
|
| request_latency_seconds | Histogram | P95 < 200ms, P99 < 500ms | Warning > 500ms, Critical > 1s |
|
|
| error_rate | Counter | < 0.1% (SLO 99.9%) | Warning > 1%, Critical > 5% |
|
|
| cpu_usage | Gauge | < 70% (HPA target) | Warning > 80%, Critical > 95% |
|
|
| memory_usage | Gauge | < 80% (HPA target) | Warning > 85%, Critical > 95% |
|
|
| sentry_unresolved_issues | Gauge | < 5 critical | Warning > 5, Critical > 10 |
|
|
|
|
### 8.3 Logging
|
|
|
|
- Format: JSON structured
|
|
- Required fields: `timestamp, level, service, request_id, trace_id, user_id, message`
|
|
- Retention: 30 days
|
|
- Error logs: Sentry SDK가 자동 캡처 (breadcrumbs 포함)
|
|
|
|
### 8.4 Error Tracking (Sentry)
|
|
|
|
```
|
|
Frontend (Next.js):
|
|
- @sentry/nextjs SDK
|
|
- Error Boundary 자동 연동
|
|
- Session Replay (에러 시 100%)
|
|
- Performance Monitoring (10% sampling)
|
|
|
|
Backend (FastAPI):
|
|
- sentry-sdk[fastapi]
|
|
- ASGI middleware 자동 캡처
|
|
- SQLAlchemy integration (slow query 추적)
|
|
- Custom context: user_id, request_id, service_name
|
|
```
|
|
|
|
### 8.5 Alerts & Escalation
|
|
|
|
| Alert | Condition | Severity | Action |
|
|
|-------|-----------|----------|--------|
|
|
| High Error Rate | > 5% for 5min | Critical | PagerDuty page + Auto-Rollback |
|
|
| High Latency | P95 > 1s for 10min | Warning | Slack #error-alerts |
|
|
| Sentry New Issue | New unhandled exception | Warning | Self-Healing Agent trigger |
|
|
| Sentry Regression | Resolved issue re-opened | Critical | Self-Healing + PagerDuty |
|
|
| Sentry Spike | Error frequency > 10x baseline | Critical | Auto-Rollback + PagerDuty |
|
|
|
|
---
|
|
|
|
## 9. Error Handling & Self-Healing Pipeline
|
|
|
|
### 9.1 Error Flow
|
|
|
|
```
|
|
Exception 발생
|
|
↓
|
|
Sentry SDK 자동 캡처 (breadcrumbs + user + release)
|
|
↓
|
|
Sentry Alert Rule (new/regression/spike)
|
|
↓
|
|
Self-Healing Agent (Living Context 4-Layer)
|
|
↓
|
|
Auto-fix (max 5 iter) → 4중 검증 → Auto PR
|
|
↓
|
|
Canary Deploy (10%→25%→50%→100%)
|
|
↓
|
|
Post-deploy 검증 (Sentry issue resolved? error_rate 정상?)
|
|
↓
|
|
실패 시 → Auto-Rollback + Incident Memory 기록
|
|
```
|
|
|
|
### 9.2 Circuit Breaker
|
|
|
|
| State | Condition | Action |
|
|
|-------|-----------|--------|
|
|
| CLOSED | failures < 3 | Normal operation |
|
|
| OPEN | failures >= 3 | Block all transitions, 30s cooldown |
|
|
| HALF_OPEN | cooldown expired | 1 trial attempt → success=CLOSED, fail=OPEN |
|
|
|
|
---
|
|
|
|
## 10. Deployment
|
|
|
|
### 10.1 Load Balancer
|
|
|
|
```
|
|
Internet → CloudFront (CDN + WAF) → ALB → NGINX Ingress Controller → Services
|
|
↑
|
|
CORS 처리 (annotation)
|
|
Path-based routing
|
|
TLS termination (ACM)
|
|
```
|
|
|
|
- **ALB + NGINX Ingress** (기본): L7, CORS annotation, path routing, WAF 연동
|
|
- **NLB** (특수): L4, gRPC/WebSocket 전용, CORS는 앱단 처리
|
|
|
|
### 10.2 CI/CD Pipeline
|
|
|
|
```
|
|
PR → Lint/Test(≥80%) → Security Scan(Semgrep+Trivy) → Build → Push ECR
|
|
→ Deploy Staging(ArgoCD) → E2E Test → Approval Gate → Canary Deploy Prod
|
|
```
|
|
|
|
### 10.3 Canary Strategy (Argo Rollouts)
|
|
|
|
```
|
|
10% traffic (2min) → metric check → 25% (2min) → 50% (5min) → 100%
|
|
↓ fail
|
|
Auto-Rollback + Sentry alert
|
|
```
|
|
|
|
### 10.4 Rollback Strategy
|
|
|
|
1. **Auto-Rollback**: Canary metrics fail (error_rate > 1% or P95 > 200ms)
|
|
2. **Self-Healing Rollback**: 5회 fix 실패 시 자동 롤백
|
|
3. **Manual Rollback**: ArgoCD UI one-click revert
|
|
3. Database migration rollback scripts ready
|
|
|
|
---
|
|
|
|
## 10. Test Plan
|
|
|
|
### 10.1 Test Pyramid
|
|
|
|
| Type | Coverage Target | Tools |
|
|
|------|-----------------|-------|
|
|
| Unit | > 80% | Jest |
|
|
| Integration | Key paths | Supertest |
|
|
| E2E | Critical flows | Playwright |
|
|
| Load | Performance | k6 |
|
|
|
|
### 10.2 Key Test Scenarios
|
|
|
|
- [ ] Happy path: {description}
|
|
- [ ] Error handling: {description}
|
|
- [ ] Edge cases: {description}
|
|
- [ ] Concurrency: {description}
|
|
- [ ] Failover: {description}
|
|
|
|
---
|
|
|
|
## 11. Implementation Plan
|
|
|
|
### 11.1 Phases
|
|
|
|
| Phase | Scope | Duration |
|
|
|-------|-------|----------|
|
|
| 1 | Core infrastructure | 2 days |
|
|
| 2 | API implementation | 3 days |
|
|
| 3 | UI integration | 2 days |
|
|
| 4 | Testing & QA | 2 days |
|
|
|
|
### 11.2 Success Criteria
|
|
|
|
- [ ] All endpoints implemented
|
|
- [ ] Test coverage > 80%
|
|
- [ ] Zero Script QA passed
|
|
- [ ] Security scan passed
|
|
- [ ] Performance benchmarks met
|
|
- [ ] Documentation complete
|
|
|
|
---
|
|
|
|
## Document History
|
|
|
|
| Version | Date | Changes | Author | Reviewer |
|
|
|---------|------|---------|--------|----------|
|
|
| 0.1 | {date} | Initial draft | {author} | - |
|