@wooojin/forgen 0.1.0
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/.claude-plugin/plugin.json +20 -0
- package/CHANGELOG.md +353 -0
- package/CONTRIBUTING.md +98 -0
- package/LICENSE +21 -0
- package/README.ja.md +469 -0
- package/README.ko.md +469 -0
- package/README.md +483 -0
- package/README.zh.md +469 -0
- package/agents/analyst.md +98 -0
- package/agents/architect.md +62 -0
- package/agents/code-reviewer.md +120 -0
- package/agents/code-simplifier.md +197 -0
- package/agents/critic.md +70 -0
- package/agents/debugger.md +117 -0
- package/agents/designer.md +131 -0
- package/agents/executor.md +54 -0
- package/agents/explore.md +145 -0
- package/agents/git-master.md +212 -0
- package/agents/performance-reviewer.md +172 -0
- package/agents/planner.md +29 -0
- package/agents/qa-tester.md +158 -0
- package/agents/refactoring-expert.md +168 -0
- package/agents/scientist.md +144 -0
- package/agents/security-reviewer.md +137 -0
- package/agents/test-engineer.md +153 -0
- package/agents/verifier.md +133 -0
- package/agents/writer.md +184 -0
- package/commands/api-design.md +268 -0
- package/commands/architecture-decision.md +314 -0
- package/commands/ci-cd.md +270 -0
- package/commands/code-review.md +233 -0
- package/commands/compound.md +117 -0
- package/commands/database.md +263 -0
- package/commands/debug-detective.md +99 -0
- package/commands/docker.md +274 -0
- package/commands/documentation.md +276 -0
- package/commands/ecomode.md +51 -0
- package/commands/frontend.md +271 -0
- package/commands/git-master.md +90 -0
- package/commands/incident-response.md +292 -0
- package/commands/migrate.md +101 -0
- package/commands/performance.md +288 -0
- package/commands/refactor.md +105 -0
- package/commands/security-review.md +288 -0
- package/commands/tdd.md +183 -0
- package/commands/testing-strategy.md +265 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +295 -0
- package/dist/core/auto-compound-runner.d.ts +12 -0
- package/dist/core/auto-compound-runner.js +460 -0
- package/dist/core/config-hooks.d.ts +10 -0
- package/dist/core/config-hooks.js +112 -0
- package/dist/core/config-injector.d.ts +50 -0
- package/dist/core/config-injector.js +455 -0
- package/dist/core/doctor.d.ts +1 -0
- package/dist/core/doctor.js +163 -0
- package/dist/core/errors.d.ts +81 -0
- package/dist/core/errors.js +133 -0
- package/dist/core/global-config.d.ts +43 -0
- package/dist/core/global-config.js +25 -0
- package/dist/core/harness.d.ts +24 -0
- package/dist/core/harness.js +621 -0
- package/dist/core/init.d.ts +7 -0
- package/dist/core/init.js +37 -0
- package/dist/core/inspect-cli.d.ts +7 -0
- package/dist/core/inspect-cli.js +47 -0
- package/dist/core/legacy-detector.d.ts +33 -0
- package/dist/core/legacy-detector.js +66 -0
- package/dist/core/logger.d.ts +34 -0
- package/dist/core/logger.js +121 -0
- package/dist/core/mcp-config.d.ts +44 -0
- package/dist/core/mcp-config.js +177 -0
- package/dist/core/notepad.d.ts +31 -0
- package/dist/core/notepad.js +88 -0
- package/dist/core/paths.d.ts +85 -0
- package/dist/core/paths.js +101 -0
- package/dist/core/plugin-detector.d.ts +44 -0
- package/dist/core/plugin-detector.js +226 -0
- package/dist/core/runtime-detector.d.ts +8 -0
- package/dist/core/runtime-detector.js +49 -0
- package/dist/core/scope-resolver.d.ts +8 -0
- package/dist/core/scope-resolver.js +45 -0
- package/dist/core/session-logger.d.ts +6 -0
- package/dist/core/session-logger.js +111 -0
- package/dist/core/session-store.d.ts +28 -0
- package/dist/core/session-store.js +218 -0
- package/dist/core/settings-lock.d.ts +18 -0
- package/dist/core/settings-lock.js +125 -0
- package/dist/core/spawn.d.ts +3 -0
- package/dist/core/spawn.js +135 -0
- package/dist/core/types.d.ts +108 -0
- package/dist/core/types.js +1 -0
- package/dist/core/uninstall.d.ts +4 -0
- package/dist/core/uninstall.js +307 -0
- package/dist/core/v1-bootstrap.d.ts +26 -0
- package/dist/core/v1-bootstrap.js +155 -0
- package/dist/engine/compound-cli.d.ts +24 -0
- package/dist/engine/compound-cli.js +250 -0
- package/dist/engine/compound-extractor.d.ts +68 -0
- package/dist/engine/compound-extractor.js +860 -0
- package/dist/engine/compound-lifecycle.d.ts +32 -0
- package/dist/engine/compound-lifecycle.js +305 -0
- package/dist/engine/compound-loop.d.ts +32 -0
- package/dist/engine/compound-loop.js +511 -0
- package/dist/engine/match-eval-log.d.ts +139 -0
- package/dist/engine/match-eval-log.js +270 -0
- package/dist/engine/phrase-blocklist.d.ts +119 -0
- package/dist/engine/phrase-blocklist.js +208 -0
- package/dist/engine/skill-promoter.d.ts +20 -0
- package/dist/engine/skill-promoter.js +115 -0
- package/dist/engine/solution-format.d.ts +160 -0
- package/dist/engine/solution-format.js +432 -0
- package/dist/engine/solution-index.d.ts +13 -0
- package/dist/engine/solution-index.js +252 -0
- package/dist/engine/solution-matcher.d.ts +364 -0
- package/dist/engine/solution-matcher.js +656 -0
- package/dist/engine/solution-writer.d.ts +76 -0
- package/dist/engine/solution-writer.js +157 -0
- package/dist/engine/term-matcher.d.ts +81 -0
- package/dist/engine/term-matcher.js +268 -0
- package/dist/engine/term-normalizer.d.ts +116 -0
- package/dist/engine/term-normalizer.js +171 -0
- package/dist/fgx.d.ts +6 -0
- package/dist/fgx.js +42 -0
- package/dist/forge/cli.d.ts +11 -0
- package/dist/forge/cli.js +100 -0
- package/dist/forge/evidence-processor.d.ts +21 -0
- package/dist/forge/evidence-processor.js +87 -0
- package/dist/forge/mismatch-detector.d.ts +44 -0
- package/dist/forge/mismatch-detector.js +83 -0
- package/dist/forge/onboarding-cli.d.ts +6 -0
- package/dist/forge/onboarding-cli.js +89 -0
- package/dist/forge/onboarding.d.ts +25 -0
- package/dist/forge/onboarding.js +122 -0
- package/dist/hooks/compound-reflection.d.ts +45 -0
- package/dist/hooks/compound-reflection.js +82 -0
- package/dist/hooks/context-guard.d.ts +24 -0
- package/dist/hooks/context-guard.js +156 -0
- package/dist/hooks/dangerous-patterns.json +18 -0
- package/dist/hooks/db-guard.d.ts +17 -0
- package/dist/hooks/db-guard.js +105 -0
- package/dist/hooks/hook-config.d.ts +29 -0
- package/dist/hooks/hook-config.js +92 -0
- package/dist/hooks/hook-registry.d.ts +43 -0
- package/dist/hooks/hook-registry.js +31 -0
- package/dist/hooks/hooks-generator.d.ts +49 -0
- package/dist/hooks/hooks-generator.js +99 -0
- package/dist/hooks/intent-classifier.d.ts +12 -0
- package/dist/hooks/intent-classifier.js +62 -0
- package/dist/hooks/keyword-detector.d.ts +25 -0
- package/dist/hooks/keyword-detector.js +389 -0
- package/dist/hooks/notepad-injector.d.ts +18 -0
- package/dist/hooks/notepad-injector.js +51 -0
- package/dist/hooks/permission-handler.d.ts +14 -0
- package/dist/hooks/permission-handler.js +114 -0
- package/dist/hooks/post-tool-failure.d.ts +11 -0
- package/dist/hooks/post-tool-failure.js +118 -0
- package/dist/hooks/post-tool-handlers.d.ts +17 -0
- package/dist/hooks/post-tool-handlers.js +115 -0
- package/dist/hooks/post-tool-use.d.ts +29 -0
- package/dist/hooks/post-tool-use.js +151 -0
- package/dist/hooks/pre-compact.d.ts +10 -0
- package/dist/hooks/pre-compact.js +165 -0
- package/dist/hooks/pre-tool-use.d.ts +31 -0
- package/dist/hooks/pre-tool-use.js +325 -0
- package/dist/hooks/prompt-injection-filter.d.ts +56 -0
- package/dist/hooks/prompt-injection-filter.js +287 -0
- package/dist/hooks/rate-limiter.d.ts +21 -0
- package/dist/hooks/rate-limiter.js +86 -0
- package/dist/hooks/secret-filter.d.ts +14 -0
- package/dist/hooks/secret-filter.js +65 -0
- package/dist/hooks/session-recovery.d.ts +27 -0
- package/dist/hooks/session-recovery.js +406 -0
- package/dist/hooks/shared/atomic-write.d.ts +41 -0
- package/dist/hooks/shared/atomic-write.js +148 -0
- package/dist/hooks/shared/context-budget.d.ts +37 -0
- package/dist/hooks/shared/context-budget.js +45 -0
- package/dist/hooks/shared/file-lock.d.ts +56 -0
- package/dist/hooks/shared/file-lock.js +253 -0
- package/dist/hooks/shared/hook-response.d.ts +33 -0
- package/dist/hooks/shared/hook-response.js +62 -0
- package/dist/hooks/shared/injection-caps.d.ts +39 -0
- package/dist/hooks/shared/injection-caps.js +52 -0
- package/dist/hooks/shared/plugin-signal.d.ts +23 -0
- package/dist/hooks/shared/plugin-signal.js +104 -0
- package/dist/hooks/shared/read-stdin.d.ts +8 -0
- package/dist/hooks/shared/read-stdin.js +63 -0
- package/dist/hooks/shared/sanitize-id.d.ts +7 -0
- package/dist/hooks/shared/sanitize-id.js +9 -0
- package/dist/hooks/shared/sanitize.d.ts +7 -0
- package/dist/hooks/shared/sanitize.js +22 -0
- package/dist/hooks/skill-injector.d.ts +38 -0
- package/dist/hooks/skill-injector.js +285 -0
- package/dist/hooks/slop-detector.d.ts +18 -0
- package/dist/hooks/slop-detector.js +93 -0
- package/dist/hooks/solution-injector.d.ts +58 -0
- package/dist/hooks/solution-injector.js +436 -0
- package/dist/hooks/subagent-tracker.d.ts +10 -0
- package/dist/hooks/subagent-tracker.js +90 -0
- package/dist/i18n/index.d.ts +43 -0
- package/dist/i18n/index.js +224 -0
- package/dist/lib.d.ts +14 -0
- package/dist/lib.js +14 -0
- package/dist/mcp/server.d.ts +8 -0
- package/dist/mcp/server.js +40 -0
- package/dist/mcp/solution-reader.d.ts +90 -0
- package/dist/mcp/solution-reader.js +273 -0
- package/dist/mcp/tools.d.ts +16 -0
- package/dist/mcp/tools.js +302 -0
- package/dist/preset/facet-catalog.d.ts +17 -0
- package/dist/preset/facet-catalog.js +46 -0
- package/dist/preset/preset-manager.d.ts +31 -0
- package/dist/preset/preset-manager.js +111 -0
- package/dist/renderer/inspect-renderer.d.ts +11 -0
- package/dist/renderer/inspect-renderer.js +123 -0
- package/dist/renderer/rule-renderer.d.ts +18 -0
- package/dist/renderer/rule-renderer.js +159 -0
- package/dist/store/evidence-store.d.ts +23 -0
- package/dist/store/evidence-store.js +58 -0
- package/dist/store/profile-store.d.ts +12 -0
- package/dist/store/profile-store.js +53 -0
- package/dist/store/recommendation-store.d.ts +22 -0
- package/dist/store/recommendation-store.js +64 -0
- package/dist/store/rule-store.d.ts +22 -0
- package/dist/store/rule-store.js +62 -0
- package/dist/store/session-state-store.d.ts +11 -0
- package/dist/store/session-state-store.js +44 -0
- package/dist/store/types.d.ts +159 -0
- package/dist/store/types.js +7 -0
- package/hooks/hook-registry.json +21 -0
- package/hooks/hooks.json +185 -0
- package/package.json +89 -0
- package/plugin.json +20 -0
- package/scripts/postinstall.js +826 -0
- package/skills/api-design/SKILL.md +262 -0
- package/skills/architecture-decision/SKILL.md +309 -0
- package/skills/ci-cd/SKILL.md +264 -0
- package/skills/code-review/SKILL.md +228 -0
- package/skills/compound/SKILL.md +101 -0
- package/skills/database/SKILL.md +257 -0
- package/skills/debug-detective/SKILL.md +95 -0
- package/skills/docker/SKILL.md +268 -0
- package/skills/documentation/SKILL.md +270 -0
- package/skills/ecomode/SKILL.md +46 -0
- package/skills/frontend/SKILL.md +265 -0
- package/skills/git-master/SKILL.md +86 -0
- package/skills/incident-response/SKILL.md +286 -0
- package/skills/migrate/SKILL.md +96 -0
- package/skills/performance/SKILL.md +282 -0
- package/skills/refactor/SKILL.md +100 -0
- package/skills/security-review/SKILL.md +282 -0
- package/skills/tdd/SKILL.md +178 -0
- package/skills/testing-strategy/SKILL.md +260 -0
- package/starter-pack/solutions/starter-api-error-responses.md +37 -0
- package/starter-pack/solutions/starter-async-patterns.md +40 -0
- package/starter-pack/solutions/starter-caching-strategy.md +40 -0
- package/starter-pack/solutions/starter-code-review-checklist.md +39 -0
- package/starter-pack/solutions/starter-debugging-systematic.md +40 -0
- package/starter-pack/solutions/starter-dependency-injection.md +40 -0
- package/starter-pack/solutions/starter-error-handling-patterns.md +38 -0
- package/starter-pack/solutions/starter-git-atomic-commits.md +36 -0
- package/starter-pack/solutions/starter-input-validation.md +40 -0
- package/starter-pack/solutions/starter-n-plus-one-queries.md +37 -0
- package/starter-pack/solutions/starter-refactor-safely.md +38 -0
- package/starter-pack/solutions/starter-secret-management.md +37 -0
- package/starter-pack/solutions/starter-separation-of-concerns.md +36 -0
- package/starter-pack/solutions/starter-tdd-red-green-refactor.md +40 -0
- package/starter-pack/solutions/starter-typescript-strict-types.md +39 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: database
|
|
3
|
+
description: This skill should be used when the user asks to "database,db 설계,schema,migration,마이그레이션,스키마". Database schema design, migration planning, and optimization
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- forgen-managed -->
|
|
7
|
+
|
|
8
|
+
<Purpose>
|
|
9
|
+
데이터베이스 스키마 설계와 마이그레이션을 체계적으로 수행합니다.
|
|
10
|
+
요구사항 분석부터 정규화, 인덱싱, 마이그레이션 스크립트 작성,
|
|
11
|
+
롤백 계획까지 데이터 레이어의 전체 라이프사이클을 다룹니다.
|
|
12
|
+
</Purpose>
|
|
13
|
+
|
|
14
|
+
<Steps>
|
|
15
|
+
1. **요구사항 분석**: 데이터 요구사항을 수집하고 정리합니다
|
|
16
|
+
- 비즈니스 엔티티와 관계 식별
|
|
17
|
+
- 읽기/쓰기 비율 추정 (read-heavy vs write-heavy)
|
|
18
|
+
- 예상 데이터 볼륨 추정 (행 수, 증가율)
|
|
19
|
+
- 트랜잭션 요구사항 (ACID, eventual consistency)
|
|
20
|
+
- 보존 정책 (데이터 수명, 아카이빙 규칙)
|
|
21
|
+
- 규제 요구사항 (GDPR, 개인정보보호법)
|
|
22
|
+
|
|
23
|
+
2. **스키마 설계**: 정규화된 스키마를 설계합니다
|
|
24
|
+
- ERD(Entity-Relationship Diagram) 작성
|
|
25
|
+
- 정규화 수준 결정 (3NF 기본, 필요 시 역정규화)
|
|
26
|
+
- 데이터 타입 선택 (정확한 크기, nullable 여부)
|
|
27
|
+
- 기본 키 전략 (UUID vs auto-increment vs ULID)
|
|
28
|
+
- 외래 키 제약 조건 및 cascade 정책
|
|
29
|
+
- 소프트 삭제(soft delete) vs 하드 삭제 결정
|
|
30
|
+
- 감사(audit) 필드 포함 (created_at, updated_at, created_by)
|
|
31
|
+
- enum 값의 저장 전략 (DB enum vs string vs lookup table)
|
|
32
|
+
|
|
33
|
+
3. **인덱싱 전략**: 쿼리 성능을 위한 인덱스를 설계합니다
|
|
34
|
+
- 주요 쿼리 패턴 분석 (WHERE, JOIN, ORDER BY)
|
|
35
|
+
- 단일 컬럼 인덱스 vs 복합 인덱스 결정
|
|
36
|
+
- 커버링 인덱스 활용 가능성 검토
|
|
37
|
+
- 부분 인덱스(partial index) 적용 가능성
|
|
38
|
+
- 인덱스 카디널리티와 선택도 분석
|
|
39
|
+
- 인덱스의 쓰기 성능 영향 평가
|
|
40
|
+
- EXPLAIN ANALYZE로 쿼리 플랜 검증 계획
|
|
41
|
+
|
|
42
|
+
4. **마이그레이션 스크립트 작성**: 안전한 마이그레이션을 구현합니다
|
|
43
|
+
- 마이그레이션 도구 선택 (Prisma, Knex, TypeORM, raw SQL)
|
|
44
|
+
- UP 마이그레이션 작성 (스키마 변경 적용)
|
|
45
|
+
- DOWN 마이그레이션 작성 (변경 롤백)
|
|
46
|
+
- 데이터 마이그레이션 포함 (기존 데이터 변환)
|
|
47
|
+
- 대용량 테이블 변경 시 무중단 전략 (온라인 DDL)
|
|
48
|
+
- 마이그레이션 순서 의존성 확인
|
|
49
|
+
|
|
50
|
+
5. **롤백 계획**: 장애 시 복구 절차를 수립합니다
|
|
51
|
+
- 롤백 스크립트 테스트 (UP -> DOWN -> UP 사이클)
|
|
52
|
+
- 데이터 손실 없는 롤백 가능 여부 확인
|
|
53
|
+
- 백업/복원 절차 문서화
|
|
54
|
+
- 마이그레이션 실패 시 수동 복구 절차
|
|
55
|
+
- Point-in-Time Recovery 설정 확인
|
|
56
|
+
|
|
57
|
+
6. **성능 검증**: 스키마 변경의 성능 영향을 검증합니다
|
|
58
|
+
- 마이그레이션 실행 시간 추정
|
|
59
|
+
- 테이블 잠금(lock) 영향 범위 확인
|
|
60
|
+
- 인덱스 생성의 동시성 영향 (CONCURRENTLY 옵션)
|
|
61
|
+
- 스테이징 환경에서 실데이터 볼륨 테스트
|
|
62
|
+
</Steps>
|
|
63
|
+
|
|
64
|
+
## 에이전트 위임
|
|
65
|
+
|
|
66
|
+
`architect` 에이전트(Opus 모델)에 위임하여 데이터베이스 아키텍처를 설계합니다:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
Agent(
|
|
70
|
+
subagent_type="architect",
|
|
71
|
+
model="opus",
|
|
72
|
+
prompt="DATABASE DESIGN TASK
|
|
73
|
+
|
|
74
|
+
데이터베이스 스키마를 설계하고 마이그레이션 계획을 수립하세요.
|
|
75
|
+
|
|
76
|
+
Domain: [도메인/서비스 설명]
|
|
77
|
+
Database: [PostgreSQL / MySQL / MongoDB / etc.]
|
|
78
|
+
|
|
79
|
+
Design Checklist:
|
|
80
|
+
1. ERD 및 엔티티 관계 설계
|
|
81
|
+
2. 정규화 및 데이터 타입 결정
|
|
82
|
+
3. 인덱싱 전략 수립
|
|
83
|
+
4. 마이그레이션 스크립트 (UP/DOWN)
|
|
84
|
+
5. 롤백 계획 및 백업 절차
|
|
85
|
+
6. 성능 영향 분석
|
|
86
|
+
|
|
87
|
+
Output: 데이터베이스 설계 문서:
|
|
88
|
+
- ERD (텍스트 기반)
|
|
89
|
+
- 테이블/컬렉션 정의
|
|
90
|
+
- 인덱스 목록
|
|
91
|
+
- 마이그레이션 스크립트
|
|
92
|
+
- 롤백 절차"
|
|
93
|
+
)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## External Consultation (Optional)
|
|
97
|
+
|
|
98
|
+
architect 에이전트는 교차 검증을 위해 Claude Task 에이전트에 자문할 수 있습니다.
|
|
99
|
+
|
|
100
|
+
### Protocol
|
|
101
|
+
1. **자체 스키마 설계를 먼저 완료** -- 독립적으로 설계 수행
|
|
102
|
+
2. **검증을 위한 자문** -- Claude Task 에이전트를 통해 설계 교차 확인
|
|
103
|
+
3. **비판적 평가** -- 외부 제안을 맹목적으로 수용하지 않음
|
|
104
|
+
4. **우아한 폴백** -- 위임이 불가능할 경우 절대 차단하지 않음
|
|
105
|
+
|
|
106
|
+
### 자문이 필요한 경우
|
|
107
|
+
- 대규모 스키마 마이그레이션 (10+ 테이블 변경)
|
|
108
|
+
- 성능이 중요한 인덱싱 전략
|
|
109
|
+
- 프로덕션 환경의 무중단 마이그레이션
|
|
110
|
+
- 데이터 일관성이 중요한 트랜잭션 설계
|
|
111
|
+
|
|
112
|
+
### 자문을 생략하는 경우
|
|
113
|
+
- 단순 테이블 추가/수정
|
|
114
|
+
- 잘 알려진 스키마 패턴 적용
|
|
115
|
+
- 개발 환경의 마이그레이션
|
|
116
|
+
- 소규모 인덱스 추가
|
|
117
|
+
|
|
118
|
+
## 데이터베이스 설계 체크리스트
|
|
119
|
+
|
|
120
|
+
### 스키마 설계 (6개)
|
|
121
|
+
- [ ] 모든 테이블에 적절한 기본 키 존재
|
|
122
|
+
- [ ] 외래 키 제약 조건이 설정됨
|
|
123
|
+
- [ ] 데이터 타입이 정확한 크기로 선택됨
|
|
124
|
+
- [ ] nullable 필드가 명시적으로 결정됨
|
|
125
|
+
- [ ] 감사 필드 포함 (created_at, updated_at)
|
|
126
|
+
- [ ] 소프트 삭제 전략이 결정됨
|
|
127
|
+
|
|
128
|
+
### 인덱싱 (4개)
|
|
129
|
+
- [ ] 주요 쿼리 패턴에 인덱스 적용됨
|
|
130
|
+
- [ ] 복합 인덱스의 컬럼 순서가 최적화됨
|
|
131
|
+
- [ ] 과도한 인덱스로 인한 쓰기 성능 저하 없음
|
|
132
|
+
- [ ] 유니크 제약 조건이 비즈니스 규칙과 일치
|
|
133
|
+
|
|
134
|
+
### 마이그레이션 (4개)
|
|
135
|
+
- [ ] UP/DOWN 마이그레이션 모두 작성됨
|
|
136
|
+
- [ ] 데이터 마이그레이션이 포함됨 (필요 시)
|
|
137
|
+
- [ ] 롤백 테스트 완료
|
|
138
|
+
- [ ] 마이그레이션 실행 시간이 허용 범위 내
|
|
139
|
+
|
|
140
|
+
### 보안 (4개)
|
|
141
|
+
- [ ] 민감 데이터가 암호화됨
|
|
142
|
+
- [ ] 접근 권한이 최소 권한 원칙으로 설정됨
|
|
143
|
+
- [ ] PII 데이터의 보존/삭제 정책이 정의됨
|
|
144
|
+
- [ ] 감사 로그가 중요 변경에 대해 기록됨
|
|
145
|
+
|
|
146
|
+
<Output>
|
|
147
|
+
```
|
|
148
|
+
DATABASE DESIGN DOCUMENT / 데이터베이스 설계 문서
|
|
149
|
+
==================================================
|
|
150
|
+
|
|
151
|
+
Service: [서비스명]
|
|
152
|
+
Database: [PostgreSQL / MySQL / MongoDB]
|
|
153
|
+
Migration Tool: [Prisma / Knex / TypeORM]
|
|
154
|
+
|
|
155
|
+
ERD / 엔티티 관계
|
|
156
|
+
-------------------
|
|
157
|
+
[User] 1---N [Order] N---M [Product]
|
|
158
|
+
| |
|
|
159
|
+
1---N [Address] 1---N [Review]
|
|
160
|
+
|
|
161
|
+
TABLES / 테이블 정의
|
|
162
|
+
---------------------
|
|
163
|
+
Table: users
|
|
164
|
+
id UUID PK, DEFAULT gen_random_uuid()
|
|
165
|
+
email VARCHAR(255) NOT NULL, UNIQUE
|
|
166
|
+
name VARCHAR(100) NOT NULL
|
|
167
|
+
password VARCHAR(255) NOT NULL
|
|
168
|
+
role VARCHAR(20) NOT NULL, DEFAULT 'user'
|
|
169
|
+
created_at TIMESTAMPTZ NOT NULL, DEFAULT NOW()
|
|
170
|
+
updated_at TIMESTAMPTZ NOT NULL, DEFAULT NOW()
|
|
171
|
+
deleted_at TIMESTAMPTZ NULL
|
|
172
|
+
|
|
173
|
+
INDEXES / 인덱스
|
|
174
|
+
-----------------
|
|
175
|
+
| Table | Name | Columns | Type | Reason |
|
|
176
|
+
|--------|---------------------|----------------|--------|---------------------|
|
|
177
|
+
| users | idx_users_email | email | UNIQUE | 로그인 조회 |
|
|
178
|
+
| orders | idx_orders_user_date| user_id, date | BTREE | 사용자별 주문 조회 |
|
|
179
|
+
|
|
180
|
+
MIGRATION / 마이그레이션
|
|
181
|
+
-------------------------
|
|
182
|
+
File: 20260402_001_create_users.sql
|
|
183
|
+
|
|
184
|
+
-- UP
|
|
185
|
+
CREATE TABLE users ( ... );
|
|
186
|
+
CREATE INDEX idx_users_email ON users(email);
|
|
187
|
+
|
|
188
|
+
-- DOWN
|
|
189
|
+
DROP TABLE IF EXISTS users;
|
|
190
|
+
|
|
191
|
+
ROLLBACK PLAN / 롤백 계획
|
|
192
|
+
---------------------------
|
|
193
|
+
1. 마이그레이션 실패 시: DOWN 스크립트 실행
|
|
194
|
+
2. 데이터 손실 위험 시: pg_dump 백업에서 복원
|
|
195
|
+
3. 긴급 시: Point-in-Time Recovery 사용
|
|
196
|
+
|
|
197
|
+
PERFORMANCE IMPACT / 성능 영향
|
|
198
|
+
-------------------------------
|
|
199
|
+
- 마이그레이션 예상 시간: [N분]
|
|
200
|
+
- 테이블 잠금: [있음/없음]
|
|
201
|
+
- 인덱스 생성: [CONCURRENTLY 사용 여부]
|
|
202
|
+
```
|
|
203
|
+
</Output>
|
|
204
|
+
|
|
205
|
+
<Policy>
|
|
206
|
+
- 마이그레이션은 반드시 UP/DOWN 양방향으로 작성합니다
|
|
207
|
+
- 프로덕션 마이그레이션 전 스테이징에서 실행 테스트 필수
|
|
208
|
+
- 데이터 손실 가능성이 있는 변경은 백업 확인 후 진행
|
|
209
|
+
- 인덱스 변경은 EXPLAIN ANALYZE로 효과를 검증합니다
|
|
210
|
+
- 대용량 테이블의 ALTER는 무중단 전략을 사용합니다
|
|
211
|
+
- 롤백 불가능한 마이그레이션은 명시적으로 경고합니다
|
|
212
|
+
</Policy>
|
|
213
|
+
|
|
214
|
+
## 다른 스킬과의 연동
|
|
215
|
+
|
|
216
|
+
**API 설계 연동:**
|
|
217
|
+
```
|
|
218
|
+
/forgen:api-design 데이터 모델 기반 REST API
|
|
219
|
+
```
|
|
220
|
+
데이터베이스 스키마와 일관된 API 설계
|
|
221
|
+
|
|
222
|
+
**보안 리뷰 연동:**
|
|
223
|
+
```
|
|
224
|
+
/forgen:security-review 마이그레이션 스크립트
|
|
225
|
+
```
|
|
226
|
+
마이그레이션의 보안 영향 점검
|
|
227
|
+
|
|
228
|
+
**성능 최적화 연동:**
|
|
229
|
+
```
|
|
230
|
+
/forgen:performance 쿼리 성능 분석
|
|
231
|
+
```
|
|
232
|
+
인덱스 효과 및 쿼리 최적화
|
|
233
|
+
|
|
234
|
+
## Best Practices
|
|
235
|
+
|
|
236
|
+
- **점진적 마이그레이션** -- 대규모 변경을 작은 단계로 분할
|
|
237
|
+
- **데이터 먼저 백업** -- 프로덕션 변경 전 반드시 백업
|
|
238
|
+
- **테스트 환경 검증** -- 실 데이터 볼륨으로 성능 확인
|
|
239
|
+
- **문서화** -- 스키마 변경 이유와 영향을 기록
|
|
240
|
+
- **무중단 우선** -- 서비스 중단 없는 마이그레이션 전략
|
|
241
|
+
|
|
242
|
+
<Arguments>
|
|
243
|
+
## 사용법
|
|
244
|
+
`/forgen:database {설계/마이그레이션 대상}`
|
|
245
|
+
|
|
246
|
+
### 예시
|
|
247
|
+
- `/forgen:database 사용자 관리 시스템 스키마 설계`
|
|
248
|
+
- `/forgen:database orders 테이블에 discount 컬럼 추가 마이그레이션`
|
|
249
|
+
- `/forgen:database 기존 스키마의 인덱싱 최적화`
|
|
250
|
+
- `/forgen:database PostgreSQL에서 MongoDB로 마이그레이션 계획`
|
|
251
|
+
|
|
252
|
+
### 인자
|
|
253
|
+
- 설계할 도메인, 변경할 스키마, 마이그레이션 목적 등을 설명
|
|
254
|
+
- 인자 없으면 프로젝트의 현재 스키마를 분석
|
|
255
|
+
</Arguments>
|
|
256
|
+
|
|
257
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: debug-detective
|
|
3
|
+
description: This skill should be used when the user asks to "debug-detective,디버그탐정,체계적디버깅". Systematic debugging with reproduce-isolate-fix-verify loop
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<Purpose>
|
|
7
|
+
재현→격리→수정→검증의 4단계 루프를 통해 버그를 체계적으로 추적합니다.
|
|
8
|
+
에러 분류, git bisect, 최소 재현 사례 구성으로 근본 원인을 신속히 파악합니다.
|
|
9
|
+
</Purpose>
|
|
10
|
+
|
|
11
|
+
<Steps>
|
|
12
|
+
1. **재현 (Reproduce)**
|
|
13
|
+
- 버그 재현 조건을 최대한 구체적으로 문서화
|
|
14
|
+
```
|
|
15
|
+
환경: Node 20.x, macOS 14.3
|
|
16
|
+
입력값: { userId: null, action: "delete" }
|
|
17
|
+
예상 동작: 422 Validation Error
|
|
18
|
+
실제 동작: 500 Internal Server Error
|
|
19
|
+
재현율: 100% / 간헐적 (~30%)
|
|
20
|
+
```
|
|
21
|
+
- 간헐적 버그: 로그 레벨 높이고 반복 실행으로 패턴 포착
|
|
22
|
+
- 환경 차이 확인: 로컬 vs CI vs 프로덕션
|
|
23
|
+
|
|
24
|
+
2. **격리 (Isolate)**
|
|
25
|
+
- **에러 분류**:
|
|
26
|
+
- **런타임 에러**: TypeError, ReferenceError → 스택 트레이스 추적
|
|
27
|
+
- **타입 에러**: TS 컴파일 에러 → 타입 정의 불일치 확인
|
|
28
|
+
- **논리 에러**: 잘못된 계산/조건 → 중간값 로깅
|
|
29
|
+
- **비동기 에러**: Promise rejection, race condition → async/await 추적
|
|
30
|
+
- **Bisect 전략**:
|
|
31
|
+
```bash
|
|
32
|
+
# git bisect로 버그 도입 커밋 이진 탐색
|
|
33
|
+
git bisect start
|
|
34
|
+
git bisect bad # 현재 커밋은 버그 있음
|
|
35
|
+
git bisect good <마지막_정상_sha> # 정상 커밋 지정
|
|
36
|
+
# Git이 자동으로 중간 커밋 체크아웃
|
|
37
|
+
# 테스트 후 good/bad 판정 반복
|
|
38
|
+
git bisect run npm test # 자동화 가능
|
|
39
|
+
git bisect reset # 완료 후 원상복구
|
|
40
|
+
```
|
|
41
|
+
- **최소 재현 사례 구성**: 관련 없는 코드를 제거해 가장 단순한 형태로 축소
|
|
42
|
+
|
|
43
|
+
3. **로그 분석 패턴**
|
|
44
|
+
```typescript
|
|
45
|
+
// 구조화 로그로 맥락 추가
|
|
46
|
+
logger.error('결제 처리 실패', {
|
|
47
|
+
userId, orderId, amount,
|
|
48
|
+
stack: err.stack,
|
|
49
|
+
timestamp: new Date().toISOString(),
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// 조건부 디버그 로그 (프로덕션 영향 최소화)
|
|
53
|
+
if (process.env.DEBUG_PAYMENT) {
|
|
54
|
+
console.log('[DEBUG]', JSON.stringify({ state, payload }, null, 2));
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
- 타임스탬프 정렬 → 이벤트 순서 파악
|
|
58
|
+
- 상관관계 ID(correlation ID)로 분산 로그 추적
|
|
59
|
+
|
|
60
|
+
4. **수정 (Fix)**
|
|
61
|
+
- 근본 원인(root cause)을 먼저 명시
|
|
62
|
+
- 증상만 치료하는 패치 금지 → 원인 제거
|
|
63
|
+
- 수정 범위를 최소화 (side effect 방지)
|
|
64
|
+
- 수정 전후 코드 diff를 커밋 메시지에 설명
|
|
65
|
+
|
|
66
|
+
5. **검증 (Verify)**
|
|
67
|
+
- 버그 재현 시나리오를 회귀 테스트로 추가
|
|
68
|
+
- 원래 문제가 해결됐는지 확인
|
|
69
|
+
- 관련 기능에 새 버그가 생기지 않았는지 확인
|
|
70
|
+
- 스테이징 → 프로덕션 순서로 검증
|
|
71
|
+
</Steps>
|
|
72
|
+
|
|
73
|
+
<Policy>
|
|
74
|
+
- 추측 기반 수정 금지 — 반드시 재현 먼저
|
|
75
|
+
- 로그 추가 시 민감 정보(비밀번호, 토큰) 절대 출력 금지
|
|
76
|
+
- 수정 후 해당 버그의 회귀 테스트 1개 이상 추가
|
|
77
|
+
- 간헐적 버그는 최소 10회 연속 통과 후 수정 완료 판정
|
|
78
|
+
</Policy>
|
|
79
|
+
|
|
80
|
+
<Arguments>
|
|
81
|
+
## 사용법
|
|
82
|
+
`/forgen:debug-detective {버그 설명}`
|
|
83
|
+
|
|
84
|
+
### 예시
|
|
85
|
+
- `/forgen:debug-detective 로그인 후 가끔 401 에러가 발생함 (재현율 20%)`
|
|
86
|
+
- `/forgen:debug-detective 최근 배포 후 결제 API 응답 시간이 3배 증가`
|
|
87
|
+
- `/forgen:debug-detective TypeScript 컴파일은 되는데 런타임에서 undefined 에러`
|
|
88
|
+
|
|
89
|
+
### 인자
|
|
90
|
+
- 버그 증상과 재현 조건
|
|
91
|
+
- 발생 환경 (로컬/스테이징/프로덕션)
|
|
92
|
+
- 관련 에러 메시지나 스택 트레이스
|
|
93
|
+
</Arguments>
|
|
94
|
+
|
|
95
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docker
|
|
3
|
+
description: This skill should be used when the user asks to "docker,container,컨테이너,dockerfile,도커,docker-compose". Containerization with Docker, Dockerfile optimization, and compose configuration
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- forgen-managed -->
|
|
7
|
+
|
|
8
|
+
<Purpose>
|
|
9
|
+
Docker를 활용한 컨테이너화를 체계적으로 수행합니다.
|
|
10
|
+
의존성 분석, Dockerfile 작성, 레이어 최적화,
|
|
11
|
+
Docker Compose 구성, 헬스 체크까지 컨테이너 라이프사이클 전체를 다룹니다.
|
|
12
|
+
</Purpose>
|
|
13
|
+
|
|
14
|
+
<Steps>
|
|
15
|
+
1. **의존성 분석**: 애플리케이션의 런타임 요구사항을 파악합니다
|
|
16
|
+
- 런타임 환경 (Node.js, Python, Go 등)
|
|
17
|
+
- 시스템 의존성 (네이티브 바이너리, 라이브러리)
|
|
18
|
+
- 환경 변수 목록 및 기본값
|
|
19
|
+
- 포트 매핑 (애플리케이션 포트, 디버그 포트)
|
|
20
|
+
- 볼륨 마운트 필요 사항 (데이터 영속성, 설정 파일)
|
|
21
|
+
- 외부 서비스 의존성 (DB, Redis, 메시지 큐)
|
|
22
|
+
|
|
23
|
+
2. **Dockerfile 작성**: 최적화된 Dockerfile을 구성합니다
|
|
24
|
+
- 베이스 이미지 선택 (alpine vs slim vs distroless)
|
|
25
|
+
- 멀티스테이지 빌드 적용 (빌드 스테이지 / 런타임 스테이지)
|
|
26
|
+
- 레이어 캐싱 최적화 (변경 빈도 낮은 것부터 순서)
|
|
27
|
+
* 시스템 의존성 설치
|
|
28
|
+
* package.json / lockfile 복사 + npm install
|
|
29
|
+
* 소스 코드 복사 + 빌드
|
|
30
|
+
- .dockerignore 설정 (node_modules, .git, 테스트 파일)
|
|
31
|
+
- 비루트 사용자 설정 (보안)
|
|
32
|
+
- 시그널 핸들링 (SIGTERM graceful shutdown)
|
|
33
|
+
- HEALTHCHECK 명령 설정
|
|
34
|
+
|
|
35
|
+
3. **이미지 최적화**: 이미지 크기와 보안을 개선합니다
|
|
36
|
+
- 레이어 수 최소화 (RUN 명령 결합)
|
|
37
|
+
- 불필요한 파일 제거 (빌드 도구, 캐시, 문서)
|
|
38
|
+
- 프로덕션 의존성만 설치 (--omit=dev)
|
|
39
|
+
- 이미지 크기 측정 및 목표 설정
|
|
40
|
+
- 보안 스캔 (Trivy, Docker Scout)
|
|
41
|
+
- 이미지 태깅 전략 (semver, git SHA, latest)
|
|
42
|
+
|
|
43
|
+
4. **Docker Compose 구성**: 멀티 컨테이너 환경을 정의합니다
|
|
44
|
+
- 서비스 정의 (app, db, cache, proxy)
|
|
45
|
+
- 네트워크 구성 (서비스 간 통신)
|
|
46
|
+
- 볼륨 정의 (데이터 영속성)
|
|
47
|
+
- 환경 변수 관리 (.env 파일, 인라인)
|
|
48
|
+
- 의존성 순서 (depends_on + healthcheck)
|
|
49
|
+
- 개발/프로덕션 오버라이드 분리
|
|
50
|
+
- 리소스 제한 설정 (CPU, 메모리)
|
|
51
|
+
|
|
52
|
+
5. **헬스 체크 및 모니터링**: 컨테이너 상태를 관리합니다
|
|
53
|
+
- HEALTHCHECK 엔드포인트 구현 (/health, /ready)
|
|
54
|
+
- Liveness probe vs Readiness probe 구분
|
|
55
|
+
- 로그 수집 구성 (stdout/stderr → 로그 시스템)
|
|
56
|
+
- 메트릭 노출 (Prometheus 엔드포인트)
|
|
57
|
+
- Graceful shutdown 구현 (SIGTERM 처리)
|
|
58
|
+
- 재시작 정책 설정 (restart: unless-stopped)
|
|
59
|
+
</Steps>
|
|
60
|
+
|
|
61
|
+
## 에이전트 위임
|
|
62
|
+
|
|
63
|
+
`executor` 에이전트(Sonnet 모델)에 위임하여 Docker 구성을 구현합니다:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Agent(
|
|
67
|
+
subagent_type="executor",
|
|
68
|
+
model="sonnet",
|
|
69
|
+
prompt="DOCKER TASK
|
|
70
|
+
|
|
71
|
+
Docker 컨테이너화를 구현하세요.
|
|
72
|
+
|
|
73
|
+
Application: [애플리케이션 설명]
|
|
74
|
+
Runtime: [Node.js / Python / Go / etc.]
|
|
75
|
+
Services: [필요한 외부 서비스 목록]
|
|
76
|
+
|
|
77
|
+
Docker Checklist:
|
|
78
|
+
1. Dockerfile 작성 (멀티스테이지, 최적화)
|
|
79
|
+
2. .dockerignore 설정
|
|
80
|
+
3. Docker Compose 구성 (개발/프로덕션)
|
|
81
|
+
4. 헬스 체크 설정
|
|
82
|
+
5. 보안 설정 (비루트 사용자, 이미지 스캔)
|
|
83
|
+
6. 볼륨 및 네트워크 구성
|
|
84
|
+
|
|
85
|
+
Output: Docker 구성 파일 및 문서:
|
|
86
|
+
- Dockerfile
|
|
87
|
+
- .dockerignore
|
|
88
|
+
- docker-compose.yml (dev/prod)
|
|
89
|
+
- 이미지 크기 리포트
|
|
90
|
+
- 실행 명령 가이드"
|
|
91
|
+
)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## External Consultation (Optional)
|
|
95
|
+
|
|
96
|
+
executor 에이전트는 교차 검증을 위해 Claude Task 에이전트에 자문할 수 있습니다.
|
|
97
|
+
|
|
98
|
+
### Protocol
|
|
99
|
+
1. **자체 Docker 구성을 먼저 완료** -- 독립적으로 구현
|
|
100
|
+
2. **검증을 위한 자문** -- Claude Task 에이전트를 통해 구성 교차 확인
|
|
101
|
+
3. **비판적 평가** -- 외부 제안을 맹목적으로 수용하지 않음
|
|
102
|
+
4. **우아한 폴백** -- 위임이 불가능할 경우 절대 차단하지 않음
|
|
103
|
+
|
|
104
|
+
### 자문이 필요한 경우
|
|
105
|
+
- 복잡한 멀티스테이지 빌드
|
|
106
|
+
- 프로덕션 수준의 보안 강화
|
|
107
|
+
- 오케스트레이션 (Kubernetes 연동)
|
|
108
|
+
- 네이티브 의존성이 있는 이미지 최적화
|
|
109
|
+
|
|
110
|
+
### 자문을 생략하는 경우
|
|
111
|
+
- 단순 Node.js/Python 컨테이너화
|
|
112
|
+
- 개발 환경용 Docker Compose
|
|
113
|
+
- 잘 알려진 이미지 패턴
|
|
114
|
+
- 기존 Dockerfile의 경미한 수정
|
|
115
|
+
|
|
116
|
+
## Docker 체크리스트
|
|
117
|
+
|
|
118
|
+
### Dockerfile (6개)
|
|
119
|
+
- [ ] 멀티스테이지 빌드 적용
|
|
120
|
+
- [ ] 베이스 이미지에 고정 태그 사용 (latest 금지)
|
|
121
|
+
- [ ] 비루트 사용자로 실행
|
|
122
|
+
- [ ] .dockerignore가 적절히 설정됨
|
|
123
|
+
- [ ] 레이어 캐싱이 최적화됨
|
|
124
|
+
- [ ] HEALTHCHECK가 설정됨
|
|
125
|
+
|
|
126
|
+
### 보안 (4개)
|
|
127
|
+
- [ ] 이미지 취약점 스캔 완료
|
|
128
|
+
- [ ] 최소 권한 원칙 적용 (비루트, 읽기 전용 파일시스템)
|
|
129
|
+
- [ ] 시크릿이 이미지에 포함되지 않음
|
|
130
|
+
- [ ] 불필요한 도구/패키지가 제거됨
|
|
131
|
+
|
|
132
|
+
### 운영 (4개)
|
|
133
|
+
- [ ] Graceful shutdown이 구현됨 (SIGTERM)
|
|
134
|
+
- [ ] 로그가 stdout/stderr로 출력됨
|
|
135
|
+
- [ ] 리소스 제한이 설정됨
|
|
136
|
+
- [ ] 재시작 정책이 설정됨
|
|
137
|
+
|
|
138
|
+
### Compose (4개)
|
|
139
|
+
- [ ] 서비스 간 의존성이 healthcheck 기반으로 설정됨
|
|
140
|
+
- [ ] 개발/프로덕션 오버라이드가 분리됨
|
|
141
|
+
- [ ] 볼륨이 데이터 영속성에 적절히 사용됨
|
|
142
|
+
- [ ] 네트워크가 서비스별로 격리됨
|
|
143
|
+
|
|
144
|
+
## 이미지 크기 기준
|
|
145
|
+
|
|
146
|
+
| 런타임 | 목표 크기 | 베이스 이미지 |
|
|
147
|
+
|--------|-----------|--------------|
|
|
148
|
+
| Node.js | < 150MB | node:20-alpine |
|
|
149
|
+
| Python | < 200MB | python:3.12-slim |
|
|
150
|
+
| Go | < 30MB | gcr.io/distroless/static |
|
|
151
|
+
| Rust | < 30MB | debian:bookworm-slim (빌드) + scratch (런타임) |
|
|
152
|
+
|
|
153
|
+
<Output>
|
|
154
|
+
```
|
|
155
|
+
DOCKER CONFIGURATION / Docker 구성 문서
|
|
156
|
+
=========================================
|
|
157
|
+
|
|
158
|
+
Application: [애플리케이션명]
|
|
159
|
+
Runtime: [Node.js 20]
|
|
160
|
+
Image Size: [최종 이미지 크기]
|
|
161
|
+
|
|
162
|
+
DOCKERFILE / Dockerfile
|
|
163
|
+
-------------------------
|
|
164
|
+
# Build stage
|
|
165
|
+
FROM node:20-alpine AS builder
|
|
166
|
+
WORKDIR /app
|
|
167
|
+
COPY package*.json ./
|
|
168
|
+
RUN npm ci --omit=dev
|
|
169
|
+
COPY . .
|
|
170
|
+
RUN npm run build
|
|
171
|
+
|
|
172
|
+
# Runtime stage
|
|
173
|
+
FROM node:20-alpine AS runtime
|
|
174
|
+
RUN addgroup -g 1001 -S appgroup && \
|
|
175
|
+
adduser -S appuser -u 1001 -G appgroup
|
|
176
|
+
WORKDIR /app
|
|
177
|
+
COPY --from=builder --chown=appuser:appgroup /app/dist ./dist
|
|
178
|
+
COPY --from=builder --chown=appuser:appgroup /app/node_modules ./node_modules
|
|
179
|
+
USER appuser
|
|
180
|
+
EXPOSE 3000
|
|
181
|
+
HEALTHCHECK --interval=30s --timeout=3s \
|
|
182
|
+
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
|
|
183
|
+
CMD ["node", "dist/index.js"]
|
|
184
|
+
|
|
185
|
+
DOCKER COMPOSE / docker-compose.yml
|
|
186
|
+
--------------------------------------
|
|
187
|
+
services:
|
|
188
|
+
app:
|
|
189
|
+
build: .
|
|
190
|
+
ports: ["3000:3000"]
|
|
191
|
+
depends_on:
|
|
192
|
+
db: { condition: service_healthy }
|
|
193
|
+
environment:
|
|
194
|
+
DATABASE_URL: postgres://user:pass@db:5432/app
|
|
195
|
+
db:
|
|
196
|
+
image: postgres:16-alpine
|
|
197
|
+
volumes: ["pgdata:/var/lib/postgresql/data"]
|
|
198
|
+
healthcheck:
|
|
199
|
+
test: ["CMD-SHELL", "pg_isready"]
|
|
200
|
+
|
|
201
|
+
IMAGE ANALYSIS / 이미지 분석
|
|
202
|
+
------------------------------
|
|
203
|
+
Total Size: 142MB
|
|
204
|
+
Layers: 8
|
|
205
|
+
Base Image: node:20-alpine (45MB)
|
|
206
|
+
Dependencies: 85MB
|
|
207
|
+
Application: 12MB
|
|
208
|
+
|
|
209
|
+
SECURITY SCAN / 보안 스캔
|
|
210
|
+
---------------------------
|
|
211
|
+
Vulnerabilities: 0 CRITICAL, 0 HIGH, 2 MEDIUM
|
|
212
|
+
Recommendation: [조치 사항]
|
|
213
|
+
```
|
|
214
|
+
</Output>
|
|
215
|
+
|
|
216
|
+
<Policy>
|
|
217
|
+
- 베이스 이미지에 항상 고정 태그를 사용합니다 (latest 금지)
|
|
218
|
+
- 프로덕션 이미지에서 반드시 비루트 사용자로 실행합니다
|
|
219
|
+
- 시크릿은 절대 이미지에 포함하지 않습니다 (빌드 시에도)
|
|
220
|
+
- 이미지 크기를 정기적으로 모니터링합니다
|
|
221
|
+
- 보안 스캔을 CI/CD에 통합하여 취약한 이미지 배포를 차단합니다
|
|
222
|
+
- Graceful shutdown을 반드시 구현하여 데이터 손실을 방지합니다
|
|
223
|
+
</Policy>
|
|
224
|
+
|
|
225
|
+
## 다른 스킬과의 연동
|
|
226
|
+
|
|
227
|
+
**CI/CD 연동:**
|
|
228
|
+
```
|
|
229
|
+
/forgen:ci-cd Docker 이미지 빌드 및 푸시 파이프라인
|
|
230
|
+
```
|
|
231
|
+
CI에서 Docker 이미지 자동 빌드/배포
|
|
232
|
+
|
|
233
|
+
**보안 리뷰 연동:**
|
|
234
|
+
```
|
|
235
|
+
/forgen:security-review Dockerfile 및 이미지
|
|
236
|
+
```
|
|
237
|
+
Docker 구성의 보안 취약점 점검
|
|
238
|
+
|
|
239
|
+
**성능 연동:**
|
|
240
|
+
```
|
|
241
|
+
/forgen:performance 컨테이너 리소스 사용량 분석
|
|
242
|
+
```
|
|
243
|
+
컨테이너의 리소스 최적화
|
|
244
|
+
|
|
245
|
+
## Best Practices
|
|
246
|
+
|
|
247
|
+
- **작은 이미지** -- 불필요한 것을 빼서 크기를 줄임
|
|
248
|
+
- **멀티스테이지** -- 빌드 도구를 런타임에 포함하지 않음
|
|
249
|
+
- **캐시 활용** -- 레이어 순서를 변경 빈도 기준으로 정렬
|
|
250
|
+
- **보안 우선** -- 비루트, 최소 권한, 시크릿 분리
|
|
251
|
+
- **헬스 체크** -- 컨테이너 상태를 자동으로 모니터링
|
|
252
|
+
|
|
253
|
+
<Arguments>
|
|
254
|
+
## 사용법
|
|
255
|
+
`/forgen:docker {컨테이너화 대상}`
|
|
256
|
+
|
|
257
|
+
### 예시
|
|
258
|
+
- `/forgen:docker Node.js API 서버 컨테이너화`
|
|
259
|
+
- `/forgen:docker 기존 Dockerfile 최적화`
|
|
260
|
+
- `/forgen:docker 개발 환경 Docker Compose 구성`
|
|
261
|
+
- `/forgen:docker 프로덕션 배포용 이미지 보안 강화`
|
|
262
|
+
|
|
263
|
+
### 인자
|
|
264
|
+
- 컨테이너화할 애플리케이션, 최적화 목표 등을 설명
|
|
265
|
+
- 인자 없으면 프로젝트를 분석하여 적절한 Docker 구성을 제안
|
|
266
|
+
</Arguments>
|
|
267
|
+
|
|
268
|
+
$ARGUMENTS
|