aiwf 0.1.0 → 0.3.1

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.
Files changed (163) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/CLAUDE.md +19 -0
  3. package/LICENSE +1 -1
  4. package/README.ko.md +90 -62
  5. package/README.md +109 -62
  6. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/01_PROJECT_DOCS/ARCHITECTURE.md +1 -1
  7. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/02_REQUIREMENTS/M01_Backend_Setup/M01_milestone_meta.md +5 -1
  8. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/02_REQUIREMENTS/M01_Backend_Setup/PRD_AMEND_01_Auth_Flow_Update.md +5 -1
  9. package/claude-code/{simone/.simone/03_SPRINTS/CLAUDE.MD → aiwf/en/.aiwf/03_SPRINTS/CLAUDE.md} +28 -7
  10. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/03_SPRINTS/S01_M01_Initial_API/S01_sprint_meta.md +8 -1
  11. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/03_SPRINTS/S01_M01_Initial_API/T01_S01_Setup_Project_Structure.md +5 -1
  12. package/claude-code/aiwf/en/.aiwf/04_GENERAL_TASKS/CLAUDE.md +96 -0
  13. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/04_GENERAL_TASKS/T002_API_Rate_Limiting.md +7 -2
  14. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/04_GENERAL_TASKS/TX001_Refactor_Logging_Module.md +7 -2
  15. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/05_ARCHITECTURAL_DECISIONS/ADR001_Chosen_Database_System.md +7 -1
  16. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/05_ARCHITECTURAL_DECISIONS/ADR002_API_Authentication_Method.md +7 -1
  17. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-needs-focus.md +139 -0
  18. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-test-alignment.md +155 -0
  19. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-13-00-50-solid-progress.md +122 -0
  20. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-14-08-30-infrastructure-challenges.md +141 -0
  21. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-16-21-48-critical-foundation-issues.md +177 -0
  22. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-17-15-08-solid-progress.md +149 -0
  23. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/index.json +5 -0
  24. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/sync-index.js +78 -0
  25. package/claude-code/aiwf/en/.aiwf/98_PROMPTS/github_integration.md +130 -0
  26. package/claude-code/aiwf/en/.aiwf/98_PROMPTS/useful-prompts.md +31 -0
  27. package/claude-code/aiwf/en/.aiwf/98_PROMPTS/vibe-front-prompts.md +89 -0
  28. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/99_TEMPLATES/task_template.md +1 -0
  29. package/claude-code/{simone/.simone/CLAUDE.MD → aiwf/en/.aiwf/CLAUDE.md} +13 -4
  30. package/claude-code/{simone/.simone → aiwf/en/.aiwf}/README.md +6 -6
  31. package/claude-code/aiwf/en/.claude/CLAUDE_BE.md +276 -0
  32. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_changelog.md +82 -0
  33. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_code_review.md +88 -0
  34. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_commit.md +160 -0
  35. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_general_task.md +147 -0
  36. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_milestone_plan.md +194 -0
  37. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_prd.md +272 -0
  38. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_sprint_tasks.md +189 -0
  39. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_sprints_from_milestone.md +121 -0
  40. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_discuss_review.md +29 -0
  41. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_do_task.md +109 -0
  42. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_docs.md +225 -0
  43. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_infinite.md +202 -0
  44. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_initialize.md +134 -0
  45. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_issue_create.md +65 -0
  46. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_language_manager.md +287 -0
  47. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_language_status.md +246 -0
  48. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_mermaid.md +272 -0
  49. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_pr_create.md +76 -0
  50. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_prime.md +9 -0
  51. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_project_review.md +261 -0
  52. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_switch_language.md +160 -0
  53. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_test.md +125 -0
  54. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_testing_review.md +198 -0
  55. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_tm-run-all-subtask.md +206 -0
  56. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_ultrathink_code_advanced.md +460 -0
  57. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_ultrathink_code_basic.md +165 -0
  58. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_ultrathink_general.md +362 -0
  59. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_yolo.md +300 -0
  60. package/claude-code/aiwf/en/.claude/mcp.json +31 -0
  61. package/claude-code/aiwf/en/.claude/settings.json +102 -0
  62. package/claude-code/aiwf/ko/.aiwf/00_PROJECT_MANIFEST.md +49 -0
  63. package/claude-code/aiwf/ko/.aiwf/01_PROJECT_DOCS/ARCHITECTURE.md +55 -0
  64. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/CLAUDE.md +78 -0
  65. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/M01_milestone_meta.md +42 -0
  66. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_AMEND_01_Auth_Flow_Update.md +73 -0
  67. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_Backend_Setup.md +98 -0
  68. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/SPECS_API_V1.md +232 -0
  69. package/claude-code/aiwf/ko/.aiwf/03_SPRINTS/CLAUDE.md +83 -0
  70. package/claude-code/aiwf/ko/.aiwf/03_SPRINTS/S01_M01_Initial_API/S01_sprint_meta.md +49 -0
  71. package/claude-code/aiwf/ko/.aiwf/03_SPRINTS/S01_M01_Initial_API/T01_S01_Setup_Project_Structure.md +60 -0
  72. package/claude-code/aiwf/ko/.aiwf/04_GENERAL_TASKS/CLAUDE.md +96 -0
  73. package/claude-code/aiwf/ko/.aiwf/04_GENERAL_TASKS/T002_API_Rate_Limiting.md +54 -0
  74. package/claude-code/aiwf/ko/.aiwf/04_GENERAL_TASKS/TX001_Refactor_Logging_Module.md +58 -0
  75. package/claude-code/aiwf/ko/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR001_Chosen_Database_System.md +119 -0
  76. package/claude-code/aiwf/ko/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR002_API_Authentication_Method.md +124 -0
  77. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-needs-focus.md +139 -0
  78. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-test-alignment.md +155 -0
  79. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-13-00-50-solid-progress.md +122 -0
  80. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-14-08-30-infrastructure-challenges.md +141 -0
  81. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-16-21-48-critical-foundation-issues.md +177 -0
  82. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-17-15-08-solid-progress.md +149 -0
  83. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/index.json +5 -0
  84. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/sync-index.js +78 -0
  85. package/claude-code/aiwf/ko/.aiwf/98_PROMPTS/github_integration.md +130 -0
  86. package/claude-code/aiwf/ko/.aiwf/98_PROMPTS/useful-prompts.md +31 -0
  87. package/claude-code/aiwf/ko/.aiwf/98_PROMPTS/vibe-front-prompts.md +89 -0
  88. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/adr_template.md +49 -0
  89. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/milestone_meta_template.md +25 -0
  90. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/project_manifest_template.md +39 -0
  91. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/sprint_meta_template.md +23 -0
  92. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/task_template.md +36 -0
  93. package/claude-code/aiwf/ko/.aiwf/CLAUDE.md +76 -0
  94. package/claude-code/aiwf/ko/.aiwf/README.md +97 -0
  95. package/claude-code/aiwf/ko/.claude/CLAUDE_BE.md +276 -0
  96. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_changelog.md +82 -0
  97. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_code_review.md +88 -0
  98. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_commit.md +160 -0
  99. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_general_task.md +147 -0
  100. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_milestone_plan.md +194 -0
  101. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_prd.md +280 -0
  102. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_sprint_tasks.md +189 -0
  103. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_sprints_from_milestone.md +121 -0
  104. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_discuss_review.md +29 -0
  105. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_do_task.md +109 -0
  106. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_docs.md +225 -0
  107. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_infinite.md +202 -0
  108. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_initialize.md +134 -0
  109. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_issue_create.md +65 -0
  110. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_language_manager.md +287 -0
  111. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_language_status.md +246 -0
  112. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_mermaid.md +272 -0
  113. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_pr_create.md +76 -0
  114. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_prime.md +9 -0
  115. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_project_review.md +261 -0
  116. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_switch_language.md +160 -0
  117. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_test.md +124 -0
  118. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_testing_review.md +198 -0
  119. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_tm-run-all-subtask.md +210 -0
  120. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_ultrathink_code_advanced.md +460 -0
  121. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_ultrathink_code_basic.md +165 -0
  122. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_ultrathink_general.md +305 -0
  123. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_yolo.md +300 -0
  124. package/claude-code/aiwf/ko/.claude/mcp.json +31 -0
  125. package/claude-code/aiwf/ko/.claude/settings.json +102 -0
  126. package/{AI-WORKFLOW.md → docs/AI-WORKFLOW.ko.md} +38 -24
  127. package/docs/AI-WORKFLOW.md +299 -0
  128. package/docs/COMMANDS_GUIDE.ko.md +727 -0
  129. package/docs/COMMANDS_GUIDE.md +726 -0
  130. package/docs/CONTRIBUTING.md +406 -0
  131. package/docs/DEVELOPMENT_GUIDE.md +727 -0
  132. package/docs/Enhanced_Installation_Flow_Design.md +498 -0
  133. package/docs/PRD.ko.md +148 -0
  134. package/docs/PRD.md +150 -0
  135. package/docs/moonklabs-metadata-system-prd.md +127 -0
  136. package/index.js +1493 -122
  137. package/jest.config.js +4 -0
  138. package/language-cli.js +279 -0
  139. package/language-utils.js +330 -0
  140. package/package.json +23 -10
  141. package/scripts/validate-commands.cjs +338 -0
  142. package/scripts/validate-commands.js +254 -0
  143. package/tests/basic.test.js +62 -0
  144. package/tests/commands.test.js +127 -0
  145. package/tests/installer.test.js +129 -0
  146. package/tests/language-utils.test.js +271 -0
  147. package/COMMANDS_GUIDE.md +0 -462
  148. package/PRD.ko.md +0 -96
  149. package/PRD.md +0 -98
  150. package/claude-code/simone/.simone/04_GENERAL_TASKS/CLAUDE.MD +0 -51
  151. package/claude-code/simone/CHANGELOG.md +0 -71
  152. package/claude-code/simone/LICENSE +0 -21
  153. package/claude-code/simone/README.md +0 -219
  154. package/claude-code/simone/SYNC_GUIDE.md +0 -172
  155. package/claude-code/simone/sync-simone.sh +0 -138
  156. /package/claude-code/{simone/.simone → aiwf/en/.aiwf}/00_PROJECT_MANIFEST.md +0 -0
  157. /package/claude-code/{simone/.simone → aiwf/en/.aiwf}/02_REQUIREMENTS/CLAUDE.md +0 -0
  158. /package/claude-code/{simone/.simone → aiwf/en/.aiwf}/02_REQUIREMENTS/M01_Backend_Setup/PRD_Backend_Setup.md +0 -0
  159. /package/claude-code/{simone/.simone → aiwf/en/.aiwf}/02_REQUIREMENTS/M01_Backend_Setup/SPECS_API_V1.md +0 -0
  160. /package/claude-code/{simone/.simone → aiwf/en/.aiwf}/99_TEMPLATES/adr_template.md +0 -0
  161. /package/claude-code/{simone/.simone → aiwf/en/.aiwf}/99_TEMPLATES/milestone_meta_template.md +0 -0
  162. /package/claude-code/{simone/.simone → aiwf/en/.aiwf}/99_TEMPLATES/project_manifest_template.md +0 -0
  163. /package/claude-code/{simone/.simone → aiwf/en/.aiwf}/99_TEMPLATES/sprint_meta_template.md +0 -0
