@daawoonkim/create-arch-app 0.1.0 β†’ 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.
@@ -0,0 +1,172 @@
1
+ # Contributing to create-arch-app
2
+
3
+ Thank you for your interest in contributing to create-arch-app! πŸŽ‰
4
+
5
+ ## πŸš€ Getting Started
6
+
7
+ ### Prerequisites
8
+ - Node.js 18.0.0 or higher
9
+ - npm or yarn
10
+ - Git
11
+
12
+ ### Setup Development Environment
13
+
14
+ ```bash
15
+ # Clone the repository
16
+ git clone git@github.com:hec8897/create-arch-app.git
17
+ cd create-arch-app
18
+
19
+ # Install dependencies
20
+ npm install
21
+
22
+ # Build the project
23
+ npm run build
24
+
25
+ # Link for local testing
26
+ npm link
27
+ ```
28
+
29
+ ## πŸ”„ Development Workflow
30
+
31
+ ### 1. Create a Feature Branch
32
+
33
+ ```bash
34
+ git checkout main
35
+ git pull origin main
36
+ git checkout -b feature/your-feature-name
37
+ ```
38
+
39
+ ### 2. Make Your Changes
40
+
41
+ - Write clear, concise commit messages
42
+ - Follow existing code style
43
+ - Add tests if applicable
44
+ - Update documentation
45
+
46
+ ### 3. Test Your Changes
47
+
48
+ ```bash
49
+ # Build
50
+ npm run build
51
+
52
+ # Test locally
53
+ cd ~/test-projects
54
+ create-arch-app test-app
55
+
56
+ # Verify the generated project
57
+ cd test-app
58
+ npm install
59
+ npm run dev
60
+ ```
61
+
62
+ ### 4. Commit Your Changes
63
+
64
+ ```bash
65
+ git add .
66
+ git commit -m "feat: add new feature"
67
+ ```
68
+
69
+ **Commit Message Format:**
70
+ - `feat:` - New feature
71
+ - `fix:` - Bug fix
72
+ - `docs:` - Documentation changes
73
+ - `style:` - Code style changes (formatting, etc.)
74
+ - `refactor:` - Code refactoring
75
+ - `test:` - Adding or updating tests
76
+ - `chore:` - Build process or auxiliary tool changes
77
+
78
+ ### 5. Push and Create PR
79
+
80
+ ```bash
81
+ git push origin feature/your-feature-name
82
+ ```
83
+
84
+ Then create a Pull Request on GitHub.
85
+
86
+ ## πŸ“ Code Guidelines
87
+
88
+ ### TypeScript
89
+ - Use TypeScript for all new code
90
+ - Maintain type safety
91
+ - Use interfaces for public APIs
92
+
93
+ ### File Structure
94
+ - Keep generators modular
95
+ - Separate concerns (prompts, generators, utils)
96
+ - Use meaningful file and function names
97
+
98
+ ### Testing
99
+ - Test major features manually
100
+ - Verify all architecture patterns work
101
+ - Check both React and Next.js outputs
102
+
103
+ ## πŸ› Bug Reports
104
+
105
+ When reporting bugs, please include:
106
+ - Steps to reproduce
107
+ - Expected behavior
108
+ - Actual behavior
109
+ - Your environment (OS, Node version)
110
+ - CLI options used
111
+
112
+ ## πŸ’‘ Feature Requests
113
+
114
+ We welcome feature requests! Please:
115
+ - Check if it already exists in issues
116
+ - Describe the use case
117
+ - Explain why it would be useful
118
+ - Consider backward compatibility
119
+
120
+ ## πŸ“¦ Adding New Features
121
+
122
+ ### Adding a New Architecture Pattern
123
+
124
+ 1. Update `src/types.ts` with new architecture type
125
+ 2. Add prompt option in `src/prompts/projectSetup.ts`
126
+ 3. Create generator logic in `src/generators/`
127
+ 4. Test with both React and Next.js
128
+ 5. Update README.md and documentation
129
+
130
+ ### Adding a New Library Option
131
+
132
+ 1. Update types in `src/types.ts`
133
+ 2. Add prompt in `src/prompts/projectSetup.ts`
134
+ 3. Update `src/utils/dependencies.ts`
135
+ 4. Update generators to include the library
136
+ 5. Test integration
137
+ 6. Update documentation
138
+
139
+ ## βœ… Pull Request Checklist
140
+
141
+ Before submitting a PR, ensure:
142
+
143
+ - [ ] Code builds successfully (`npm run build`)
144
+ - [ ] Tested manually with at least 2 architecture patterns
145
+ - [ ] Updated README.md if needed
146
+ - [ ] Updated CHANGELOG.md
147
+ - [ ] Commit messages follow convention
148
+ - [ ] No console.logs in production code
149
+ - [ ] TypeScript types are correct
150
+
151
+ ## 🎯 Priority Areas
152
+
153
+ We're especially interested in contributions for:
154
+ - Additional architecture patterns
155
+ - More library integrations
156
+ - Improved error handling
157
+ - Better testing coverage
158
+ - Documentation improvements
159
+
160
+ ## πŸ“ž Questions?
161
+
162
+ - Open an issue for discussion
163
+ - Check existing issues and PRs
164
+ - Review documentation
165
+
166
+ ## πŸ“„ License
167
+
168
+ By contributing, you agree that your contributions will be licensed under the MIT License.
169
+
170
+ ---
171
+
172
+ Thank you for contributing! πŸ™
package/PUBLISHING.md ADDED
@@ -0,0 +1,304 @@
1
+ # npm 배포 κ°€μ΄λ“œ
2
+
3
+ 이 λ¬Έμ„œλŠ” `@daawoonkim/create-arch-app` νŒ¨ν‚€μ§€λ₯Ό npm에 λ°°ν¬ν•˜λŠ” 방법을 μ„€λͺ…ν•©λ‹ˆλ‹€.
4
+
5
+ ## πŸ“‹ 사전 μš”κ΅¬μ‚¬ν•­
6
+
7
+ - npm 계정 (https://www.npmjs.com/)
8
+ - npm CLI 둜그인
9
+ - ν”„λ‘œμ νŠΈ λΉŒλ“œ μ™„λ£Œ
10
+
11
+ ## πŸ” 1. npm 인증 μ„€μ •
12
+
13
+ ### 방법 1: Automation Token μ‚¬μš© (ꢌμž₯)
14
+
15
+ **npm μ›Ήμ‚¬μ΄νŠΈμ—μ„œ 토큰 생성:**
16
+
17
+ 1. https://www.npmjs.com/settings/daawoonkim/tokens 접속
18
+ 2. "Generate New Token" 클릭
19
+ 3. **Token Type: "Automation"** 선택 (μ€‘μš”!)
20
+ 4. μ„€λͺ… μž…λ ₯ (예: "create-arch-app deployment")
21
+ 5. "Generate Token" 클릭
22
+ 6. 토큰 볡사 (ν•œ 번만 ν‘œμ‹œλ¨!)
23
+
24
+ **λ‘œμ»¬μ— 토큰 μ„€μ •:**
25
+
26
+ ```bash
27
+ # .npmrc νŒŒμΌμ— 토큰 μΆ”κ°€
28
+ echo "//registry.npmjs.org/:_authToken=YOUR_TOKEN_HERE" > ~/.npmrc
29
+
30
+ # κΆŒν•œ μ„€μ •
31
+ chmod 600 ~/.npmrc
32
+ ```
33
+
34
+ `YOUR_TOKEN_HERE`λ₯Ό μƒμ„±ν•œ ν† ν°μœΌλ‘œ κ΅μ²΄ν•˜μ„Έμš”.
35
+
36
+ ### 방법 2: λΈŒλΌμš°μ € 둜그인
37
+
38
+ ```bash
39
+ npm login
40
+ ```
41
+
42
+ λΈŒλΌμš°μ €κ°€ 열리면 λ‘œκ·ΈμΈν•˜κ³  인증을 μ™„λ£Œν•˜μ„Έμš”.
43
+
44
+ ### 방법 3: OTP μ‚¬μš©
45
+
46
+ ```bash
47
+ # 둜그인
48
+ npm login
49
+
50
+ # 배포 μ‹œ OTP μ½”λ“œ 포함
51
+ npm publish --access public --otp=123456
52
+ ```
53
+
54
+ 인증 μ•±μ—μ„œ 6자리 μ½”λ“œλ₯Ό λ°›μ•„ μ‚¬μš©ν•˜μ„Έμš”.
55
+
56
+ ## πŸ“¦ 2. 배포 μ „ 체크리슀트
57
+
58
+ ### 버전 확인 및 μ—…λ°μ΄νŠΈ
59
+
60
+ ```bash
61
+ # ν˜„μž¬ 버전 확인
62
+ npm version
63
+
64
+ # 버전 μ—…λ°μ΄νŠΈ (μžλ™μœΌλ‘œ git tag 생성)
65
+ npm version patch # 0.1.0 -> 0.1.1 (버그 μˆ˜μ •)
66
+ npm version minor # 0.1.0 -> 0.2.0 (μƒˆ κΈ°λŠ₯)
67
+ npm version major # 0.1.0 -> 1.0.0 (큰 λ³€κ²½)
68
+ ```
69
+
70
+ ### λΉŒλ“œ 확인
71
+
72
+ ```bash
73
+ # TypeScript 컴파일
74
+ npm run build
75
+
76
+ # dist 폴더 확인
77
+ ls -la dist/
78
+ ```
79
+
80
+ ### ν…ŒμŠ€νŠΈ μ‹€ν–‰
81
+
82
+ ```bash
83
+ # λ‘œμ»¬μ—μ„œ CLI ν…ŒμŠ€νŠΈ
84
+ npm link
85
+ create-arch-app test-project
86
+
87
+ # 링크 ν•΄μ œ
88
+ npm unlink -g create-arch-app
89
+ ```
90
+
91
+ ### package.json 확인
92
+
93
+ ν•„μˆ˜ ν•„λ“œ 확인:
94
+ - βœ… `name`: `@daawoonkim/create-arch-app`
95
+ - βœ… `version`: μ—…λ°μ΄νŠΈλœ 버전
96
+ - βœ… `description`: νŒ¨ν‚€μ§€ μ„€λͺ…
97
+ - βœ… `keywords`: 검색 ν‚€μ›Œλ“œ
98
+ - βœ… `repository`: GitHub 링크
99
+ - βœ… `license`: MIT
100
+ - βœ… `bin`: CLI μ§„μž…μ 
101
+
102
+ ### .npmignore 확인
103
+
104
+ λ°°ν¬μ—μ„œ μ œμ™Έν•  파일 확인:
105
+ ```
106
+ src/
107
+ *.plan.md
108
+ tsconfig.json
109
+ .git/
110
+ .github/
111
+ test-output/
112
+ ```
113
+
114
+ ## πŸš€ 3. 배포 μ‹€ν–‰
115
+
116
+ ### 배포 λͺ…λ Ήμ–΄
117
+
118
+ ```bash
119
+ npm publish --access public
120
+ ```
121
+
122
+ ### 배포 확인
123
+
124
+ ```bash
125
+ # npmμ—μ„œ νŒ¨ν‚€μ§€ 정보 확인
126
+ npm info @daawoonkim/create-arch-app
127
+
128
+ # μ„€μΉ˜ ν…ŒμŠ€νŠΈ
129
+ npx @daawoonkim/create-arch-app test-app
130
+ ```
131
+
132
+ ## 🏷️ 4. Git νƒœκ·Έ 및 릴리즈
133
+
134
+ ### Git νƒœκ·Έ 생성
135
+
136
+ ```bash
137
+ # νƒœκ·Έ 생성 (npm version이 μžλ™ μƒμ„±ν•˜μ§€λ§Œ, μˆ˜λ™μœΌλ‘œλ„ κ°€λŠ₯)
138
+ git tag v0.1.1
139
+
140
+ # νƒœκ·Έ ν‘Έμ‹œ
141
+ git push --tags
142
+ ```
143
+
144
+ ### GitHub 릴리즈 생성
145
+
146
+ 1. https://github.com/hec8897/create-arch-app/releases 접속
147
+ 2. "Create a new release" 클릭
148
+ 3. νƒœκ·Έ 선택 (v0.1.1)
149
+ 4. 릴리즈 λ…ΈνŠΈ μž‘μ„±:
150
+
151
+ ```markdown
152
+ ## v0.1.1
153
+
154
+ ### πŸ› Bug Fixes
155
+ - 버그 μˆ˜μ • λ‚΄μš©
156
+
157
+ ### ✨ Features
158
+ - μƒˆλ‘œμš΄ κΈ°λŠ₯
159
+
160
+ ### πŸ“ Documentation
161
+ - λ¬Έμ„œ μ—…λ°μ΄νŠΈ
162
+ ```
163
+
164
+ 5. "Publish release" 클릭
165
+
166
+ ## πŸ”„ 5. 전체 배포 μ›Œν¬ν”Œλ‘œμš°
167
+
168
+ ```bash
169
+ # 1. 변경사항 컀밋
170
+ git add .
171
+ git commit -m "feat: add new feature"
172
+
173
+ # 2. 버전 μ—…λ°μ΄νŠΈ (μžλ™μœΌλ‘œ tag 생성)
174
+ npm version patch
175
+
176
+ # 3. λΉŒλ“œ
177
+ npm run build
178
+
179
+ # 4. 배포
180
+ npm publish --access public
181
+
182
+ # 5. Git ν‘Έμ‹œ (νƒœκ·Έ 포함)
183
+ git push origin main --tags
184
+ ```
185
+
186
+ ## ⚠️ 6. 문제 ν•΄κ²°
187
+
188
+ ### 2FA μ—λŸ¬
189
+
190
+ ```
191
+ npm ERR! 403 Two-factor authentication required
192
+ ```
193
+
194
+ **ν•΄κ²°μ±…:**
195
+ - OTP μ½”λ“œ μ‚¬μš©: `npm publish --access public --otp=123456`
196
+ - λ˜λŠ” Automation Token μ‚¬μš© (μœ„ 1단계 μ°Έμ‘°)
197
+
198
+ ### 인증 μ—λŸ¬
199
+
200
+ ```
201
+ npm ERR! 401 Unauthorized
202
+ ```
203
+
204
+ **ν•΄κ²°μ±…:**
205
+ ```bash
206
+ npm logout
207
+ npm login
208
+ ```
209
+
210
+ ### 버전 좩돌
211
+
212
+ ```
213
+ npm ERR! 403 cannot publish over existing version
214
+ ```
215
+
216
+ **ν•΄κ²°μ±…:**
217
+ ```bash
218
+ # 버전 μ—…λ°μ΄νŠΈ
219
+ npm version patch
220
+ npm publish --access public
221
+ ```
222
+
223
+ ## πŸ“Š 7. 배포 ν›„ 확인
224
+
225
+ ### npm νŒ¨ν‚€μ§€ νŽ˜μ΄μ§€
226
+ https://www.npmjs.com/package/@daawoonkim/create-arch-app
227
+
228
+ ### λ‹€μš΄λ‘œλ“œ 톡계
229
+ ```bash
230
+ npm info @daawoonkim/create-arch-app
231
+ ```
232
+
233
+ ### μ‚¬μš©μž ν…ŒμŠ€νŠΈ
234
+ ```bash
235
+ # λ‹€λ₯Έ λ””λ ‰ν† λ¦¬μ—μ„œ
236
+ cd ~/test-npm-package
237
+ npx @daawoonkim/create-arch-app my-test-app
238
+ ```
239
+
240
+ ## πŸ”’ 8. λ³΄μ•ˆ
241
+
242
+ ### .npmrc 파일 보호
243
+
244
+ ```bash
245
+ # μ ˆλŒ€λ‘œ Git에 μ»€λ°‹ν•˜μ§€ λ§ˆμ„Έμš”!
246
+ echo ".npmrc" >> .gitignore
247
+
248
+ # 파일 κΆŒν•œ μ„€μ •
249
+ chmod 600 ~/.npmrc
250
+ ```
251
+
252
+ ### 토큰 κ°±μ‹ 
253
+
254
+ Automation Token은 λ§Œλ£Œλ˜μ§€ μ•Šμ§€λ§Œ, μ •κΈ°μ μœΌλ‘œ κ°±μ‹ ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€:
255
+ 1. npm μ›Ήμ‚¬μ΄νŠΈμ—μ„œ κΈ°μ‘΄ 토큰 μ‚­μ œ
256
+ 2. μƒˆ 토큰 생성
257
+ 3. ~/.npmrc 파일 μ—…λ°μ΄νŠΈ
258
+
259
+ ## πŸ“ 9. 버전 관리 μ „λž΅
260
+
261
+ ### Semantic Versioning
262
+
263
+ - **MAJOR** (1.0.0): ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” API λ³€κ²½
264
+ - **MINOR** (0.1.0): ν•˜μœ„ ν˜Έν™˜λ˜λŠ” μƒˆ κΈ°λŠ₯
265
+ - **PATCH** (0.0.1): ν•˜μœ„ ν˜Έν™˜λ˜λŠ” 버그 μˆ˜μ •
266
+
267
+ ### 버전 μ—…λ°μ΄νŠΈ κ°€μ΄λ“œ
268
+
269
+ ```bash
270
+ # 버그 μˆ˜μ •
271
+ npm version patch
272
+
273
+ # μƒˆ κΈ°λŠ₯ μΆ”κ°€ (ν•˜μœ„ ν˜Έν™˜)
274
+ npm version minor
275
+
276
+ # 큰 λ³€κ²½ (Breaking Changes)
277
+ npm version major
278
+
279
+ # 베타 버전
280
+ npm version prerelease --preid=beta
281
+ ```
282
+
283
+ ## 🎯 10. 체크리슀트
284
+
285
+ 배포 μ „ 확인사항:
286
+
287
+ - [ ] μ½”λ“œ 변경사항 컀밋 μ™„λ£Œ
288
+ - [ ] ν…ŒμŠ€νŠΈ 톡과
289
+ - [ ] 버전 μ—…λ°μ΄νŠΈ (`npm version`)
290
+ - [ ] CHANGELOG μ—…λ°μ΄νŠΈ
291
+ - [ ] README μ—…λ°μ΄νŠΈ
292
+ - [ ] λΉŒλ“œ 성곡 (`npm run build`)
293
+ - [ ] npm 둜그인 확인
294
+ - [ ] 배포 μ‹€ν–‰ (`npm publish --access public`)
295
+ - [ ] Git νƒœκ·Έ ν‘Έμ‹œ (`git push --tags`)
296
+ - [ ] GitHub 릴리즈 생성
297
+ - [ ] npm νŒ¨ν‚€μ§€ νŽ˜μ΄μ§€ 확인
298
+ - [ ] μ‹€μ œ μ„€μΉ˜ ν…ŒμŠ€νŠΈ
299
+
300
+ ## πŸ“š μ°Έκ³  자료
301
+
302
+ - npm λ¬Έμ„œ: https://docs.npmjs.com/
303
+ - Semantic Versioning: https://semver.org/
304
+ - npm 토큰: https://docs.npmjs.com/about-access-tokens
package/README.md CHANGED
@@ -1,7 +1,18 @@
1
1
  # create-arch-app
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/@daawoonkim/create-arch-app.svg)](https://www.npmjs.com/package/@daawoonkim/create-arch-app)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@daawoonkim/create-arch-app.svg)](https://www.npmjs.com/package/@daawoonkim/create-arch-app)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ ![Status](https://img.shields.io/badge/status-MVP-orange.svg)
7
+ [![CI Tests](https://github.com/hec8897/create-arch-app/actions/workflows/test.yml/badge.svg)](https://github.com/hec8897/create-arch-app/actions/workflows/test.yml)
8
+ [![Lint](https://github.com/hec8897/create-arch-app/actions/workflows/lint.yml/badge.svg)](https://github.com/hec8897/create-arch-app/actions/workflows/lint.yml)
9
+
3
10
  DDD, Clean Architecture, Atomic Design을 μ§€μ›ν•˜λŠ” λŒ€ν™”ν˜• React/Next.js ν”„λ‘œμ νŠΈ 생성 CLI 도ꡬ
4
11
 
12
+ **πŸ“¦ npm**: https://www.npmjs.com/package/@daawoonkim/create-arch-app
13
+
14
+ > ⚠️ **ν˜„μž¬ MVP(Minimum Viable Product) λ²„μ „μž…λ‹ˆλ‹€.** 핡심 κΈ°λŠ₯은 λͺ¨λ‘ μž‘λ™ν•˜μ§€λ§Œ, ν™œλ°œνžˆ 개발 쀑이며 ν”Όλ“œλ°±μ„ λ°›κ³  μžˆμŠ΅λ‹ˆλ‹€. μ΄μŠˆλ‚˜ μ œμ•ˆ 사항이 μžˆμœΌμ‹œλ©΄ [GitHub Issues](https://github.com/hec8897/create-arch-app/issues)에 λ‚¨κ²¨μ£Όμ„Έμš”!
15
+
5
16
  ## νŠΉμ§•
6
17
 
7
18
  ✨ **4κ°€μ§€ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ 지원**
@@ -238,14 +249,54 @@ cd ~/test-project
238
249
  create-arch-app my-test-app
239
250
  ```
240
251
 
252
+ ### npm 배포
253
+
254
+ npm 배포 방법은 [PUBLISHING.md](./PUBLISHING.md)λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.
255
+
256
+ **μžλ™ 배포:** main λΈŒλžœμΉ˜μ— merge되면 μžλ™μœΌλ‘œ npm 배포가 μ‹€ν–‰λ©λ‹ˆλ‹€!
257
+
258
+ ```bash
259
+ # 1. 버전 μ—…λ°μ΄νŠΈ
260
+ npm version patch # 0.1.0 β†’ 0.1.1
261
+
262
+ # 2. PR 생성 및 merge
263
+ # main에 merge β†’ μžλ™ 배포!
264
+
265
+ # μžμ„Έν•œ λ‚΄μš©: .github/WORKFLOWS.md
266
+ ```
267
+
268
+ ## 버전 정보
269
+
270
+ ### v0.1.0 - MVP 릴리즈 (ν˜„μž¬)
271
+
272
+ **ν¬ν•¨λœ κΈ°λŠ₯:**
273
+ - βœ… 4κ°€μ§€ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ (DDD, Clean Architecture, Atomic Design, Default)
274
+ - βœ… React (Vite) & Next.js (App Router / Pages Router) 지원
275
+ - βœ… Next.js 버전 선택 (Latest, 15.x, 14.x, 13.x)
276
+ - βœ… TypeScript κΈ°λ³Έ 포함
277
+ - βœ… μŠ€νƒ€μΌλ§: Tailwind CSS, CSS Modules
278
+ - βœ… μƒνƒœκ΄€λ¦¬: Zustand, Context API
279
+ - βœ… 폼: React Hook Form
280
+ - βœ… ν…ŒμŠ€νŒ…: Vitest + Testing Library
281
+ - βœ… ν˜„μž¬ 디렉토리 생성 지원 (`.` μ˜΅μ…˜)
282
+
283
+ **μ•Œλ €μ§„ μ œν•œμ‚¬ν•­:**
284
+ - 일뢀 μ‘°ν•©μ—μ„œ ν…ŒμŠ€νŠΈκ°€ μ™„λ£Œλ˜μ§€ μ•Šμ•˜μ„ 수 μžˆμŠ΅λ‹ˆλ‹€
285
+ - μ—λŸ¬ 처리 κ°œμ„  ν•„μš”
286
+ - 더 λ§Žμ€ μ»€μŠ€ν„°λ§ˆμ΄μ§• μ˜΅μ…˜ μΆ”κ°€ μ˜ˆμ •
287
+
241
288
  ## λ‘œλ“œλ§΅
242
289
 
290
+ ### v0.2.0 (κ³„νš 쀑)
291
+ - [ ] μΆ”κ°€ UI 라이브러리 톡합 (shadcn/ui, MUI)
292
+ - [ ] 더 λ§Žμ€ ν…ŒμŠ€νŠΈ 및 μ•ˆμ •μ„± κ°œμ„ 
293
+ - [ ] μ»΄ν¬λ„ŒνŠΈ 생성기 μΆ”κ°€
294
+
295
+ ### v0.3.0 이후
243
296
  - [ ] μΆ”κ°€ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ (Feature-Sliced Design, Hexagonal Architecture)
244
- - [ ] UI 라이브러리 톡합 (shadcn/ui, MUI, Ant Design)
245
297
  - [ ] μΆ”κ°€ μƒνƒœκ΄€λ¦¬ μ˜΅μ…˜ (Redux Toolkit, Jotai, Recoil)
246
298
  - [ ] 인증 톡합 (NextAuth, Supabase)
247
299
  - [ ] ORM 톡합 (Prisma, Drizzle)
248
- - [ ] μ»΄ν¬λ„ŒνŠΈ 생성기
249
300
  - [ ] CI/CD μ„€μ • μžλ™ν™”
250
301
  - [ ] Docker μ„€μ • 포함
251
302
  - [ ] Monorepo 지원 (Turborepo)
@@ -254,6 +305,29 @@ create-arch-app my-test-app
254
305
 
255
306
  버그 리포트, κΈ°λŠ₯ μ œμ•ˆ, PR λͺ¨λ‘ ν™˜μ˜ν•©λ‹ˆλ‹€!
256
307
 
308
+ μžμ„Έν•œ λ‚΄μš©μ€ [CONTRIBUTING.md](./CONTRIBUTING.md)λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.
309
+
310
+ ### 개발 ν™˜κ²½ μ„€μ •
311
+
312
+ ```bash
313
+ # μ €μž₯μ†Œ 클둠
314
+ git clone git@github.com:hec8897/create-arch-app.git
315
+ cd create-arch-app
316
+
317
+ # μ˜μ‘΄μ„± μ„€μΉ˜
318
+ npm install
319
+
320
+ # TypeScript 컴파일
321
+ npm run build
322
+
323
+ # 둜컬 링크 생성
324
+ npm link
325
+
326
+ # ν…ŒμŠ€νŠΈ
327
+ cd ~/test-project
328
+ create-arch-app my-test-app
329
+ ```
330
+
257
331
  ## λΌμ΄μ„ μŠ€
258
332
 
259
333
  MIT
@@ -93,10 +93,11 @@ async function generateTsConfig(config, projectPath) {
93
93
  },
94
94
  ],
95
95
  paths: {
96
- '@/*': ['./*'],
96
+ '@/*': ['./src/*'],
97
97
  },
98
+ baseUrl: '.',
98
99
  },
99
- include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],
100
+ include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts', 'src/**/*.ts', 'src/**/*.tsx'],
100
101
  exclude: ['node_modules'],
101
102
  };
102
103
  await writeJson(path.join(projectPath, 'tsconfig.json'), tsConfig);
@@ -135,6 +136,67 @@ next-env.d.ts
135
136
  await createFile(path.join(projectPath, '.gitignore'), content);
136
137
  }
137
138
  async function generateReadme(config, projectPath) {
139
+ const apiSection = (config.apiClient !== 'none' || config.dataFetching !== 'none') ? `
140
+ ## API 톡합
141
+
142
+ 이 ν”„λ‘œμ νŠΈλŠ” λ‹€μŒ API 라이브러리λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€:
143
+ ${config.apiClient !== 'none' ? `- **HTTP ν΄λΌμ΄μ–ΈνŠΈ**: ${config.apiClient === 'axios' ? 'Axios' : 'Fetch API'}` : ''}
144
+ ${config.dataFetching !== 'none' ? `- **데이터 페칭**: ${config.dataFetching === 'react-query' ? 'TanStack Query (React Query)' : 'SWR'}` : ''}
145
+
146
+ ### API ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μš©λ²•
147
+
148
+ ${config.apiClient === 'axios' ? `\`\`\`typescript
149
+ import { apiClient } from './lib/api';
150
+
151
+ const fetchData = async () => {
152
+ const response = await apiClient.get('/endpoint');
153
+ return response.data;
154
+ };
155
+ \`\`\`` : config.apiClient === 'fetch' ? `\`\`\`typescript
156
+ import { apiClient } from './lib/api';
157
+
158
+ const fetchData = async () => {
159
+ const data = await apiClient.get('/endpoint');
160
+ return data;
161
+ };
162
+ \`\`\`` : ''}
163
+
164
+ ${config.dataFetching === 'react-query' ? `### React Query μ‚¬μš©λ²•
165
+
166
+ \`\`\`typescript
167
+ import { useExamples } from './hooks/queries/useExample';
168
+
169
+ const Component = () => {
170
+ const { data, isLoading, error } = useExamples();
171
+
172
+ if (isLoading) return <div>Loading...</div>;
173
+ if (error) return <div>Error occurred</div>;
174
+
175
+ return <div>{/* Use data */}</div>;
176
+ };
177
+ \`\`\`` : config.dataFetching === 'swr' ? `### SWR μ‚¬μš©λ²•
178
+
179
+ \`\`\`typescript
180
+ import { useExamples } from './hooks/queries/useExample';
181
+
182
+ const Component = () => {
183
+ const { data, isLoading, isError } = useExamples();
184
+
185
+ if (isLoading) return <div>Loading...</div>;
186
+ if (isError) return <div>Error occurred</div>;
187
+
188
+ return <div>{/* Use data */}</div>;
189
+ };
190
+ \`\`\`` : ''}
191
+
192
+ ### ν™˜κ²½λ³€μˆ˜ μ„€μ •
193
+
194
+ \`.env.local\` νŒŒμΌμ„ μƒμ„±ν•˜κ³  API URL을 μ„€μ •ν•˜μ„Έμš”:
195
+
196
+ \`\`\`bash
197
+ ${config.framework === 'nextjs' ? 'NEXT_PUBLIC_API_URL' : 'VITE_API_URL'}=http://localhost:3000/api
198
+ \`\`\`
199
+ ` : '';
138
200
  const content = `# ${config.projectName}
139
201
 
140
202
  이 ν”„λ‘œμ νŠΈλŠ” **create-arch-app**으둜 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
@@ -148,6 +210,8 @@ ${config.framework === 'nextjs' ? `- **λΌμš°ν„°**: ${config.router === 'app' ?
148
210
  - **μŠ€νƒ€μΌλ§**: ${config.styling === 'tailwind' ? 'Tailwind CSS' : 'CSS Modules'}
149
211
  - **μƒνƒœκ΄€λ¦¬**: ${config.stateManagement}
150
212
  ${config.formLibrary !== 'none' ? `- **폼**: ${config.formLibrary}\n` : ''}
213
+ ${config.apiClient !== 'none' ? `- **HTTP ν΄λΌμ΄μ–ΈνŠΈ**: ${config.apiClient === 'axios' ? 'Axios' : 'Fetch'}\n` : ''}
214
+ ${config.dataFetching !== 'none' ? `- **데이터 페칭**: ${config.dataFetching === 'react-query' ? 'TanStack Query' : 'SWR'}\n` : ''}
151
215
  ${config.testing ? '- **ν…ŒμŠ€νŒ…**: Vitest + Testing Library\n' : ''}
152
216
 
153
217
  ## μ‹œμž‘ν•˜κΈ°
@@ -163,7 +227,7 @@ npm run dev
163
227
  npm run build
164
228
  ${config.testing ? '\n# ν…ŒμŠ€νŠΈ μ‹€ν–‰\nnpm test' : ''}
165
229
  \`\`\`
166
-
230
+ ${apiSection}
167
231
  ## μ•„ν‚€ν…μ²˜ ꡬ쑰
168
232
 
169
233
  ### ${config.architecture.toUpperCase()}
@@ -192,12 +256,8 @@ async function generateTailwindConfig(config, projectPath) {
192
256
  contentPaths = ['./index.html', './src/**/*.{js,ts,jsx,tsx}'];
193
257
  }
194
258
  else {
195
- if (config.router === 'app') {
196
- contentPaths = ['./app/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'];
197
- }
198
- else {
199
- contentPaths = ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'];
200
- }
259
+ // Next.js - src 폴더 μ‚¬μš©
260
+ contentPaths = ['./src/**/*.{js,ts,jsx,tsx}'];
201
261
  }
202
262
  const tailwindConfig = `/** @type {import('tailwindcss').Config} */
203
263
  module.exports = {