jell-utils 0.0.18 → 0.2.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.
Files changed (178) hide show
  1. package/.claude/commands/tm/add-dependency.md +58 -0
  2. package/.claude/commands/tm/add-subtask.md +79 -0
  3. package/.claude/commands/tm/add-task.md +81 -0
  4. package/.claude/commands/tm/analyze-complexity.md +124 -0
  5. package/.claude/commands/tm/analyze-project.md +100 -0
  6. package/.claude/commands/tm/auto-implement-tasks.md +100 -0
  7. package/.claude/commands/tm/command-pipeline.md +80 -0
  8. package/.claude/commands/tm/complexity-report.md +120 -0
  9. package/.claude/commands/tm/convert-task-to-subtask.md +74 -0
  10. package/.claude/commands/tm/expand-all-tasks.md +52 -0
  11. package/.claude/commands/tm/expand-task.md +52 -0
  12. package/.claude/commands/tm/fix-dependencies.md +82 -0
  13. package/.claude/commands/tm/help.md +101 -0
  14. package/.claude/commands/tm/init-project-quick.md +49 -0
  15. package/.claude/commands/tm/init-project.md +53 -0
  16. package/.claude/commands/tm/install-taskmaster.md +118 -0
  17. package/.claude/commands/tm/learn.md +106 -0
  18. package/.claude/commands/tm/list-tasks-by-status.md +42 -0
  19. package/.claude/commands/tm/list-tasks-with-subtasks.md +30 -0
  20. package/.claude/commands/tm/list-tasks.md +46 -0
  21. package/.claude/commands/tm/next-task.md +69 -0
  22. package/.claude/commands/tm/parse-prd-with-research.md +51 -0
  23. package/.claude/commands/tm/parse-prd.md +52 -0
  24. package/.claude/commands/tm/project-status.md +67 -0
  25. package/.claude/commands/tm/quick-install-taskmaster.md +23 -0
  26. package/.claude/commands/tm/remove-all-subtasks.md +94 -0
  27. package/.claude/commands/tm/remove-dependency.md +65 -0
  28. package/.claude/commands/tm/remove-subtask.md +87 -0
  29. package/.claude/commands/tm/remove-subtasks.md +89 -0
  30. package/.claude/commands/tm/remove-task.md +110 -0
  31. package/.claude/commands/tm/setup-models.md +52 -0
  32. package/.claude/commands/tm/show-task.md +85 -0
  33. package/.claude/commands/tm/smart-workflow.md +58 -0
  34. package/.claude/commands/tm/sync-readme.md +120 -0
  35. package/.claude/commands/tm/tm-main.md +147 -0
  36. package/.claude/commands/tm/to-cancelled.md +58 -0
  37. package/.claude/commands/tm/to-deferred.md +50 -0
  38. package/.claude/commands/tm/to-done.md +47 -0
  39. package/.claude/commands/tm/to-in-progress.md +39 -0
  40. package/.claude/commands/tm/to-pending.md +35 -0
  41. package/.claude/commands/tm/to-review.md +43 -0
  42. package/.claude/commands/tm/update-single-task.md +122 -0
  43. package/.claude/commands/tm/update-task.md +75 -0
  44. package/.claude/commands/tm/update-tasks-from-id.md +111 -0
  45. package/.claude/commands/tm/validate-dependencies.md +72 -0
  46. package/.claude/commands/tm/view-models.md +52 -0
  47. package/.claude/settings.local.json +30 -0
  48. package/.cursor/commands/tm/add-dependency.md +55 -0
  49. package/.cursor/commands/tm/add-subtask.md +76 -0
  50. package/.cursor/commands/tm/add-task.md +78 -0
  51. package/.cursor/commands/tm/analyze-complexity.md +121 -0
  52. package/.cursor/commands/tm/analyze-project.md +97 -0
  53. package/.cursor/commands/tm/auto-implement-tasks.md +97 -0
  54. package/.cursor/commands/tm/command-pipeline.md +77 -0
  55. package/.cursor/commands/tm/complexity-report.md +117 -0
  56. package/.cursor/commands/tm/convert-task-to-subtask.md +71 -0
  57. package/.cursor/commands/tm/expand-all-tasks.md +51 -0
  58. package/.cursor/commands/tm/expand-task.md +49 -0
  59. package/.cursor/commands/tm/fix-dependencies.md +81 -0
  60. package/.cursor/commands/tm/help.md +98 -0
  61. package/.cursor/commands/tm/init-project-quick.md +46 -0
  62. package/.cursor/commands/tm/init-project.md +50 -0
  63. package/.cursor/commands/tm/install-taskmaster.md +117 -0
  64. package/.cursor/commands/tm/learn.md +103 -0
  65. package/.cursor/commands/tm/list-tasks-by-status.md +39 -0
  66. package/.cursor/commands/tm/list-tasks-with-subtasks.md +29 -0
  67. package/.cursor/commands/tm/list-tasks.md +43 -0
  68. package/.cursor/commands/tm/next-task.md +66 -0
  69. package/.cursor/commands/tm/parse-prd-with-research.md +48 -0
  70. package/.cursor/commands/tm/parse-prd.md +49 -0
  71. package/.cursor/commands/tm/project-status.md +64 -0
  72. package/.cursor/commands/tm/quick-install-taskmaster.md +22 -0
  73. package/.cursor/commands/tm/remove-all-subtasks.md +93 -0
  74. package/.cursor/commands/tm/remove-dependency.md +62 -0
  75. package/.cursor/commands/tm/remove-subtask.md +84 -0
  76. package/.cursor/commands/tm/remove-subtasks.md +86 -0
  77. package/.cursor/commands/tm/remove-task.md +107 -0
  78. package/.cursor/commands/tm/setup-models.md +51 -0
  79. package/.cursor/commands/tm/show-task.md +82 -0
  80. package/.cursor/commands/tm/smart-workflow.md +55 -0
  81. package/.cursor/commands/tm/sync-readme.md +117 -0
  82. package/.cursor/commands/tm/tm-main.md +146 -0
  83. package/.cursor/commands/tm/to-cancelled.md +55 -0
  84. package/.cursor/commands/tm/to-deferred.md +47 -0
  85. package/.cursor/commands/tm/to-done.md +44 -0
  86. package/.cursor/commands/tm/to-in-progress.md +36 -0
  87. package/.cursor/commands/tm/to-pending.md +32 -0
  88. package/.cursor/commands/tm/to-review.md +40 -0
  89. package/.cursor/commands/tm/update-single-task.md +119 -0
  90. package/.cursor/commands/tm/update-task.md +72 -0
  91. package/.cursor/commands/tm/update-tasks-from-id.md +108 -0
  92. package/.cursor/commands/tm/validate-dependencies.md +71 -0
  93. package/.cursor/commands/tm/view-models.md +51 -0
  94. package/.cursor/mcp.json +20 -0
  95. package/.cursor/rules/cursor_rules.mdc +53 -0
  96. package/.cursor/rules/self_improve.mdc +72 -0
  97. package/.cursor/rules/taskmaster/dev_workflow.mdc +424 -0
  98. package/.cursor/rules/taskmaster/taskmaster.mdc +573 -0
  99. package/.env.example +12 -0
  100. package/.gemini/commands/tm/add-dependency.toml +58 -0
  101. package/.gemini/commands/tm/add-subtask.toml +79 -0
  102. package/.gemini/commands/tm/add-task.toml +81 -0
  103. package/.gemini/commands/tm/analyze-complexity.toml +124 -0
  104. package/.gemini/commands/tm/analyze-project.toml +100 -0
  105. package/.gemini/commands/tm/auto-implement-tasks.toml +100 -0
  106. package/.gemini/commands/tm/command-pipeline.toml +80 -0
  107. package/.gemini/commands/tm/complexity-report.toml +120 -0
  108. package/.gemini/commands/tm/convert-task-to-subtask.toml +74 -0
  109. package/.gemini/commands/tm/expand-all-tasks.toml +54 -0
  110. package/.gemini/commands/tm/expand-task.toml +52 -0
  111. package/.gemini/commands/tm/fix-dependencies.toml +84 -0
  112. package/.gemini/commands/tm/help.toml +101 -0
  113. package/.gemini/commands/tm/init-project-quick.toml +49 -0
  114. package/.gemini/commands/tm/init-project.toml +53 -0
  115. package/.gemini/commands/tm/install-taskmaster.toml +120 -0
  116. package/.gemini/commands/tm/learn.toml +106 -0
  117. package/.gemini/commands/tm/list-tasks-by-status.toml +42 -0
  118. package/.gemini/commands/tm/list-tasks-with-subtasks.toml +32 -0
  119. package/.gemini/commands/tm/list-tasks.toml +46 -0
  120. package/.gemini/commands/tm/next-task.toml +69 -0
  121. package/.gemini/commands/tm/parse-prd-with-research.toml +51 -0
  122. package/.gemini/commands/tm/parse-prd.toml +52 -0
  123. package/.gemini/commands/tm/project-status.toml +67 -0
  124. package/.gemini/commands/tm/quick-install-taskmaster.toml +25 -0
  125. package/.gemini/commands/tm/remove-all-subtasks.toml +96 -0
  126. package/.gemini/commands/tm/remove-dependency.toml +65 -0
  127. package/.gemini/commands/tm/remove-subtask.toml +87 -0
  128. package/.gemini/commands/tm/remove-subtasks.toml +89 -0
  129. package/.gemini/commands/tm/remove-task.toml +110 -0
  130. package/.gemini/commands/tm/setup-models.toml +54 -0
  131. package/.gemini/commands/tm/show-task.toml +85 -0
  132. package/.gemini/commands/tm/smart-workflow.toml +58 -0
  133. package/.gemini/commands/tm/sync-readme.toml +120 -0
  134. package/.gemini/commands/tm/tm-main.toml +149 -0
  135. package/.gemini/commands/tm/to-cancelled.toml +58 -0
  136. package/.gemini/commands/tm/to-deferred.toml +50 -0
  137. package/.gemini/commands/tm/to-done.toml +47 -0
  138. package/.gemini/commands/tm/to-in-progress.toml +39 -0
  139. package/.gemini/commands/tm/to-pending.toml +35 -0
  140. package/.gemini/commands/tm/to-review.toml +43 -0
  141. package/.gemini/commands/tm/update-single-task.toml +122 -0
  142. package/.gemini/commands/tm/update-task.toml +75 -0
  143. package/.gemini/commands/tm/update-tasks-from-id.toml +111 -0
  144. package/.gemini/commands/tm/validate-dependencies.toml +74 -0
  145. package/.gemini/commands/tm/view-models.toml +54 -0
  146. package/.gemini/settings.json +20 -0
  147. package/.mcp.json +15 -0
  148. package/.releaserc.json +115 -0
  149. package/.taskmaster/CLAUDE.md +435 -0
  150. package/.taskmaster/config.json +44 -0
  151. package/.taskmaster/docs/prd.txt +584 -0
  152. package/.taskmaster/state.json +6 -0
  153. package/.taskmaster/tasks/tasks.json +304 -0
  154. package/.taskmaster/templates/example_prd.txt +47 -0
  155. package/.taskmaster/templates/example_prd_rpg.txt +511 -0
  156. package/CLAUDE.md +5 -0
  157. package/README.md +551 -0
  158. package/coverage/clover.xml +412 -0
  159. package/coverage/coverage-final.json +2 -0
  160. package/coverage/lcov-report/base.css +224 -0
  161. package/coverage/lcov-report/block-navigation.js +87 -0
  162. package/coverage/lcov-report/favicon.png +0 -0
  163. package/coverage/lcov-report/index.html +116 -0
  164. package/coverage/lcov-report/index.js.html +2884 -0
  165. package/coverage/lcov-report/prettify.css +1 -0
  166. package/coverage/lcov-report/prettify.js +2 -0
  167. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  168. package/coverage/lcov-report/sorter.js +196 -0
  169. package/coverage/lcov.info +896 -0
  170. package/internal-docs/CLAUDE.md +139 -0
  171. package/internal-docs/DEPLOYMENT.md +351 -0
  172. package/internal-docs/NPM_DEPLOYMENT_GUIDE.md +203 -0
  173. package/internal-docs/OBSIDIAN_PROJECT_PROMPT.md +302 -0
  174. package/internal-docs/TEST_RESULTS.md +153 -0
  175. package/internal-docs/TEST_SIMULATION.md +27 -0
  176. package/lib/index.d.ts +226 -39
  177. package/lib/index.js +767 -121
  178. package/package.json +54 -17