@@ -0,0 +1,727 @@
1
+ # aiwf 개발 가이드
2
+
3
+ aiwf (AI Workflow Framework)는 Claude Code와 통합된 AIWF 프로젝트 관리 프레임워크를 설치하는 NPM CLI 패키지입니다. 이 문서는 aiwf 프로젝트에 기여하고자 하는 개발자들을 위한 종합적인 개발 환경 설정 및 워크플로우 가이드입니다.
4
+
5
+ ## 목차
6
+
7
+ 1. [시작하기](#1-시작하기)
8
+ 2. [개발 도구 설정](#2-개발-도구-설정)
9
+ 3. [개발 워크플로우](#3-개발-워크플로우)
10
+ 4. [코딩 표준](#4-코딩-표준)
11
+ 5. [테스트 작성](#5-테스트-작성)
12
+ 6. [CI/CD 파이프라인](#6-cicd-파이프라인)
13
+ 7. [문제 해결](#7-문제-해결)
14
+ 8. [기여하기](#8-기여하기)
15
+
16
+ ---
17
+
18
+ ## 1. 시작하기
19
+
20
+ ### 1.1 개발 환경 요구사항
21
+
22
+ aiwf 프로젝트 개발을 위해 다음 도구들이 필요합니다:
23
+
24
+ - **Node.js**: 14.0.0 이상 (ES 모듈 지원)
25
+ - **npm**: Node.js와 함께 설치됨
26
+ - **Git**: 버전 관리
27
+ - **추천 IDE**: VS Code, Cursor, 또는 Windsurf
28
+
29
+ ### 1.2 프로젝트 클론 및 설정
30
+
31
+ ```bash
32
+ # 1. 리포지토리 클론
33
+ git clone https://github.com/aiwf/aiwf.git
34
+ cd aiwf
35
+
36
+ # 2. 의존성 설치
37
+ npm install
38
+
39
+ # 3. 로컬 테스트 실행
40
+ node index.js --force
41
+
42
+ # 4. 개발 환경 검증
43
+ npm test # Jest 테스트 실행 (설정 후)
44
+ npm run lint # ESLint 검사 (설정 후)
45
+ ```
46
+
47
+ ### 1.3 프로젝트 구조 이해
48
+
49
+ ```
50
+ aiwf/
51
+ ├── index.js # 메인 CLI 실행 파일
52
+ ├── package.json # NPM 패키지 설정
53
+ ├── claude-code/aiwf/ # AIWF 프레임워크 소스
54
+ │ ├── .claude/commands/ # Claude Code 커스텀 명령어
55
+ │ └── .aiwf/ # 프로젝트 관리 구조
56
+ ├── rules/ # IDE별 개발 규칙
57
+ │ ├── global/ # 항상 적용되는 규칙
58
+ │ └── manual/ # 필요시 적용하는 규칙
59
+ ├── docs/ # 프로젝트 문서
60
+ ├── tests/ # 테스트 파일 (생성 예정)
61
+ └── scripts/ # 빌드/배포 스크립트
62
+ ```
63
+
64
+ ---
65
+
66
+ ## 2. 개발 도구 설정
67
+
68
+ ### 2.1 Jest 테스트 프레임워크 설정
69
+
70
+ aiwf는 ES 모듈 기반 프로젝트이므로 Jest 설정 시 ES 모듈 지원이 필요합니다.
71
+
72
+ #### 설치
73
+
74
+ ```bash
75
+ npm install --save-dev jest @jest/globals
76
+ ```
77
+
78
+ #### jest.config.js 설정
79
+
80
+ ```javascript
81
+ export default {
82
+ preset: "jest-esm",
83
+ extensionsToTreatAsEsm: [".js"],
84
+ globals: {
85
+ "ts-jest": {
86
+ useESM: true,
87
+ },
88
+ },
89
+ moduleNameMapping: {
90
+ "^(\\.{1,2}/.*)\\.js$": "$1",
91
+ },
92
+ transform: {},
93
+ testEnvironment: "node",
94
+ collectCoverageFrom: ["index.js", "!node_modules/**", "!coverage/**"],
95
+ coverageReporters: ["text", "lcov", "html"],
96
+ testMatch: ["<rootDir>/tests/**/*.test.js"],
97
+ };
98
+ ```
99
+
100
+ #### package.json 테스트 스크립트
101
+
102
+ ```json
103
+ {
104
+ "scripts": {
105
+ "test": "jest",
106
+ "test:watch": "jest --watch",
107
+ "test:coverage": "jest --coverage",
108
+ "test:ci": "jest --ci --coverage --watchAll=false"
109
+ }
110
+ }
111
+ ```
112
+
113
+ ### 2.2 ESLint & Prettier 설정
114
+
115
+ 코드 품질과 일관성을 위한 린팅 및 포맷팅 도구 설정입니다.
116
+
117
+ #### 설치
118
+
119
+ ```bash
120
+ npm install --save-dev eslint prettier eslint-config-prettier eslint-plugin-prettier
121
+ ```
122
+
123
+ #### .eslintrc.json 설정
124
+
125
+ ```json
126
+ {
127
+ "env": {
128
+ "es2022": true,
129
+ "node": true,
130
+ "jest": true
131
+ },
132
+ "extends": ["eslint:recommended", "prettier"],
133
+ "plugins": ["prettier"],
134
+ "parserOptions": {
135
+ "ecmaVersion": 2022,
136
+ "sourceType": "module"
137
+ },
138
+ "rules": {
139
+ "prettier/prettier": "error",
140
+ "no-console": "off",
141
+ "no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
142
+ "prefer-const": "error",
143
+ "no-var": "error"
144
+ }
145
+ }
146
+ ```
147
+
148
+ #### .prettierrc 설정
149
+
150
+ ```json
151
+ {
152
+ "semi": true,
153
+ "trailingComma": "es5",
154
+ "singleQuote": true,
155
+ "printWidth": 80,
156
+ "tabWidth": 2,
157
+ "useTabs": false
158
+ }
159
+ ```
160
+
161
+ #### package.json 린팅 스크립트
162
+
163
+ ```json
164
+ {
165
+ "scripts": {
166
+ "lint": "eslint .",
167
+ "lint:fix": "eslint . --fix",
168
+ "format": "prettier --write ."
169
+ }
170
+ }
171
+ ```
172
+
173
+ ### 2.3 IDE 통합 설정
174
+
175
+ #### VS Code 설정 (.vscode/settings.json)
176
+
177
+ ```json
178
+ {
179
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
180
+ "editor.formatOnSave": true,
181
+ "editor.codeActionsOnSave": {
182
+ "source.fixAll.eslint": true
183
+ },
184
+ "eslint.validate": ["javascript"],
185
+ "files.associations": {
186
+ "*.md": "markdown"
187
+ }
188
+ }
189
+ ```
190
+
191
+ ---
192
+
193
+ ## 3. 개발 워크플로우
194
+
195
+ ### 3.1 Git 브랜치 전략
196
+
197
+ aiwf 프로젝트는 Git Flow 기반의 브랜치 전략을 사용합니다:
198
+
199
+ - **main**: 프로덕션 준비 코드
200
+ - **develop**: 개발용 통합 브랜치
201
+ - **feature/**: 기능 개발 브랜치
202
+ - **hotfix/**: 긴급 수정 브랜치
203
+ - **release/**: 릴리스 준비 브랜치
204
+
205
+ #### 기능 개발 워크플로우
206
+
207
+ ```bash
208
+ # 1. develop 브랜치에서 기능 브랜치 생성
209
+ git checkout develop
210
+ git pull origin develop
211
+ git checkout -b feature/your-feature-name
212
+
213
+ # 2. 개발 진행
214
+ # 코드 작성 및 테스트
215
+
216
+ # 3. 변경사항 커밋
217
+ git add .
218
+ git commit -m "feat: 새로운 기능 설명"
219
+
220
+ # 4. 원격 저장소에 푸시
221
+ git push origin feature/your-feature-name
222
+
223
+ # 5. Pull Request 생성
224
+ # GitHub에서 PR 생성하여 코드 리뷰 요청
225
+ ```
226
+
227
+ ### 3.2 커밋 메시지 컨벤션
228
+
229
+ Conventional Commits 형식을 따릅니다:
230
+
231
+ ```
232
+ <type>(<scope>): <description>
233
+
234
+ [optional body]
235
+
236
+ [optional footer]
237
+ ```
238
+
239
+ #### 커밋 타입
240
+
241
+ - **feat**: 새로운 기능 추가
242
+ - **fix**: 버그 수정
243
+ - **docs**: 문서 변경
244
+ - **style**: 코드 포맷팅 변경
245
+ - **refactor**: 코드 리팩토링
246
+ - **test**: 테스트 추가/수정
247
+ - **chore**: 빌드 과정 또는 도구 변경
248
+
249
+ #### 예시
250
+
251
+ ```bash
252
+ feat(cli): GitHub API 에러 처리 개선
253
+ fix(installer): 백업 파일 생성 시 타임스탬프 오류 수정
254
+ docs(readme): 설치 가이드 업데이트
255
+ ```
256
+
257
+ ### 3.3 코드 리뷰 프로세스
258
+
259
+ 1. **자체 검토**: PR 생성 전 자신의 코드 검토
260
+ 2. **테스트 통과**: 모든 테스트가 통과하는지 확인
261
+ 3. **린팅 통과**: ESLint 및 Prettier 검사 통과
262
+ 4. **PR 생성**: 명확한 제목과 설명으로 PR 생성
263
+ 5. **리뷰 대응**: 리뷰어의 피드백에 적극적으로 대응
264
+ 6. **승인 후 머지**: 승인 받은 후 squash merge 수행
265
+
266
+ ---
267
+
268
+ ## 4. 코딩 표준
269
+
270
+ ### 4.1 JavaScript/ES6+ 스타일 가이드
271
+
272
+ #### 변수 선언
273
+
274
+ ```javascript
275
+ // 좋음: const 우선 사용
276
+ const apiUrl = "https://api.github.com";
277
+ let mutableValue = 0;
278
+
279
+ // 피하기: var 사용 금지
280
+ var oldStyle = "avoid";
281
+ ```
282
+
283
+ #### 함수 선언
284
+
285
+ ```javascript
286
+ // 좋음: 화살표 함수 사용
287
+ const fetchData = async (url) => {
288
+ try {
289
+ const response = await fetch(url);
290
+ return await response.json();
291
+ } catch (error) {
292
+ console.error("데이터 가져오기 실패:", error);
293
+ throw error;
294
+ }
295
+ };
296
+
297
+ // 좋음: 명시적 함수 선언
298
+ function processData(data) {
299
+ return data.filter((item) => item.isValid);
300
+ }
301
+ ```
302
+
303
+ #### 객체와 배열
304
+
305
+ ```javascript
306
+ // 좋음: 구조 분해 할당 사용
307
+ const { name, version } = packageJson;
308
+ const [first, ...rest] = items;
309
+
310
+ // 좋음: 스프레드 연산자 사용
311
+ const newObject = { ...existingObject, newProperty: "value" };
312
+ const newArray = [...existingArray, newItem];
313
+ ```
314
+
315
+ ### 4.2 파일 및 디렉토리 명명 규칙
316
+
317
+ - **파일명**: kebab-case 또는 camelCase
318
+ - `github-api.js`, `fileOperations.js`
319
+ - **디렉토리명**: kebab-case
320
+ - `test-fixtures/`, `github-api/`
321
+ - **상수**: UPPER_SNAKE_CASE
322
+ - `const API_BASE_URL = 'https://api.github.com';`
323
+
324
+ ### 4.3 주석 및 문서화
325
+
326
+ ```javascript
327
+ /**
328
+ * GitHub API에서 파일 콘텐츠를 가져옵니다.
329
+ * @param {string} url - GitHub API URL
330
+ * @param {Object} options - 요청 옵션
331
+ * @returns {Promise<Object>} API 응답 데이터
332
+ * @throws {Error} 네트워크 또는 API 오류 시 발생
333
+ */
334
+ async function fetchGitHubContent(url, options = {}) {
335
+ // 구현 내용...
336
+ }
337
+
338
+ // 복잡한 로직에 대한 인라인 주석
339
+ const backupTimestamp = new Date().toISOString().replace(/[:.]/g, "-");
340
+ // ISO 문자열에서 파일명에 사용할 수 없는 문자들을 대시로 변경
341
+ ```
342
+
343
+ ### 4.4 에러 처리 가이드라인
344
+
345
+ ```javascript
346
+ // 좋음: 구체적인 에러 처리
347
+ try {
348
+ const result = await someAsyncOperation();
349
+ return result;
350
+ } catch (error) {
351
+ if (error.code === "ENOENT") {
352
+ console.error("파일을 찾을 수 없습니다:", error.path);
353
+ } else if (error.code === "EACCES") {
354
+ console.error("파일 접근 권한이 없습니다:", error.path);
355
+ } else {
356
+ console.error("예상치 못한 오류:", error.message);
357
+ }
358
+
359
+ throw new Error(`작업 실패: ${error.message}`);
360
+ }
361
+ ```
362
+
363
+ ---
364
+
365
+ ## 5. 테스트 작성
366
+
367
+ ### 5.1 테스트 디렉토리 구조
368
+
369
+ ```
370
+ tests/
371
+ ├── unit/ # 단위 테스트
372
+ │ ├── github-api.test.js
373
+ │ ├── file-operations.test.js
374
+ │ └── cli-interface.test.js
375
+ ├── integration/ # 통합 테스트
376
+ │ └── installer.test.js
377
+ ├── fixtures/ # 테스트 데이터
378
+ │ ├── mock-github-response.json
379
+ │ └── sample-project-structure/
380
+ └── helpers/ # 테스트 헬퍼
381
+ ├── test-utils.js
382
+ └── mock-setup.js
383
+ ```
384
+
385
+ ### 5.2 단위 테스트 작성 가이드
386
+
387
+ ```javascript
388
+ // github-api.test.js
389
+ import { jest } from "@jest/globals";
390
+ import { fetchGitHubContent } from "../../index.js";
391
+
392
+ // 네트워크 호출 모킹
393
+ jest.mock("https");
394
+
395
+ describe("GitHub API functions", () => {
396
+ beforeEach(() => {
397
+ jest.clearAllMocks();
398
+ });
399
+
400
+ describe("fetchGitHubContent", () => {
401
+ test("성공적으로 데이터를 가져와야 함", async () => {
402
+ // Given
403
+ const mockUrl = "https://api.github.com/repos/test/repo";
404
+ const mockResponse = { name: "test-repo" };
405
+
406
+ // Mock 설정
407
+ // ...
408
+
409
+ // When
410
+ const result = await fetchGitHubContent(mockUrl);
411
+
412
+ // Then
413
+ expect(result).toEqual(mockResponse);
414
+ });
415
+
416
+ test("네트워크 오류 시 적절한 에러를 발생시켜야 함", async () => {
417
+ // Given & When & Then
418
+ await expect(fetchGitHubContent("invalid-url")).rejects.toThrow(
419
+ "네트워크 오류"
420
+ );
421
+ });
422
+ });
423
+ });
424
+ ```
425
+
426
+ ### 5.3 통합 테스트 작성 가이드
427
+
428
+ ```javascript
429
+ // installer.test.js
430
+ import fs from "fs/promises";
431
+ import path from "path";
432
+ import { fileURLToPath } from "url";
433
+
434
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
435
+
436
+ describe("Installer Integration Tests", () => {
437
+ let tempDir;
438
+
439
+ beforeEach(async () => {
440
+ // 임시 디렉토리 생성
441
+ tempDir = await fs.mkdtemp(path.join(__dirname, "temp-"));
442
+ });
443
+
444
+ afterEach(async () => {
445
+ // 임시 디렉토리 정리
446
+ await fs.rm(tempDir, { recursive: true, force: true });
447
+ });
448
+
449
+ test("전체 설치 프로세스가 정상 동작해야 함", async () => {
450
+ // 전체 설치 프로세스 테스트
451
+ // ...
452
+ });
453
+ });
454
+ ```
455
+
456
+ ### 5.4 테스트 베스트 프랙티스
457
+
458
+ 1. **AAA 패턴**: Arrange, Act, Assert 구조 사용
459
+ 2. **명확한 테스트명**: 테스트가 무엇을 검증하는지 명확히 표현
460
+ 3. **독립성**: 각 테스트는 독립적으로 실행 가능해야 함
461
+ 4. **모킹**: 외부 의존성은 적절히 모킹하여 테스트 안정성 확보
462
+ 5. **커버리지**: 중요한 비즈니스 로직은 높은 커버리지 유지
463
+
464
+ ---
465
+
466
+ ## 6. CI/CD 파이프라인
467
+
468
+ ### 6.1 GitHub Actions 워크플로우
469
+
470
+ aiwf 프로젝트는 GitHub Actions를 사용하여 CI/CD를 구성합니다.
471
+
472
+ #### .github/workflows/ci.yml
473
+
474
+ ```yaml
475
+ name: CI/CD Pipeline
476
+
477
+ on:
478
+ push:
479
+ branches: [main, develop]
480
+ pull_request:
481
+ branches: [main, develop]
482
+
483
+ jobs:
484
+ test:
485
+ runs-on: ubuntu-latest
486
+
487
+ strategy:
488
+ matrix:
489
+ node-version: [14.x, 16.x, 18.x]
490
+
491
+ steps:
492
+ - uses: actions/checkout@v3
493
+
494
+ - name: Node.js ${{ matrix.node-version }} 설정
495
+ uses: actions/setup-node@v3
496
+ with:
497
+ node-version: ${{ matrix.node-version }}
498
+ cache: "npm"
499
+
500
+ - name: 의존성 설치
501
+ run: npm ci
502
+
503
+ - name: 린팅 검사
504
+ run: npm run lint
505
+
506
+ - name: 테스트 실행
507
+ run: npm run test:ci
508
+
509
+ - name: 커버리지 업로드
510
+ uses: codecov/codecov-action@v3
511
+ with:
512
+ file: ./coverage/lcov.info
513
+
514
+ deploy:
515
+ needs: test
516
+ runs-on: ubuntu-latest
517
+ if: github.ref == 'refs/heads/main'
518
+
519
+ steps:
520
+ - uses: actions/checkout@v3
521
+
522
+ - name: Node.js 설정
523
+ uses: actions/setup-node@v3
524
+ with:
525
+ node-version: "18.x"
526
+ registry-url: "https://registry.npmjs.org"
527
+
528
+ - name: 의존성 설치
529
+ run: npm ci
530
+
531
+ - name: NPM 배포
532
+ run: npm publish
533
+ env:
534
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
535
+ ```
536
+
537
+ ### 6.2 배포 프로세스
538
+
539
+ 1. **자동 배포**: main 브랜치에 머지 시 자동으로 NPM에 배포
540
+ 2. **버전 관리**: semantic versioning 사용
541
+ 3. **릴리스 노트**: GitHub Releases를 통한 변경사항 문서화
542
+
543
+ ### 6.3 모니터링 및 알림
544
+
545
+ - **빌드 상태**: GitHub Actions 배지를 통한 빌드 상태 확인
546
+ - **커버리지**: Codecov를 통한 테스트 커버리지 모니터링
547
+ - **의존성 보안**: Dependabot을 통한 의존성 보안 검사
548
+
549
+ ---
550
+
551
+ ## 7. 문제 해결
552
+
553
+ ### 7.1 일반적인 설치 문제
554
+
555
+ #### Node.js 버전 문제
556
+
557
+ ```bash
558
+ # 문제: Node.js 버전이 14.0.0 미만
559
+ # 해결: nvm을 사용하여 적절한 버전 설치
560
+ nvm install 18
561
+ nvm use 18
562
+ ```
563
+
564
+ #### 권한 문제
565
+
566
+ ```bash
567
+ # 문제: npm install 시 권한 오류
568
+ # 해결: npm 글로벌 디렉토리 권한 변경
569
+ npm config set prefix ~/.npm-global
570
+ export PATH=~/.npm-global/bin:$PATH
571
+ ```
572
+
573
+ ### 7.2 테스트 관련 문제 해결
574
+
575
+ #### ES 모듈 관련 오류
576
+
577
+ ```javascript
578
+ // 문제: Jest에서 ES 모듈을 인식하지 못함
579
+ // 해결: jest.config.js에서 ES 모듈 설정 확인
580
+
581
+ // package.json에 다음 추가
582
+ {
583
+ "type": "module",
584
+ "jest": {
585
+ "preset": "jest-esm"
586
+ }
587
+ }
588
+ ```
589
+
590
+ #### 네트워크 테스트 불안정성
591
+
592
+ ```javascript
593
+ // 문제: GitHub API 호출 테스트가 불안정함
594
+ // 해결: 적절한 모킹과 타임아웃 설정
595
+
596
+ jest.setTimeout(10000); // 10초 타임아웃
597
+
598
+ // 네트워크 호출 모킹
599
+ jest.mock("https", () => ({
600
+ request: jest.fn(),
601
+ }));
602
+ ```
603
+
604
+ ### 7.3 빌드 및 배포 문제
605
+
606
+ #### GitHub Actions 실패
607
+
608
+ ```yaml
609
+ # 문제: CI 파이프라인에서 테스트 실패
610
+ # 해결: 로컬에서 CI 환경과 동일한 조건으로 테스트
611
+
612
+ # 로컬에서 CI 테스트 실행
613
+ npm run test:ci
614
+
615
+ # 환경 변수 확인
616
+ env | grep NODE
617
+ ```
618
+
619
+ ### 7.4 IDE 설정 문제
620
+
621
+ #### VS Code에서 ESLint 동작하지 않음
622
+
623
+ ```json
624
+ // .vscode/settings.json
625
+ {
626
+ "eslint.workingDirectories": ["./"],
627
+ "eslint.validate": ["javascript"]
628
+ }
629
+ ```
630
+
631
+ ---
632
+
633
+ ## 8. 기여하기
634
+
635
+ ### 8.1 기여 가이드라인
636
+
637
+ aiwf 프로젝트에 기여하기 위한 단계별 가이드입니다.
638
+
639
+ #### 첫 번째 기여 준비
640
+
641
+ 1. **이슈 확인**: GitHub Issues에서 작업할 이슈 선택
642
+ 2. **포크 생성**: 개인 계정으로 프로젝트 포크
643
+ 3. **로컬 설정**: 개발 환경 설정 및 테스트 실행
644
+ 4. **브랜치 생성**: feature/issue-번호-설명 형식으로 브랜치 생성
645
+
646
+ #### 코드 작성 가이드
647
+
648
+ 1. **코딩 표준 준수**: ESLint 및 Prettier 규칙 따르기
649
+ 2. **테스트 작성**: 새로운 기능에 대한 테스트 포함
650
+ 3. **문서 업데이트**: 필요시 관련 문서 업데이트
651
+ 4. **커밋 메시지**: Conventional Commits 형식 준수
652
+
653
+ ### 8.2 코드 리뷰 기준
654
+
655
+ #### 리뷰어 체크리스트
656
+
657
+ - [ ] 코딩 표준 준수 여부
658
+ - [ ] 테스트 커버리지 적절성
659
+ - [ ] 에러 처리 적절성
660
+ - [ ] 성능 영향 고려
661
+ - [ ] 보안 취약점 여부
662
+ - [ ] 문서화 완성도
663
+
664
+ #### 기여자 체크리스트
665
+
666
+ - [ ] 모든 테스트 통과
667
+ - [ ] 린팅 검사 통과
668
+ - [ ] 브랜치 최신 상태 유지
669
+ - [ ] PR 설명 명확히 작성
670
+ - [ ] 관련 이슈 링크 포함
671
+
672
+ ### 8.3 커뮤니티 가이드라인
673
+
674
+ #### 행동강령
675
+
676
+ 1. **존중**: 모든 기여자를 존중하고 건설적인 피드백 제공
677
+ 2. **포용성**: 다양한 배경의 기여자들을 환영
678
+ 3. **투명성**: 의사결정 과정을 투명하게 공유
679
+ 4. **협력**: 문제 해결을 위한 협력적 자세 유지
680
+
681
+ #### 커뮤니케이션 채널
682
+
683
+ - **GitHub Issues**: 버그 리포트 및 기능 요청
684
+ - **GitHub Discussions**: 일반적인 토론 및 질문
685
+ - **Pull Requests**: 코드 리뷰 및 기술적 논의
686
+
687
+ ---
688
+
689
+ ## 부록
690
+
691
+ ### A. 유용한 명령어
692
+
693
+ ```bash
694
+ # 프로젝트 초기 설정
695
+ npm install
696
+ npm run setup # 개발 환경 초기 설정 (구현 예정)
697
+
698
+ # 개발 중 자주 사용하는 명령어
699
+ npm run dev # 개발 모드 실행
700
+ npm test # 테스트 실행
701
+ npm run lint # 린팅 검사
702
+ npm run format # 코드 포맷팅
703
+
704
+ # 배포 관련
705
+ npm run build # 프로덕션 빌드
706
+ npm run release # 릴리스 준비 (구현 예정)
707
+ ```
708
+
709
+ ### B. 참고 자료
710
+
711
+ - [Node.js 공식 문서](https://nodejs.org/docs/)
712
+ - [Jest 공식 문서](https://jestjs.io/docs/getting-started)
713
+ - [ESLint 공식 문서](https://eslint.org/docs/user-guide/)
714
+ - [Conventional Commits](https://www.conventionalcommits.org/)
715
+ - [GitHub Actions 문서](https://docs.github.com/en/actions)
716
+
717
+ ### C. 문의 및 지원
718
+
719
+ 프로젝트 관련 문의나 지원이 필요한 경우:
720
+
721
+ 1. **GitHub Issues**: 버그 리포트 및 기능 요청
722
+ 2. **GitHub Discussions**: 일반적인 질문 및 토론
723
+ 3. **이메일**: 긴급한 보안 문제 등
724
+
725
+ ---
726
+
727
+ 이 문서는 aiwf 프로젝트의 발전과 함께 지속적으로 업데이트됩니다. 개선 사항이나 추가할 내용이 있다면 언제든지 기여해 주세요!