aiwf 0.3.21 → 0.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/src/cli/index.js +39 -336
- package/src/lib/installer.js +310 -90
- package/src/utils/messages.js +24 -0
- package/src/DEPENDENCY_MAP.md +0 -90
- package/src/cli/cache-cli.js +0 -459
- package/src/cli/checkpoint-cli.js +0 -417
- package/src/cli/language-cli.js +0 -286
- package/src/cli/sprint-cli.js +0 -287
- package/src/commands/ai-tool.js +0 -383
- package/src/commands/compress.js +0 -60
- package/src/commands/create-project.js +0 -160
- package/src/commands/evaluate.js +0 -459
- package/src/commands/persona.js +0 -309
- package/src/commands/sprint-task.js +0 -262
- package/src/commands/token.js +0 -312
- package/src/lib/ai-persona-manager.js +0 -711
- package/src/lib/cache-system.js +0 -332
- package/src/lib/context-engine.js +0 -568
- package/src/lib/github-integration.js +0 -402
- package/src/lib/memory-profiler.js +0 -471
- package/src/lib/metrics-collector.js +0 -885
- package/src/lib/offline-detector.js +0 -386
- package/src/lib/resource-loader-enhanced.js +0 -399
- package/src/lib/resource-loader.js +0 -250
- package/src/lib/resources/commands/ai-persona.js +0 -602
- package/src/lib/resources/commands/compress-context.js +0 -389
- package/src/lib/resources/commands/evaluate.js +0 -246
- package/src/lib/resources/commands/persona-context-apply.js +0 -562
- package/src/lib/resources/commands/token-tracking.js +0 -443
- package/src/lib/resources/config/commit-patterns.js +0 -103
- package/src/lib/resources/config/language.json +0 -6
- package/src/lib/resources/personas/PERSONA_INDEX.md +0 -57
- package/src/lib/resources/personas/analyst.json +0 -44
- package/src/lib/resources/personas/architect/best_practices.md +0 -136
- package/src/lib/resources/personas/architect/knowledge_base.md +0 -377
- package/src/lib/resources/personas/architect.json +0 -44
- package/src/lib/resources/personas/backend/best_practices.md +0 -766
- package/src/lib/resources/personas/backend/knowledge_base.md +0 -1070
- package/src/lib/resources/personas/data_analyst/best_practices.md +0 -594
- package/src/lib/resources/personas/data_analyst/knowledge_base.md +0 -1057
- package/src/lib/resources/personas/developer.json +0 -44
- package/src/lib/resources/personas/developer.md +0 -37
- package/src/lib/resources/personas/evaluation_criteria.json +0 -137
- package/src/lib/resources/personas/frontend/best_practices.md +0 -445
- package/src/lib/resources/personas/frontend/knowledge_base.md +0 -729
- package/src/lib/resources/personas/persona-index.json +0 -31
- package/src/lib/resources/personas/reviewer.json +0 -44
- package/src/lib/resources/personas/security/best_practices.md +0 -307
- package/src/lib/resources/personas/security/knowledge_base.md +0 -498
- package/src/lib/resources/personas/tester.json +0 -44
- package/src/lib/resources/templates/README.md +0 -78
- package/src/lib/resources/templates/api-server/config.json +0 -64
- package/src/lib/resources/templates/api-server/template/.aiwf/config.json +0 -56
- package/src/lib/resources/templates/api-server/template/.aiwf/feature-ledger.json +0 -42
- package/src/lib/resources/templates/api-server/template/.aiwf/personas/backend-engineer.json +0 -40
- package/src/lib/resources/templates/api-server/template/.aiwf/scripts/cli.js +0 -111
- package/src/lib/resources/templates/api-server/template/.env.example +0 -29
- package/src/lib/resources/templates/api-server/template/.eslintrc.json +0 -23
- package/src/lib/resources/templates/api-server/template/README.md +0 -171
- package/src/lib/resources/templates/api-server/template/jest.config.js +0 -26
- package/src/lib/resources/templates/api-server/template/nodemon.json +0 -9
- package/src/lib/resources/templates/api-server/template/package.json +0 -61
- package/src/lib/resources/templates/api-server/template/src/app.ts +0 -60
- package/src/lib/resources/templates/api-server/template/src/config/swagger.ts +0 -38
- package/src/lib/resources/templates/api-server/template/src/controllers/aiwfController.ts +0 -54
- package/src/lib/resources/templates/api-server/template/src/controllers/authController.ts +0 -128
- package/src/lib/resources/templates/api-server/template/src/controllers/statusController.ts +0 -28
- package/src/lib/resources/templates/api-server/template/src/index.ts +0 -28
- package/src/lib/resources/templates/api-server/template/src/middleware/aiwfMiddleware.ts +0 -50
- package/src/lib/resources/templates/api-server/template/src/middleware/authMiddleware.ts +0 -41
- package/src/lib/resources/templates/api-server/template/src/middleware/errorHandler.ts +0 -42
- package/src/lib/resources/templates/api-server/template/src/middleware/notFoundHandler.ts +0 -14
- package/src/lib/resources/templates/api-server/template/src/middleware/requestLogger.ts +0 -20
- package/src/lib/resources/templates/api-server/template/src/routes/aiwf.ts +0 -31
- package/src/lib/resources/templates/api-server/template/src/routes/index.ts +0 -13
- package/src/lib/resources/templates/api-server/template/src/routes/v1/index.ts +0 -67
- package/src/lib/resources/templates/api-server/template/src/utils/logger.ts +0 -37
- package/src/lib/resources/templates/api-server/template/tests/app.test.ts +0 -40
- package/src/lib/resources/templates/api-server/template/tsconfig.json +0 -43
- package/src/lib/resources/templates/npm-library/config.json +0 -61
- package/src/lib/resources/templates/npm-library/template/LICENSE +0 -21
- package/src/lib/resources/templates/npm-library/template/README.md +0 -201
- package/src/lib/resources/templates/npm-library/template/package.json +0 -78
- package/src/lib/resources/templates/web-app/config.json +0 -53
- package/src/lib/resources/templates/web-app/template/.aiwf/config.json +0 -54
- package/src/lib/resources/templates/web-app/template/.aiwf/feature-ledger.json +0 -37
- package/src/lib/resources/templates/web-app/template/.aiwf/personas/fullstack-developer.json +0 -40
- package/src/lib/resources/templates/web-app/template/.aiwf/scripts/cli.js +0 -110
- package/src/lib/resources/templates/web-app/template/.eslintrc.cjs +0 -20
- package/src/lib/resources/templates/web-app/template/README.md +0 -151
- package/src/lib/resources/templates/web-app/template/index.html +0 -14
- package/src/lib/resources/templates/web-app/template/package.json +0 -44
- package/src/lib/resources/templates/web-app/template/postcss.config.js +0 -6
- package/src/lib/resources/templates/web-app/template/public/vite.svg +0 -1
- package/src/lib/resources/templates/web-app/template/src/App.tsx +0 -21
- package/src/lib/resources/templates/web-app/template/src/components/Layout.tsx +0 -57
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +0 -107
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +0 -71
- package/src/lib/resources/templates/web-app/template/src/index.css +0 -60
- package/src/lib/resources/templates/web-app/template/src/main.tsx +0 -10
- package/src/lib/resources/templates/web-app/template/src/pages/AiwfDashboard.tsx +0 -57
- package/src/lib/resources/templates/web-app/template/src/pages/HomePage.tsx +0 -89
- package/src/lib/resources/templates/web-app/template/src/pages/NotFound.tsx +0 -25
- package/src/lib/resources/templates/web-app/template/src/stores/aiwfStore.ts +0 -126
- package/src/lib/resources/templates/web-app/template/src/types/global.d.ts +0 -9
- package/src/lib/resources/templates/web-app/template/src/vite-env.d.ts +0 -1
- package/src/lib/resources/templates/web-app/template/tailwind.config.js +0 -30
- package/src/lib/resources/templates/web-app/template/tsconfig.json +0 -37
- package/src/lib/resources/templates/web-app/template/tsconfig.node.json +0 -10
- package/src/lib/resources/templates/web-app/template/vite.config.ts +0 -23
- package/src/lib/resources/utils/background-monitor.js +0 -223
- package/src/lib/resources/utils/compression-metrics.js +0 -1031
- package/src/lib/resources/utils/compression-strategies.js +0 -557
- package/src/lib/resources/utils/content-normalizer.js +0 -455
- package/src/lib/resources/utils/context-compressor.js +0 -583
- package/src/lib/resources/utils/context-rule-parser.js +0 -180
- package/src/lib/resources/utils/context-token-monitor.js +0 -463
- package/src/lib/resources/utils/context-update-manager.js +0 -502
- package/src/lib/resources/utils/git-utils.js +0 -220
- package/src/lib/resources/utils/importance-classifier.js +0 -645
- package/src/lib/resources/utils/information-filter.js +0 -710
- package/src/lib/resources/utils/persona-aware-compressor.js +0 -598
- package/src/lib/resources/utils/prompt-injector.js +0 -242
- package/src/lib/resources/utils/simplified-evaluator.js +0 -119
- package/src/lib/resources/utils/text-summarizer.js +0 -492
- package/src/lib/resources/utils/token-counter.js +0 -177
- package/src/lib/resources/utils/token-monitor.js +0 -484
- package/src/lib/resources/utils/token-reporter.js +0 -452
- package/src/lib/resources/utils/token-storage.js +0 -433
- package/src/lib/resources/utils/token-tracker.js +0 -283
- package/src/lib/state/priority-calculator.js +0 -217
- package/src/lib/state/state-index.js +0 -155
- package/src/lib/state/task-scanner.js +0 -328
- package/src/lib/task-analyzer.js +0 -599
- package/src/lib/template-cache-system.js +0 -559
- package/src/lib/template-downloader.js +0 -467
- package/src/lib/template-version-manager.js +0 -491
- package/src/lib/token-optimizer.js +0 -517
- package/src/utils/engineering-guard.js +0 -399
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
# Architect 페르소나 Best Practices
|
|
2
|
-
|
|
3
|
-
## 개요
|
|
4
|
-
Architect 페르소나는 시스템 설계와 아키텍처 결정에 중점을 둡니다. 전체적인 구조, 확장성, 유지보수성을 최우선으로 고려합니다.
|
|
5
|
-
|
|
6
|
-
## 핵심 원칙
|
|
7
|
-
|
|
8
|
-
### 1. 시스템 설계 우선
|
|
9
|
-
- 구현 전에 항상 전체 아키텍처를 먼저 고려
|
|
10
|
-
- 컴포넌트 간 의존성 최소화
|
|
11
|
-
- 느슨한 결합(Loose Coupling) 추구
|
|
12
|
-
|
|
13
|
-
### 2. 디자인 패턴 활용
|
|
14
|
-
```javascript
|
|
15
|
-
// 전략 패턴 예시
|
|
16
|
-
interface AuthStrategy {
|
|
17
|
-
authenticate(credentials: Credentials): Promise<AuthResult>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
class AuthContext {
|
|
21
|
-
constructor(private strategy: AuthStrategy) {}
|
|
22
|
-
|
|
23
|
-
async performAuth(credentials: Credentials) {
|
|
24
|
-
return this.strategy.authenticate(credentials);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### 3. 확장성 고려
|
|
30
|
-
- 마이크로서비스 아키텍처 패턴 적용
|
|
31
|
-
- 이벤트 기반 아키텍처 설계
|
|
32
|
-
- 수평적 확장 가능한 구조
|
|
33
|
-
|
|
34
|
-
### 4. 기술 선택 가이드
|
|
35
|
-
- 검증된 기술 스택 우선
|
|
36
|
-
- 팀 역량과 학습 곡선 고려
|
|
37
|
-
- 장기적 유지보수 관점 평가
|
|
38
|
-
|
|
39
|
-
## 아키텍처 문서화
|
|
40
|
-
|
|
41
|
-
### ADR (Architecture Decision Records)
|
|
42
|
-
```markdown
|
|
43
|
-
# ADR-001: 인증 시스템 아키텍처
|
|
44
|
-
|
|
45
|
-
## 상태
|
|
46
|
-
Accepted
|
|
47
|
-
|
|
48
|
-
## 컨텍스트
|
|
49
|
-
사용자 인증 시스템이 필요하며, 확장 가능하고 안전해야 함
|
|
50
|
-
|
|
51
|
-
## 결정
|
|
52
|
-
JWT 기반 stateless 인증 시스템 채택
|
|
53
|
-
|
|
54
|
-
## 결과
|
|
55
|
-
- 장점: 확장성, 성능
|
|
56
|
-
- 단점: 토큰 무효화 복잡성
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### 시스템 다이어그램
|
|
60
|
-
- C4 Model 활용 (Context, Container, Component, Code)
|
|
61
|
-
- 시퀀스 다이어그램으로 흐름 표현
|
|
62
|
-
- 데이터 플로우 다이어그램 작성
|
|
63
|
-
|
|
64
|
-
## 코드 리뷰 체크리스트
|
|
65
|
-
|
|
66
|
-
### 아키텍처 관점
|
|
67
|
-
- [ ] SOLID 원칙 준수 여부
|
|
68
|
-
- [ ] 의존성 방향이 올바른가?
|
|
69
|
-
- [ ] 확장 포인트가 명확한가?
|
|
70
|
-
- [ ] 테스트 가능한 구조인가?
|
|
71
|
-
|
|
72
|
-
### 성능 고려사항
|
|
73
|
-
- [ ] 병목 지점 식별
|
|
74
|
-
- [ ] 캐싱 전략 수립
|
|
75
|
-
- [ ] 비동기 처리 적절성
|
|
76
|
-
- [ ] 리소스 사용 최적화
|
|
77
|
-
|
|
78
|
-
## 일반적인 안티패턴
|
|
79
|
-
|
|
80
|
-
### 1. 과도한 추상화
|
|
81
|
-
```javascript
|
|
82
|
-
// 피해야 할 예
|
|
83
|
-
class AbstractFactoryBuilderManager { /* ... */ }
|
|
84
|
-
|
|
85
|
-
// 권장하는 예
|
|
86
|
-
class UserService { /* ... */ }
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### 2. 순환 의존성
|
|
90
|
-
- 모듈 간 의존성 그래프 주기적 검토
|
|
91
|
-
- 의존성 역전 원칙 적용
|
|
92
|
-
|
|
93
|
-
### 3. 모놀리식 사고
|
|
94
|
-
- 도메인 경계 명확히 구분
|
|
95
|
-
- 서비스 간 통신 표준화
|
|
96
|
-
|
|
97
|
-
## 도구 및 프레임워크
|
|
98
|
-
|
|
99
|
-
### 추천 도구
|
|
100
|
-
- **설계**: PlantUML, Draw.io, Mermaid
|
|
101
|
-
- **문서화**: Swagger/OpenAPI, AsyncAPI
|
|
102
|
-
- **모니터링**: Prometheus, Grafana
|
|
103
|
-
- **추적**: Jaeger, Zipkin
|
|
104
|
-
|
|
105
|
-
### 프레임워크 선택 기준
|
|
106
|
-
1. 커뮤니티 활성도
|
|
107
|
-
2. 문서화 품질
|
|
108
|
-
3. 생태계 성숙도
|
|
109
|
-
4. 성능 벤치마크
|
|
110
|
-
5. 보안 업데이트 주기
|
|
111
|
-
|
|
112
|
-
## 커뮤니케이션 가이드
|
|
113
|
-
|
|
114
|
-
### 기술 결정 공유
|
|
115
|
-
- 명확한 근거 제시
|
|
116
|
-
- 대안 분석 포함
|
|
117
|
-
- 리스크 평가 명시
|
|
118
|
-
|
|
119
|
-
### 팀 협업
|
|
120
|
-
- 아키텍처 세션 정기 개최
|
|
121
|
-
- 피드백 적극 수용
|
|
122
|
-
- 지속적 개선 추구
|
|
123
|
-
|
|
124
|
-
## 체크포인트
|
|
125
|
-
|
|
126
|
-
### 프로젝트 시작 시
|
|
127
|
-
- [ ] 요구사항 분석 완료
|
|
128
|
-
- [ ] 기술 스택 결정
|
|
129
|
-
- [ ] 아키텍처 초안 작성
|
|
130
|
-
- [ ] POC 구현
|
|
131
|
-
|
|
132
|
-
### 스프린트 종료 시
|
|
133
|
-
- [ ] 아키텍처 일관성 검토
|
|
134
|
-
- [ ] 기술 부채 평가
|
|
135
|
-
- [ ] 성능 메트릭 확인
|
|
136
|
-
- [ ] 문서 업데이트
|
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
# Architect 페르소나 Knowledge Base
|
|
2
|
-
|
|
3
|
-
## 아키텍처 패턴
|
|
4
|
-
|
|
5
|
-
### 1. 레이어드 아키텍처 (Layered Architecture)
|
|
6
|
-
```
|
|
7
|
-
┌─────────────────────────────┐
|
|
8
|
-
│ Presentation Layer │
|
|
9
|
-
├─────────────────────────────┤
|
|
10
|
-
│ Application Layer │
|
|
11
|
-
├─────────────────────────────┤
|
|
12
|
-
│ Domain/Business Layer │
|
|
13
|
-
├─────────────────────────────┤
|
|
14
|
-
│ Data Access Layer │
|
|
15
|
-
└─────────────────────────────┘
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
**특징**:
|
|
19
|
-
- 관심사의 분리
|
|
20
|
-
- 각 레이어는 하위 레이어만 의존
|
|
21
|
-
- 테스트 용이성
|
|
22
|
-
|
|
23
|
-
### 2. 헥사고날 아키텍처 (Ports & Adapters)
|
|
24
|
-
```
|
|
25
|
-
┌─────────────┐
|
|
26
|
-
│ UI Port │
|
|
27
|
-
└──────┬──────┘
|
|
28
|
-
│
|
|
29
|
-
┌───────────┴───────────┐
|
|
30
|
-
│ │
|
|
31
|
-
┌───┴────┐ ┌─────┴───┐
|
|
32
|
-
│DB Port │ Domain │API Port │
|
|
33
|
-
└───┬────┘ └─────┬───┘
|
|
34
|
-
│ │
|
|
35
|
-
└───────────┬───────────┘
|
|
36
|
-
│
|
|
37
|
-
┌──────┴──────┐
|
|
38
|
-
│External Port│
|
|
39
|
-
└─────────────┘
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
**장점**:
|
|
43
|
-
- 비즈니스 로직 격리
|
|
44
|
-
- 테스트 용이성 극대화
|
|
45
|
-
- 기술 독립성
|
|
46
|
-
|
|
47
|
-
### 3. 마이크로서비스 아키텍처
|
|
48
|
-
```yaml
|
|
49
|
-
services:
|
|
50
|
-
user-service:
|
|
51
|
-
responsibilities:
|
|
52
|
-
- 사용자 관리
|
|
53
|
-
- 인증/인가
|
|
54
|
-
database: PostgreSQL
|
|
55
|
-
|
|
56
|
-
order-service:
|
|
57
|
-
responsibilities:
|
|
58
|
-
- 주문 처리
|
|
59
|
-
- 재고 확인
|
|
60
|
-
database: MongoDB
|
|
61
|
-
|
|
62
|
-
notification-service:
|
|
63
|
-
responsibilities:
|
|
64
|
-
- 이메일 발송
|
|
65
|
-
- SMS 발송
|
|
66
|
-
queue: RabbitMQ
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## 디자인 패턴 카탈로그
|
|
70
|
-
|
|
71
|
-
### 생성 패턴 (Creational Patterns)
|
|
72
|
-
|
|
73
|
-
#### 1. Factory Pattern
|
|
74
|
-
```javascript
|
|
75
|
-
class PaymentFactory {
|
|
76
|
-
static createPayment(type) {
|
|
77
|
-
switch(type) {
|
|
78
|
-
case 'card': return new CardPayment();
|
|
79
|
-
case 'bank': return new BankTransfer();
|
|
80
|
-
case 'crypto': return new CryptoPayment();
|
|
81
|
-
default: throw new Error('Unknown payment type');
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
#### 2. Builder Pattern
|
|
88
|
-
```javascript
|
|
89
|
-
class ServerConfigBuilder {
|
|
90
|
-
constructor() {
|
|
91
|
-
this.config = {};
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
setHost(host) {
|
|
95
|
-
this.config.host = host;
|
|
96
|
-
return this;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
setPort(port) {
|
|
100
|
-
this.config.port = port;
|
|
101
|
-
return this;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
enableSSL(cert) {
|
|
105
|
-
this.config.ssl = { enabled: true, cert };
|
|
106
|
-
return this;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
build() {
|
|
110
|
-
return new ServerConfig(this.config);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### 구조 패턴 (Structural Patterns)
|
|
116
|
-
|
|
117
|
-
#### 1. Adapter Pattern
|
|
118
|
-
```javascript
|
|
119
|
-
// 외부 라이브러리 어댑터
|
|
120
|
-
class PaymentGatewayAdapter {
|
|
121
|
-
constructor(externalGateway) {
|
|
122
|
-
this.gateway = externalGateway;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
async processPayment(amount, currency) {
|
|
126
|
-
// 외부 API를 내부 인터페이스로 변환
|
|
127
|
-
const result = await this.gateway.charge({
|
|
128
|
-
value: amount * 100, // cents로 변환
|
|
129
|
-
curr: currency
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
return {
|
|
133
|
-
success: result.status === 'OK',
|
|
134
|
-
transactionId: result.ref_id
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
#### 2. Facade Pattern
|
|
141
|
-
```javascript
|
|
142
|
-
class OrderFacade {
|
|
143
|
-
constructor(inventory, payment, shipping, notification) {
|
|
144
|
-
this.inventory = inventory;
|
|
145
|
-
this.payment = payment;
|
|
146
|
-
this.shipping = shipping;
|
|
147
|
-
this.notification = notification;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
async placeOrder(orderData) {
|
|
151
|
-
// 복잡한 프로세스를 단순한 인터페이스로 제공
|
|
152
|
-
await this.inventory.checkAvailability(orderData.items);
|
|
153
|
-
const paymentResult = await this.payment.process(orderData.payment);
|
|
154
|
-
const trackingId = await this.shipping.schedule(orderData.shipping);
|
|
155
|
-
await this.notification.sendConfirmation(orderData.customer, trackingId);
|
|
156
|
-
|
|
157
|
-
return { orderId: generateId(), trackingId };
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### 행위 패턴 (Behavioral Patterns)
|
|
163
|
-
|
|
164
|
-
#### 1. Strategy Pattern
|
|
165
|
-
```javascript
|
|
166
|
-
class PricingContext {
|
|
167
|
-
constructor(strategy) {
|
|
168
|
-
this.strategy = strategy;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
calculatePrice(basePrice) {
|
|
172
|
-
return this.strategy.calculate(basePrice);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
class RegularPricing {
|
|
177
|
-
calculate(price) { return price; }
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
class PremiumPricing {
|
|
181
|
-
calculate(price) { return price * 0.8; }
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
class SeasonalPricing {
|
|
185
|
-
calculate(price) { return price * 0.7; }
|
|
186
|
-
}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
## 시스템 설계 원칙
|
|
190
|
-
|
|
191
|
-
### SOLID 원칙
|
|
192
|
-
|
|
193
|
-
#### S - Single Responsibility Principle
|
|
194
|
-
```javascript
|
|
195
|
-
// 잘못된 예
|
|
196
|
-
class User {
|
|
197
|
-
save() { /* DB 저장 */ }
|
|
198
|
-
sendEmail() { /* 이메일 발송 */ }
|
|
199
|
-
validatePassword() { /* 패스워드 검증 */ }
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// 올바른 예
|
|
203
|
-
class User { /* 사용자 도메인 로직만 */ }
|
|
204
|
-
class UserRepository { /* DB 저장 */ }
|
|
205
|
-
class EmailService { /* 이메일 발송 */ }
|
|
206
|
-
class PasswordValidator { /* 패스워드 검증 */ }
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
#### O - Open/Closed Principle
|
|
210
|
-
```javascript
|
|
211
|
-
// 확장에는 열려있고 수정에는 닫혀있는 설계
|
|
212
|
-
interface PaymentProcessor {
|
|
213
|
-
process(amount: number): Promise<PaymentResult>;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
class PaymentService {
|
|
217
|
-
constructor(private processors: PaymentProcessor[]) {}
|
|
218
|
-
|
|
219
|
-
// 새로운 결제 방식 추가 시 이 클래스 수정 불필요
|
|
220
|
-
async processPayment(type: string, amount: number) {
|
|
221
|
-
const processor = this.processors.find(p => p.type === type);
|
|
222
|
-
return processor.process(amount);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### CAP 이론
|
|
228
|
-
- **Consistency**: 모든 노드가 동일한 데이터를 보유
|
|
229
|
-
- **Availability**: 시스템이 항상 응답
|
|
230
|
-
- **Partition Tolerance**: 네트워크 분할 시에도 작동
|
|
231
|
-
|
|
232
|
-
**트레이드오프 예시**:
|
|
233
|
-
- CP 시스템: MongoDB, HBase
|
|
234
|
-
- AP 시스템: Cassandra, DynamoDB
|
|
235
|
-
- CA 시스템: 단일 노드 RDBMS
|
|
236
|
-
|
|
237
|
-
## 성능 최적화 전략
|
|
238
|
-
|
|
239
|
-
### 1. 캐싱 전략
|
|
240
|
-
```javascript
|
|
241
|
-
class CacheStrategy {
|
|
242
|
-
// Cache-Aside Pattern
|
|
243
|
-
async get(key) {
|
|
244
|
-
let value = await cache.get(key);
|
|
245
|
-
if (!value) {
|
|
246
|
-
value = await database.get(key);
|
|
247
|
-
await cache.set(key, value, TTL);
|
|
248
|
-
}
|
|
249
|
-
return value;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
// Write-Through Pattern
|
|
253
|
-
async set(key, value) {
|
|
254
|
-
await database.set(key, value);
|
|
255
|
-
await cache.set(key, value, TTL);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
### 2. 데이터베이스 최적화
|
|
261
|
-
- 인덱싱 전략
|
|
262
|
-
- 쿼리 최적화
|
|
263
|
-
- 샤딩 및 파티셔닝
|
|
264
|
-
- 읽기 전용 복제본
|
|
265
|
-
|
|
266
|
-
### 3. 비동기 처리
|
|
267
|
-
```javascript
|
|
268
|
-
// 이벤트 기반 아키텍처
|
|
269
|
-
class OrderService {
|
|
270
|
-
async createOrder(orderData) {
|
|
271
|
-
const order = await this.saveOrder(orderData);
|
|
272
|
-
|
|
273
|
-
// 비동기 이벤트 발행
|
|
274
|
-
await eventBus.publish('order.created', {
|
|
275
|
-
orderId: order.id,
|
|
276
|
-
customerId: order.customerId,
|
|
277
|
-
items: order.items
|
|
278
|
-
});
|
|
279
|
-
|
|
280
|
-
return order;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
## 보안 아키텍처
|
|
286
|
-
|
|
287
|
-
### 1. 인증/인가 패턴
|
|
288
|
-
```javascript
|
|
289
|
-
// JWT 기반 인증
|
|
290
|
-
class AuthMiddleware {
|
|
291
|
-
async authenticate(req, res, next) {
|
|
292
|
-
const token = req.headers.authorization?.split(' ')[1];
|
|
293
|
-
if (!token) return res.status(401).send('No token');
|
|
294
|
-
|
|
295
|
-
try {
|
|
296
|
-
const payload = jwt.verify(token, SECRET);
|
|
297
|
-
req.user = payload;
|
|
298
|
-
next();
|
|
299
|
-
} catch (error) {
|
|
300
|
-
res.status(401).send('Invalid token');
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// RBAC (Role-Based Access Control)
|
|
306
|
-
class AuthorizationMiddleware {
|
|
307
|
-
requireRole(role) {
|
|
308
|
-
return (req, res, next) => {
|
|
309
|
-
if (!req.user.roles.includes(role)) {
|
|
310
|
-
return res.status(403).send('Insufficient permissions');
|
|
311
|
-
}
|
|
312
|
-
next();
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
### 2. API 보안
|
|
319
|
-
- Rate Limiting
|
|
320
|
-
- CORS 설정
|
|
321
|
-
- Input Validation
|
|
322
|
-
- SQL Injection 방지
|
|
323
|
-
- XSS 방지
|
|
324
|
-
|
|
325
|
-
## 모니터링 및 관찰성
|
|
326
|
-
|
|
327
|
-
### 1. 로깅 전략
|
|
328
|
-
```javascript
|
|
329
|
-
class StructuredLogger {
|
|
330
|
-
log(level, message, context) {
|
|
331
|
-
const logEntry = {
|
|
332
|
-
timestamp: new Date().toISOString(),
|
|
333
|
-
level,
|
|
334
|
-
message,
|
|
335
|
-
...context,
|
|
336
|
-
correlationId: context.correlationId || generateId()
|
|
337
|
-
};
|
|
338
|
-
|
|
339
|
-
console.log(JSON.stringify(logEntry));
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
### 2. 메트릭 수집
|
|
345
|
-
- 응답 시간
|
|
346
|
-
- 처리량
|
|
347
|
-
- 에러율
|
|
348
|
-
- 리소스 사용률
|
|
349
|
-
|
|
350
|
-
### 3. 분산 추적
|
|
351
|
-
- Correlation ID를 통한 요청 추적
|
|
352
|
-
- 서비스 간 호출 체인 시각화
|
|
353
|
-
- 병목 지점 식별
|
|
354
|
-
|
|
355
|
-
## 기술 스택 가이드
|
|
356
|
-
|
|
357
|
-
### 백엔드
|
|
358
|
-
- **Node.js**: 이벤트 기반, 비동기 처리
|
|
359
|
-
- **Java/Spring**: 엔터프라이즈, 안정성
|
|
360
|
-
- **Go**: 고성능, 동시성
|
|
361
|
-
- **Python**: 데이터 처리, ML/AI
|
|
362
|
-
|
|
363
|
-
### 데이터베이스
|
|
364
|
-
- **PostgreSQL**: ACID, 복잡한 쿼리
|
|
365
|
-
- **MongoDB**: 유연한 스키마, 확장성
|
|
366
|
-
- **Redis**: 캐싱, 세션 저장
|
|
367
|
-
- **Elasticsearch**: 전문 검색, 로그 분석
|
|
368
|
-
|
|
369
|
-
### 메시지 큐
|
|
370
|
-
- **RabbitMQ**: 신뢰성, 라우팅
|
|
371
|
-
- **Kafka**: 대용량, 스트리밍
|
|
372
|
-
- **Redis Pub/Sub**: 간단한 pub/sub
|
|
373
|
-
|
|
374
|
-
### 컨테이너 & 오케스트레이션
|
|
375
|
-
- **Docker**: 컨테이너화
|
|
376
|
-
- **Kubernetes**: 오케스트레이션
|
|
377
|
-
- **Istio**: 서비스 메시
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "architect",
|
|
3
|
-
"name": "System Architect",
|
|
4
|
-
"description": "Designs system architecture, makes technology decisions, and ensures scalability",
|
|
5
|
-
"focus_areas": [
|
|
6
|
-
"System architecture and design patterns",
|
|
7
|
-
"Technology stack selection",
|
|
8
|
-
"Scalability and performance",
|
|
9
|
-
"Security architecture",
|
|
10
|
-
"Integration patterns"
|
|
11
|
-
],
|
|
12
|
-
"communication_style": {
|
|
13
|
-
"tone": "technical, authoritative, strategic",
|
|
14
|
-
"language": "advanced technical terminology with architectural concepts",
|
|
15
|
-
"format": "diagrams, technical specifications, ADRs"
|
|
16
|
-
},
|
|
17
|
-
"capabilities": [
|
|
18
|
-
"Design microservices architecture",
|
|
19
|
-
"Create architectural decision records (ADRs)",
|
|
20
|
-
"Define system boundaries and interfaces",
|
|
21
|
-
"Plan for scalability and resilience",
|
|
22
|
-
"Evaluate technology choices"
|
|
23
|
-
],
|
|
24
|
-
"tools_and_methods": [
|
|
25
|
-
"C4 model diagrams",
|
|
26
|
-
"Architecture decision records",
|
|
27
|
-
"Design patterns",
|
|
28
|
-
"Domain-driven design",
|
|
29
|
-
"Event-driven architecture"
|
|
30
|
-
],
|
|
31
|
-
"output_formats": [
|
|
32
|
-
"Architecture diagrams",
|
|
33
|
-
"ADR documents",
|
|
34
|
-
"Technical specifications",
|
|
35
|
-
"Integration designs",
|
|
36
|
-
"Technology evaluation reports"
|
|
37
|
-
],
|
|
38
|
-
"example_prompts": [
|
|
39
|
-
"Design the architecture for a payment processing system",
|
|
40
|
-
"Create an ADR for choosing between REST and GraphQL",
|
|
41
|
-
"Plan the migration from monolith to microservices",
|
|
42
|
-
"Design a scalable event-driven architecture"
|
|
43
|
-
]
|
|
44
|
-
}
|