@@ -0,0 +1,302 @@
1
+ # jell-utils.js - Obsidian 프로젝트 문서
2
+
3
+ ## 프로젝트 개요
4
+
5
+ **프로젝트명**: jell-utils
6
+ **버전**: 0.1.0
7
+ **타입**: TypeScript 기반 NPM 패키지
8
+ **목적**: 개인용 JavaScript/TypeScript 유틸리티 함수 라이브러리
9
+ **저장소**: https://github.com/jellive/jell-utils.js
10
+ **NPM**: https://www.npmjs.com/package/jell-utils
11
+ **라이선스**: MIT
12
+ **작성자**: Jell <jellive7@gmail.com>
13
+
14
+ ## 프로젝트 상태
15
+
16
+ - ✅ **배포 상태**: 활성 (npm에 배포됨)
17
+ - ✅ **테스트**: 50개 테스트 케이스, 79.67% 커버리지
18
+ - ✅ **빌드**: TypeScript → JavaScript 컴파일
19
+ - ✅ **품질 관리**: ESLint, Prettier 적용
20
+ - ✅ **CI/CD**: GitHub Actions (semantic-release)
21
+
22
+ ## 핵심 기능 카테고리
23
+
24
+ ### 1. 한국어 관련 기능
25
+
26
+ - `isKorean(message: string)`: 한글 문자 포함 여부 검사
27
+ - `isBusinessNumber(businessNumber: string)`: 사업자등록번호 유효성 검증 (체크섬 알고리즘)
28
+ - `chosungSearch(str: string, search: string)`: 한글 초성 검색 (예: "ㄱㄴㄷ"로 "가나다" 검색)
29
+ - `getKoreanDate(dateString, isYear)`: 한국식 날짜 포맷 (예: "3월 15일", "2024년 3월 15일")
30
+
31
+ ### 2. 문자열 처리
32
+
33
+ - `parseTag(txt: string)`: HTML 엔티티 디코딩 (&lt; → <)
34
+ - `toCamelCase(txt: string)`: snake_case → camelCase 변환
35
+ - `toSnakeCase(txt: string)`: 일반 문자열 → snake_case 변환
36
+ - `toTitleCase(txt: string)`: Title Case 변환 (첫 글자 대문자)
37
+ - `toText(txt: string)`: HTML <br> → \n 변환
38
+ - `toHtml(txt: string)`: \n → <br> 변환
39
+ - `clearTag(txt: string, preserveErrorTags)`: XSS 방지하며 HTML 태그 제거
40
+ - `replaceBetween(str, txt, startIndex, endIndex)`: 인덱스 기반 문자열 교체
41
+ - `extractNumbers(str: string)`: 문자열에서 숫자만 추출
42
+ - `maskString(str, visibleStart, visibleEnd, maskChar)`: 민감정보 마스킹 (예: 카드번호)
43
+ - `getFileExtension(filename: string)`: 파일 확장자 추출
44
+
45
+ ### 3. 숫자 및 시간 파싱
46
+
47
+ - `parseNumber(target: string, defaultValue: number, isFloat)`: 문자열을 숫자로 안전하게 파싱
48
+ - `parseTime(target: string, defaultValue: number)`: 시간 문자열 파싱 (MM:SS, HH:MM:SS)
49
+
50
+ ### 4. 날짜 처리
51
+
52
+ - `getNowDate()`: 현재 시간을 datetime 포맷으로 반환
53
+ - `formatDate(date)`: yyyy-mm-dd 포맷으로 변환
54
+ - `calDDay(date)`: D-day 계산
55
+ - `dateDiff(date1, date2)`: 두 날짜 차이 계산 (일/시간/분/초 객체 반환)
56
+
57
+ ### 5. 객체 조작
58
+
59
+ - `clone<T>(obj: T)`: 깊은 복사 (structuredClone 또는 JSON fallback)
60
+ - `getByPath<T>(obj, path, defaultValue)`: 경로 문자열로 중첩 객체 값 가져오기 (예: 'user.profile.name')
61
+ - `setByPath(obj, path, value)`: 경로 문자열로 중첩 객체 값 설정
62
+ - `deepMerge<T>(target, source)`: 객체 깊은 병합
63
+ - `objectToQueryString(obj)`: 객체를 URL 쿼리 스트링으로 변환
64
+
65
+ ### 6. 배열 조작
66
+
67
+ - `equalArrays(a, b)`: 배열 비교 (얕은 비교)
68
+ - `groupBy<T>(array, key)`: 배열을 특정 키로 그룹화
69
+ - `sortBy<T>(array, key, order)`: 객체 배열 정렬 (asc/desc)
70
+
71
+ ### 7. 비동기 처리
72
+
73
+ - `retry<T>(fn, maxRetries, delay)`: exponential backoff로 비동기 함수 재시도
74
+
75
+ ### 8. 브라우저 유틸리티
76
+
77
+ - `isiOS()`: iOS 기기 감지 (User Agent 기반)
78
+
79
+ ## 기술 스택
80
+
81
+ ### 언어 및 런타임
82
+
83
+ - TypeScript 5.2.2
84
+ - Node.js (ES6+)
85
+
86
+ ### 개발 도구
87
+
88
+ - **빌드**: TypeScript Compiler (tsc)
89
+ - **테스트**: Jest 29.7.0 + ts-jest
90
+ - **린트**: ESLint + @typescript-eslint
91
+ - **포맷팅**: Prettier
92
+ - **CI/CD**: semantic-release + GitHub Actions
93
+
94
+ ### 의존성 관리
95
+
96
+ - npm (주)
97
+ - yarn (부)
98
+
99
+ ## 프로젝트 구조
100
+
101
+ ```
102
+ jell-utils.js/
103
+ ├── src/
104
+ │ └── index.ts # 메인 소스 파일 (모든 유틸 함수)
105
+ ├── lib/
106
+ │ ├── index.js # 컴파일된 JavaScript
107
+ │ └── index.d.ts # TypeScript 타입 정의
108
+ ├── __tests__/
109
+ │ ├── korean.test.ts # 한국어 관련 테스트
110
+ │ ├── string.test.ts # 문자열 처리 테스트
111
+ │ ├── number.test.ts # 숫자/시간 파싱 테스트
112
+ │ ├── date.test.ts # 날짜 처리 테스트
113
+ │ ├── object.test.ts # 객체 조작 테스트
114
+ │ ├── array.test.ts # 배열 조작 테스트
115
+ │ └── async.test.ts # 비동기 처리 테스트
116
+ ├── coverage/ # 테스트 커버리지 리포트
117
+ ├── .github/workflows/ # GitHub Actions CI/CD
118
+ ├── package.json
119
+ ├── tsconfig.json
120
+ ├── jestconfig.json
121
+ └── .npmrc # npm 인증 토큰 (gitignore)
122
+ ```
123
+
124
+ ## 개발 워크플로우
125
+
126
+ ### 로컬 개발
127
+
128
+ ```bash
129
+ # 의존성 설치
130
+ npm install
131
+
132
+ # 빌드
133
+ npm run build
134
+
135
+ # 테스트
136
+ npm test
137
+ npm run test:coverage
138
+
139
+ # 린트
140
+ npm run lint
141
+ npm run lint:fix
142
+
143
+ # 포맷팅
144
+ npm run format
145
+ ```
146
+
147
+ ### 배포 프로세스
148
+
149
+ ```bash
150
+ # 1. 변경사항 커밋
151
+ git add .
152
+ git commit -m "feat: new feature description"
153
+ git push
154
+
155
+ # 2. 버전 업데이트
156
+ npm version patch # 버그 수정
157
+ npm version minor # 새 기능
158
+ npm version major # Breaking changes
159
+
160
+ # 3. 배포 (자동으로 test + lint + build 실행)
161
+ npm publish
162
+ ```
163
+
164
+ ### Git Workflow
165
+
166
+ - **브랜치**: master (메인 브랜치)
167
+ - **커밋 컨벤션**: Conventional Commits
168
+ - `feat:` - 새 기능 (MINOR)
169
+ - `fix:` - 버그 수정 (PATCH)
170
+ - `docs:` - 문서 변경
171
+ - `chore:` - 빌드/설정 변경
172
+ - `BREAKING CHANGE:` - Breaking changes (MAJOR)
173
+
174
+ ## 품질 관리
175
+
176
+ ### 테스트 커버리지
177
+
178
+ - **Statements**: 79.67%
179
+ - **Branch**: 73.38%
180
+ - **Functions**: 88.88%
181
+ - **Lines**: 82.81%
182
+ - **총 테스트**: 50개 (모두 통과)
183
+
184
+ ### 자동화된 검증
185
+
186
+ - `prepublishOnly`: 배포 전 test + lint 자동 실행
187
+ - `prepare`: 빌드 전 자동 실행
188
+ - GitHub Actions: PR 및 push 시 CI 자동 실행
189
+
190
+ ## 사용 예시
191
+
192
+ ```typescript
193
+ import util from 'jell-utils'
194
+
195
+ // 한국어 검증
196
+ util.isKorean('안녕하세요') // true
197
+ util.isBusinessNumber('1018626554') // true
198
+ util.chosungSearch('김철수', 'ㄱㅊㅅ') // true
199
+
200
+ // 문자열 처리
201
+ util.toCamelCase('hello_world') // 'helloWorld'
202
+ util.maskString('1234567890', 3, 3) // '123****890'
203
+
204
+ // 객체 조작
205
+ const obj = { user: { profile: { name: 'John' } } }
206
+ util.getByPath(obj, 'user.profile.name') // 'John'
207
+
208
+ // 배열 처리
209
+ const items = [{ age: 30 }, { age: 25 }, { age: 35 }]
210
+ util.sortBy(items, 'age', 'asc') // age 기준 오름차순 정렬
211
+
212
+ // 비동기 재시도
213
+ await util.retry(
214
+ async () => {
215
+ return await fetchData()
216
+ },
217
+ 3,
218
+ 1000
219
+ ) // 3번 재시도, 1초 간격
220
+ ```
221
+
222
+ ## 주요 이정표
223
+
224
+ ### v0.0.x (초기 버전)
225
+
226
+ - 기본 유틸리티 함수 구현
227
+ - 한국어 관련 기능
228
+
229
+ ### v0.1.0 (2025-10-11) ✨ 현재 버전
230
+
231
+ - 50개 포괄적인 테스트 케이스 추가
232
+ - 한국어 특화 기능 강화 (사업자등록번호, 초성 검색)
233
+ - 객체/배열 고급 조작 함수 추가
234
+ - 비동기 retry 유틸리티 추가
235
+ - 테스트 커버리지 79.67% 달성
236
+ - ESLint strict 모드 적용 (any 타입 제거)
237
+ - npm 배포 자동화 개선
238
+
239
+ ## 향후 계획
240
+
241
+ ### 단기 (v0.2.0)
242
+
243
+ - [ ] 추가 한국어 유틸리티 (주민등록번호 검증, 한글 자모 분리 등)
244
+ - [ ] 테스트 커버리지 90% 이상 달성
245
+ - [ ] 브라우저 호환성 테스트 추가
246
+ - [ ] 성능 벤치마크 추가
247
+
248
+ ### 중기 (v0.x.x)
249
+
250
+ - [ ] Tree-shaking 지원 (개별 함수 import)
251
+ - [ ] 웹 워커 지원
252
+ - [ ] React hooks 버전 제공
253
+ - [ ] 더 많은 날짜/시간 유틸리티
254
+
255
+ ### 장기 (v1.0.0)
256
+
257
+ - [ ] 안정화 및 API freeze
258
+ - [ ] 완전한 문서화 (JSDoc + 사이트)
259
+ - [ ] 플러그인 시스템
260
+ - [ ] 다국어 지원 확장
261
+
262
+ ## 알려진 이슈
263
+
264
+ - TypeScript 5.9.2 사용 중 (ESLint는 5.4.0 미만 권장)
265
+ - jest의 ts-jest 경고 (allowJs 설정 관련)
266
+ - Git push 권한 문제 (credential 재설정 필요)
267
+
268
+ ## 참고 문서
269
+
270
+ - [NPM 배포 가이드](./NPM_DEPLOYMENT_GUIDE.md) - 로컬 전용
271
+ - [GitHub Repository](https://github.com/jellive/jell-utils.js)
272
+ - [NPM Package](https://www.npmjs.com/package/jell-utils)
273
+ - [블로그](https://blog.jell.kr)
274
+
275
+ ## 프로젝트 관리 메타데이터
276
+
277
+ **프로젝트 타입**: 오픈소스 라이브러리
278
+ **유지보수 상태**: 활발히 개발 중
279
+ **기여 가능 여부**: Yes (MIT 라이선스)
280
+ **주 사용자**: 개인 프로젝트 (공개)
281
+ **업데이트 주기**: 기능 추가 시 비정기적
282
+ **최종 업데이트**: 2025-10-11 (v0.1.0 배포)
283
+
284
+ ---
285
+
286
+ ## Obsidian 태그
287
+
288
+ #project #typescript #npm #utilities #korean #open-source #active #library
289
+
290
+ ## 연관 프로젝트
291
+
292
+ - (여기에 이 라이브러리를 사용하는 다른 프로젝트 링크 추가)
293
+
294
+ ## 노트
295
+
296
+ - 이 라이브러리는 개인 프로젝트에서 자주 사용하는 패턴들을 모아놓은 것
297
+ - 한국어 특화 기능이 강점
298
+ - TypeScript로 작성되어 타입 안정성 보장
299
+ - 테스트 커버리지가 높아 안정적
300
+
301
+
302
+
@@ -0,0 +1,153 @@
1
+ # 🧪 CI/CD Pipeline Test Results
2
+
3
+ ## 📊 Test Summary
4
+
5
+ **전체 테스트 완료**: 2024-01-XX
6
+ **테스트 환경**: 로컬 + GitHub Actions 시뮬레이션
7
+ **안전성**: ✅ 실제 배포 방지됨 (NPM_TOKEN 미설정)
8
+
9
+ ---
10
+
11
+ ## ✅ 성공한 테스트들
12
+
13
+ ### 1. **Semantic Release 설정** ✅
14
+ - **상태**: 완전 작동
15
+ - **검증 결과**:
16
+ - 모든 플러그인 로드됨
17
+ - Conventional commit 인식됨
18
+ - BREAKING CHANGE → Major 버전 증가 예정 (0.0.18 → 1.0.0)
19
+ - 브랜치 필터링 정상 작동 (reboot 브랜치에서 배포 차단됨)
20
+
21
+ ### 2. **Git Hooks (Husky)** ✅
22
+ - **상태**: 완전 작동
23
+ - **검증 결과**:
24
+ - Pre-commit: 린트 및 포맷팅 자동 실행 ✅
25
+ - Commit-msg: Conventional commits 검증 ✅
26
+ - Lint-staged: 변경된 파일만 처리 ✅
27
+
28
+ ### 3. **Build & Test Pipeline** ✅
29
+ - **상태**: 완전 작동
30
+ - **검증 결과**:
31
+ - TypeScript 빌드 성공 ✅
32
+ - Jest 테스트 통과 ✅ (5/5 tests)
33
+ - ESLint 통과 ✅
34
+ - 의존성 설치 성공 ✅
35
+
36
+ ### 4. **GitHub Actions 워크플로우** ✅
37
+ - **상태**: 문법 검증 완료
38
+ - **파일 구조**:
39
+ - `ci.yml`: Multi-Node.js, Cross-platform 테스트
40
+ - `release.yml`: Semantic release + NPM 배포
41
+ - 워크플로우 연결: CI 성공 → Release 실행
42
+
43
+ ### 5. **Conventional Commits** ✅
44
+ - **테스트 커밋**: `feat: implement modern CI/CD pipeline`
45
+ - **BREAKING CHANGE**: 포함됨
46
+ - **예상 버전**: 0.0.18 → 1.0.0
47
+
48
+ ### 6. **안전성 검증** ✅
49
+ - NPM_TOKEN 미설정으로 실제 배포 차단 확인
50
+ - 브랜치 필터링으로 테스트 브랜치에서 배포 차단 확인
51
+
52
+ ---
53
+
54
+ ## ⚠️ 테스트 제한사항
55
+
56
+ ### 1. **GitHub Push 권한**
57
+ - **상태**: 권한 없음 (예상됨)
58
+ - **원인**: `hgyoo-azflow` → `jellive/jell-utils.js` 권한 없음
59
+ - **해결**: 프로젝트 소유자가 직접 push 필요
60
+
61
+ ### 2. **실제 NPM 배포**
62
+ - **상태**: 테스트 안함 (의도적)
63
+ - **원인**: NPM_TOKEN 미설정
64
+ - **해결**: Repository secrets에 NPM_TOKEN 설정 후 테스트
65
+
66
+ ---
67
+
68
+ ## 🚀 실제 운영을 위한 다음 단계
69
+
70
+ ### **Step 1: Repository Secrets 설정**
71
+ GitHub Repository → Settings → Secrets and variables → Actions:
72
+
73
+ ```bash
74
+ # NPM 배포 토큰 (필수)
75
+ NPM_TOKEN=npm_xxxxxxxxxxxxxxxx
76
+
77
+ # 선택사항
78
+ SLACK_WEBHOOK_URL=https://hooks.slack.com/...
79
+ CODECOV_TOKEN=xxxxxxxx-xxxx-xxxx...
80
+ ```
81
+
82
+ ### **Step 2: Branch Protection Rules**
83
+ Repository → Settings → Branches → Add rule:
84
+ - Branch name pattern: `main`
85
+ - ✅ Require pull request before merging
86
+ - ✅ Require status checks to pass
87
+
88
+ ### **Step 3: 실제 배포 테스트**
89
+ ```bash
90
+ # 1. 작은 변경사항 커밋
91
+ git checkout -b test/ci-cd-validation
92
+ echo "# CI/CD Test" > TEST.md
93
+ git add TEST.md
94
+ git commit -m "docs: add CI/CD validation test"
95
+
96
+ # 2. PR 생성 및 merge
97
+ git push origin test/ci-cd-validation
98
+ # GitHub에서 PR 생성 → CI 실행 확인 → Merge
99
+
100
+ # 3. 자동 배포 확인
101
+ # GitHub Actions에서 release 워크플로우 실행
102
+ # NPM에 새 버전 자동 배포
103
+ # GitHub Release 자동 생성
104
+ ```
105
+
106
+ ---
107
+
108
+ ## 🎯 예상 결과
109
+
110
+ ### **실제 배포시 workflow:**
111
+ 1. **CI Pipeline**: ✅ 다중 환경 테스트 (Ubuntu/Windows/macOS, Node 18/20/21)
112
+ 2. **Security Scan**: ✅ 의존성 취약점 검사
113
+ 3. **Semantic Analysis**: ✅ 커밋 분석 → 버전 계산 (1.0.0)
114
+ 4. **Automated Release**: ✅ GitHub Release + Changelog 생성
115
+ 5. **NPM Publish**: ✅ npm registry 배포
116
+ 6. **Notifications**: ✅ Slack 알림 (설정시)
117
+
118
+ ### **버전 관리:**
119
+ - **Current**: 0.0.18
120
+ - **Next Release**: 1.0.0 (BREAKING CHANGE 감지)
121
+ - **Changelog**: 자동 생성
122
+ - **Git Tags**: 자동 생성
123
+
124
+ ---
125
+
126
+ ## 📋 Test Checklist
127
+
128
+ - [x] Semantic Release 설정 및 검증
129
+ - [x] Conventional Commits 형식 검증
130
+ - [x] Git Hooks 작동 확인
131
+ - [x] Build Pipeline 검증
132
+ - [x] GitHub Actions YAML 문법 확인
133
+ - [x] 안전성 검증 (실제 배포 차단)
134
+ - [ ] 실제 GitHub Push (권한 필요)
135
+ - [ ] NPM Token 설정 후 배포 테스트
136
+ - [ ] Slack 알림 테스트
137
+
138
+ ---
139
+
140
+ ## 🎉 결론
141
+
142
+ **✅ CI/CD 파이프라인이 완전히 준비되었습니다!**
143
+
144
+ 모든 핵심 기능들이 로컬에서 검증되었으며, 실제 배포를 위해서는:
145
+ 1. GitHub Repository 접근 권한 확보
146
+ 2. NPM_TOKEN 설정
147
+ 3. Branch protection rules 적용
148
+
149
+ 이후 단순히 `main` 브랜치에 conventional commit으로 merge하기만 하면 **완전 자동화된 버전 관리 + NPM 배포**가 실행됩니다.
150
+
151
+ ---
152
+
153
+ *테스트 완료 시점: $(date)*
@@ -0,0 +1,27 @@
1
+ # 🧪 CI/CD Pipeline Test Simulation
2
+
3
+ ## Test Environment
4
+
5
+ - Branch: reboot (safe for testing)
6
+ - Date: $(date)
7
+ - Purpose: Validate CI/CD pipeline without actual deployment
8
+
9
+ ## Test Results
10
+
11
+ ### ✅ Configuration Validation
12
+
13
+ - Semantic Release: LOADED
14
+ - All Plugins: CONFIGURED
15
+ - Dependencies: INSTALLED
16
+
17
+ ### 🔄 Next Steps
18
+
19
+ 1. Create test commit with conventional format
20
+ 2. Run semantic-release dry-run
21
+ 3. Validate version calculation
22
+ 4. Test GitHub Actions workflow syntax
23
+
24
+ ---
25
+
26
+ _This is a test file for CI/CD pipeline validation_
27
+ Test change