@choblue/claude-code-toolkit 1.2.6 → 1.2.7

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.
@@ -49,165 +49,7 @@ React 규칙은 `../React/SKILL.md`, 공통 원칙은 `../Coding/SKILL.md`를
49
49
 
50
50
  ---
51
51
 
52
- ## 2. 반응형 디자인
53
-
54
- ### 브레이크포인트
55
- | 접두사 | 최소 너비 | 용도 |
56
- |--------|-----------|------|
57
- | (없음) | 0px | 모바일 기본 |
58
- | `sm:` | 640px | 소형 태블릿 |
59
- | `md:` | 768px | 태블릿 |
60
- | `lg:` | 1024px | 데스크톱 |
61
- | `xl:` | 1280px | 대형 데스크톱 |
62
- | `2xl:` | 1536px | 초대형 데스크톱 |
63
-
64
- ### Mobile-First 원칙
65
- - 모바일 스타일을 기본으로 작성하고, 큰 화면에 대해 재정의한다
66
-
67
- ```typescript
68
- // Good - Mobile-First
69
- <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
70
- {items.map((item) => (
71
- <Card key={item.id} data={item} />
72
- ))}
73
- </div>
74
-
75
- // Good - 반응형 타이포그래피
76
- <h1 className="text-2xl font-bold md:text-3xl lg:text-4xl">
77
- 제목
78
- </h1>
79
- ```
80
-
81
- ---
82
-
83
- ## 3. 다크 모드
84
-
85
- ### dark: prefix 사용
86
- - `dark:` 접두사로 다크 모드 스타일을 정의한다
87
- - v4에서는 기본적으로 `prefers-color-scheme` 미디어 쿼리로 동작한다
88
- - 수동 토글(class 전략)이 필요하면 CSS에서 `@custom-variant`를 설정한다
89
-
90
- ```css
91
- /* app.css - 수동 다크 모드 토글 시 */
92
- @import "tailwindcss";
93
- @custom-variant dark (&:where(.dark, .dark *));
94
- ```
95
-
96
- ```typescript
97
- // 컴포넌트에서 사용
98
- <div className="bg-white text-gray-900 dark:bg-gray-900 dark:text-white">
99
- <p className="text-gray-600 dark:text-gray-300">
100
- 라이트/다크 모드를 지원하는 텍스트
101
- </p>
102
- </div>
103
- ```
104
-
105
- ### 시맨틱 색상 활용
106
- - 반복되는 라이트/다크 색상 조합은 `@theme`과 CSS 변수로 추출한다
107
-
108
- ```css
109
- /* app.css */
110
- @import "tailwindcss";
111
-
112
- @theme {
113
- --color-background: #ffffff;
114
- --color-foreground: #0a0a0a;
115
- }
116
-
117
- .dark {
118
- --color-background: #0a0a0a;
119
- --color-foreground: #fafafa;
120
- }
121
- ```
122
-
123
- ---
124
-
125
- ## 4. 커스텀 설정
126
-
127
- ### @theme 디렉티브 사용
128
- - CSS 파일에서 `@theme` 디렉티브로 디자인 토큰을 정의한다
129
- - v4에서는 `tailwind.config.ts`가 불필요하다. 모든 커스텀 설정은 CSS의 `@theme`에서 정의한다
130
- - v4는 콘텐츠 파일을 자동 감지하므로 `content` 배열 설정이 불필요하다
131
-
132
- ```css
133
- /* app.css */
134
- @import "tailwindcss";
135
-
136
- @theme {
137
- --color-primary-50: #eff6ff;
138
- --color-primary-100: #dbeafe;
139
- --color-primary-500: #3b82f6;
140
- --color-primary-600: #2563eb;
141
- --color-primary-700: #1d4ed8;
142
- --color-success: #10b981;
143
- --color-warning: #f59e0b;
144
- --color-danger: #ef4444;
145
-
146
- --spacing-18: 4.5rem;
147
- --spacing-88: 22rem;
148
-
149
- --font-sans: 'Inter', sans-serif;
150
- }
151
- ```
152
-
153
- ---
154
-
155
- ## 5. 자주 쓰는 패턴
156
-
157
- ### Flexbox 레이아웃
158
- ```typescript
159
- // 가로 정렬 (중앙)
160
- <div className="flex items-center justify-center">
161
-
162
- // 가로 정렬 (양쪽 분산)
163
- <div className="flex items-center justify-between">
164
-
165
- // 세로 정렬
166
- <div className="flex flex-col gap-4">
167
-
168
- // 자식 요소 간격
169
- <div className="flex gap-2">
170
- ```
171
-
172
- ### Grid 레이아웃
173
- ```typescript
174
- // 반응형 그리드
175
- <div className="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3">
176
-
177
- // 고정 비율 그리드
178
- <div className="grid grid-cols-[1fr_2fr] gap-4">
179
-
180
- // 사이드바 레이아웃
181
- <div className="grid grid-cols-[240px_1fr] gap-8">
182
- ```
183
-
184
- ### Spacing 패턴
185
- ```typescript
186
- // 섹션 간격
187
- <section className="py-12 md:py-16 lg:py-20">
188
-
189
- // 컨테이너
190
- <div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
191
-
192
- // 카드
193
- <div className="rounded-lg border p-6 shadow-sm">
194
- ```
195
-
196
- ### Typography 패턴
197
- ```typescript
198
- // 텍스트 말줄임
199
- <p className="truncate">긴 텍스트...</p>
200
-
201
- // 여러 줄 말줄임
202
- <p className="line-clamp-3">긴 텍스트...</p>
203
-
204
- // 반응형 텍스트
205
- <h1 className="text-2xl font-bold tracking-tight md:text-4xl">
206
- ```
207
-
208
- ---
209
-
210
- ## 6. cn() 유틸리티
52
+ ## 2. cn() 유틸리티
211
53
 
212
54
  ### clsx + tailwind-merge 조합
213
55
  - 조건부 클래스 결합에는 `cn()` 유틸리티를 사용한다
@@ -227,12 +69,12 @@ export function cn(...inputs: ClassValue[]) {
227
69
  ```typescript
228
70
  import { cn } from '@/lib/utils';
229
71
 
230
- interface ButtonProps {
72
+ type ButtonProps = {
231
73
  variant?: 'primary' | 'secondary' | 'danger';
232
74
  size?: 'sm' | 'md' | 'lg';
233
75
  className?: string;
234
76
  children: React.ReactNode;
235
- }
77
+ };
236
78
 
237
79
  export function Button({ variant = 'primary', size = 'md', className, children }: ButtonProps) {
238
80
  return (
@@ -303,9 +145,8 @@ const buttonVariants = cva(
303
145
  }
304
146
  );
305
147
 
306
- interface ButtonProps
307
- extends React.ButtonHTMLAttributes<HTMLButtonElement>,
308
- VariantProps<typeof buttonVariants> {}
148
+ type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> &
149
+ VariantProps<typeof buttonVariants>;
309
150
 
310
151
  export function Button({ variant, size, className, ...props }: ButtonProps) {
311
152
  return (
@@ -322,82 +163,7 @@ export function Button({ variant, size, className, ...props }: ButtonProps) {
322
163
 
323
164
  ---
324
165
 
325
- ## 7. 컴포넌트 추출
326
-
327
- ### 반복 클래스 처리
328
- - 동일한 클래스 조합이 3회 이상 반복되면 컴포넌트로 추출한다
329
- - `@apply`보다 컴포넌트 추출을 우선한다
330
-
331
- ```typescript
332
- // Bad - 동일한 클래스 반복
333
- <button className="rounded-lg bg-blue-600 px-4 py-2 text-white hover:bg-blue-700">저장</button>
334
- <button className="rounded-lg bg-blue-600 px-4 py-2 text-white hover:bg-blue-700">확인</button>
335
- <button className="rounded-lg bg-blue-600 px-4 py-2 text-white hover:bg-blue-700">전송</button>
336
-
337
- // Good - 컴포넌트로 추출
338
- <Button>저장</Button>
339
- <Button>확인</Button>
340
- <Button>전송</Button>
341
- ```
342
-
343
- ### @apply 사용 (제한적 허용)
344
- - 컴포넌트 추출이 어려운 경우에만 `@apply`를 사용한다
345
- - 주로 base layer의 글로벌 스타일에서 사용한다
346
- - v4에서도 `@apply`는 지원되지만, 여전히 컴포넌트 추출을 우선한다
347
-
348
- ```css
349
- /* 허용 - 글로벌 기본 스타일 */
350
- @layer base {
351
- body {
352
- @apply bg-background text-foreground;
353
- }
354
- }
355
-
356
- /* 지양 - 컴포넌트 스타일을 @apply로 작성 */
357
- .btn-primary {
358
- @apply rounded-lg bg-blue-600 px-4 py-2 text-white hover:bg-blue-700;
359
- }
360
- ```
361
-
362
- ---
363
-
364
- ## 8. 트랜지션 & 모션
365
-
366
- ### transition 속성 명시
367
- - `transition-all` 사용을 금지한다 - 변경되는 속성만 명시한다
368
- - 불필요한 속성까지 트랜지션되면 성능이 저하된다
369
-
370
- ```typescript
371
- // Bad - 모든 속성에 트랜지션
372
- <button className="transition-all">
373
-
374
- // Good - 필요한 속성만
375
- <button className="transition-colors">
376
- <div className="transition-[transform,opacity]">
377
- ```
378
-
379
- ### prefers-reduced-motion 존중
380
- - 애니메이션/트랜지션이 있는 요소에는 `motion-reduce:` 변형을 고려한다
381
-
382
- ```typescript
383
- // 모션 감소 선호 시 애니메이션 비활성화
384
- <div className="animate-bounce motion-reduce:animate-none">
385
- <div className="transition-transform motion-reduce:transition-none">
386
- ```
387
-
388
- ### 다크 모드 color-scheme
389
- - 다크 모드 지원 시 `color-scheme: dark`를 설정하여 네이티브 UI(스크롤바, 입력 필드 등)도 다크 테마에 맞춘다
390
-
391
- ```css
392
- /* app.css */
393
- .dark {
394
- color-scheme: dark;
395
- }
396
- ```
397
-
398
- ---
399
-
400
- ## 9. 금지 사항
166
+ ## 3. 금지 사항
401
167
 
402
168
  - 인라인 `style={{}}` 사용 금지 - Tailwind 유틸리티 클래스를 사용한다
403
169
  - 임의값(arbitrary values) 남용 금지 - `w-[137px]` 같은 임의값은 최소화한다
@@ -426,3 +192,11 @@ const colorClasses = {
426
192
 
427
193
  <div className={colorClasses[color]}>
428
194
  ```
195
+
196
+ ---
197
+
198
+ ## 심화 참조
199
+
200
+ - `references/responsive-dark.md` - 반응형 디자인, 다크 모드, 커스텀 설정 (@theme, 브레이크포인트, dark: prefix)
201
+ - `references/patterns-components.md` - 자주 쓰는 레이아웃/타이포그래피 패턴, 컴포넌트 추출 규칙
202
+ - `references/transitions.md` - 트랜지션 & 모션 (transition 속성 명시, prefers-reduced-motion, color-scheme)
@@ -0,0 +1,93 @@
1
+ # 자주 쓰는 패턴 & 컴포넌트 추출
2
+
3
+ ## 자주 쓰는 패턴
4
+
5
+ ### Flexbox 레이아웃
6
+ ```typescript
7
+ // 가로 정렬 (중앙)
8
+ <div className="flex items-center justify-center">
9
+
10
+ // 가로 정렬 (양쪽 분산)
11
+ <div className="flex items-center justify-between">
12
+
13
+ // 세로 정렬
14
+ <div className="flex flex-col gap-4">
15
+
16
+ // 자식 요소 간격
17
+ <div className="flex gap-2">
18
+ ```
19
+
20
+ ### Grid 레이아웃
21
+ ```typescript
22
+ // 반응형 그리드
23
+ <div className="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3">
24
+
25
+ // 고정 비율 그리드
26
+ <div className="grid grid-cols-[1fr_2fr] gap-4">
27
+
28
+ // 사이드바 레이아웃
29
+ <div className="grid grid-cols-[240px_1fr] gap-8">
30
+ ```
31
+
32
+ ### Spacing 패턴
33
+ ```typescript
34
+ // 섹션 간격
35
+ <section className="py-12 md:py-16 lg:py-20">
36
+
37
+ // 컨테이너
38
+ <div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
39
+
40
+ // 카드
41
+ <div className="rounded-lg border p-6 shadow-sm">
42
+ ```
43
+
44
+ ### Typography 패턴
45
+ ```typescript
46
+ // 텍스트 말줄임
47
+ <p className="truncate">긴 텍스트...</p>
48
+
49
+ // 여러 줄 말줄임
50
+ <p className="line-clamp-3">긴 텍스트...</p>
51
+
52
+ // 반응형 텍스트
53
+ <h1 className="text-2xl font-bold tracking-tight md:text-4xl">
54
+ ```
55
+
56
+ ---
57
+
58
+ ## 컴포넌트 추출
59
+
60
+ ### 반복 클래스 처리
61
+ - 동일한 클래스 조합이 3회 이상 반복되면 컴포넌트로 추출한다
62
+ - `@apply`보다 컴포넌트 추출을 우선한다
63
+
64
+ ```typescript
65
+ // Bad - 동일한 클래스 반복
66
+ <button className="rounded-lg bg-blue-600 px-4 py-2 text-white hover:bg-blue-700">저장</button>
67
+ <button className="rounded-lg bg-blue-600 px-4 py-2 text-white hover:bg-blue-700">확인</button>
68
+ <button className="rounded-lg bg-blue-600 px-4 py-2 text-white hover:bg-blue-700">전송</button>
69
+
70
+ // Good - 컴포넌트로 추출
71
+ <Button>저장</Button>
72
+ <Button>확인</Button>
73
+ <Button>전송</Button>
74
+ ```
75
+
76
+ ### @apply 사용 (제한적 허용)
77
+ - 컴포넌트 추출이 어려운 경우에만 `@apply`를 사용한다
78
+ - 주로 base layer의 글로벌 스타일에서 사용한다
79
+ - v4에서도 `@apply`는 지원되지만, 여전히 컴포넌트 추출을 우선한다
80
+
81
+ ```css
82
+ /* 허용 - 글로벌 기본 스타일 */
83
+ @layer base {
84
+ body {
85
+ @apply bg-background text-foreground;
86
+ }
87
+ }
88
+
89
+ /* 지양 - 컴포넌트 스타일을 @apply로 작성 */
90
+ .btn-primary {
91
+ @apply rounded-lg bg-blue-600 px-4 py-2 text-white hover:bg-blue-700;
92
+ }
93
+ ```
@@ -0,0 +1,102 @@
1
+ # 반응형 디자인, 다크 모드, 커스텀 설정
2
+
3
+ ## 반응형 디자인
4
+
5
+ ### 브레이크포인트
6
+ | 접두사 | 최소 너비 | 용도 |
7
+ |--------|-----------|------|
8
+ | (없음) | 0px | 모바일 기본 |
9
+ | `sm:` | 640px | 소형 태블릿 |
10
+ | `md:` | 768px | 태블릿 |
11
+ | `lg:` | 1024px | 데스크톱 |
12
+ | `xl:` | 1280px | 대형 데스크톱 |
13
+ | `2xl:` | 1536px | 초대형 데스크톱 |
14
+
15
+ ### Mobile-First 원칙
16
+ - 모바일 스타일을 기본으로 작성하고, 큰 화면에 대해 재정의한다
17
+
18
+ ```typescript
19
+ // Good - Mobile-First
20
+ <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
21
+ {items.map((item) => (
22
+ <Card key={item.id} data={item} />
23
+ ))}
24
+ </div>
25
+
26
+ // Good - 반응형 타이포그래피
27
+ <h1 className="text-2xl font-bold md:text-3xl lg:text-4xl">
28
+ 제목
29
+ </h1>
30
+ ```
31
+
32
+ ---
33
+
34
+ ## 다크 모드
35
+
36
+ ### dark: prefix 사용
37
+ - `dark:` 접두사로 다크 모드 스타일을 정의한다
38
+ - v4에서는 기본적으로 `prefers-color-scheme` 미디어 쿼리로 동작한다
39
+ - 수동 토글(class 전략)이 필요하면 CSS에서 `@custom-variant`를 설정한다
40
+
41
+ ```css
42
+ /* app.css - 수동 다크 모드 토글 시 */
43
+ @import "tailwindcss";
44
+ @custom-variant dark (&:where(.dark, .dark *));
45
+ ```
46
+
47
+ ```typescript
48
+ // 컴포넌트에서 사용
49
+ <div className="bg-white text-gray-900 dark:bg-gray-900 dark:text-white">
50
+ <p className="text-gray-600 dark:text-gray-300">
51
+ 라이트/다크 모드를 지원하는 텍스트
52
+ </p>
53
+ </div>
54
+ ```
55
+
56
+ ### 시맨틱 색상 활용
57
+ - 반복되는 라이트/다크 색상 조합은 `@theme`과 CSS 변수로 추출한다
58
+
59
+ ```css
60
+ /* app.css */
61
+ @import "tailwindcss";
62
+
63
+ @theme {
64
+ --color-background: #ffffff;
65
+ --color-foreground: #0a0a0a;
66
+ }
67
+
68
+ .dark {
69
+ --color-background: #0a0a0a;
70
+ --color-foreground: #fafafa;
71
+ }
72
+ ```
73
+
74
+ ---
75
+
76
+ ## 커스텀 설정
77
+
78
+ ### @theme 디렉티브 사용
79
+ - CSS 파일에서 `@theme` 디렉티브로 디자인 토큰을 정의한다
80
+ - v4에서는 `tailwind.config.ts`가 불필요하다. 모든 커스텀 설정은 CSS의 `@theme`에서 정의한다
81
+ - v4는 콘텐츠 파일을 자동 감지하므로 `content` 배열 설정이 불필요하다
82
+
83
+ ```css
84
+ /* app.css */
85
+ @import "tailwindcss";
86
+
87
+ @theme {
88
+ --color-primary-50: #eff6ff;
89
+ --color-primary-100: #dbeafe;
90
+ --color-primary-500: #3b82f6;
91
+ --color-primary-600: #2563eb;
92
+ --color-primary-700: #1d4ed8;
93
+ --color-success: #10b981;
94
+ --color-warning: #f59e0b;
95
+ --color-danger: #ef4444;
96
+
97
+ --spacing-18: 4.5rem;
98
+ --spacing-88: 22rem;
99
+
100
+ --font-sans: 'Inter', sans-serif;
101
+ }
102
+ ```
@@ -0,0 +1,33 @@
1
+ # 트랜지션 & 모션
2
+
3
+ ### transition 속성 명시
4
+ - `transition-all` 사용을 금지한다 - 변경되는 속성만 명시한다
5
+ - 불필요한 속성까지 트랜지션되면 성능이 저하된다
6
+
7
+ ```typescript
8
+ // Bad - 모든 속성에 트랜지션
9
+ <button className="transition-all">
10
+
11
+ // Good - 필요한 속성만
12
+ <button className="transition-colors">
13
+ <div className="transition-[transform,opacity]">
14
+ ```
15
+
16
+ ### prefers-reduced-motion 존중
17
+ - 애니메이션/트랜지션이 있는 요소에는 `motion-reduce:` 변형을 고려한다
18
+
19
+ ```typescript
20
+ // 모션 감소 선호 시 애니메이션 비활성화
21
+ <div className="animate-bounce motion-reduce:animate-none">
22
+ <div className="transition-transform motion-reduce:transition-none">
23
+ ```
24
+
25
+ ### 다크 모드 color-scheme
26
+ - 다크 모드 지원 시 `color-scheme: dark`를 설정하여 네이티브 UI(스크롤바, 입력 필드 등)도 다크 테마에 맞춘다
27
+
28
+ ```css
29
+ /* app.css */
30
+ .dark {
31
+ color-scheme: dark;
32
+ }
33
+ ```
package/README.md CHANGED
@@ -25,34 +25,39 @@
25
25
  │ └── git-manager.md ← Git 작업 (sonnet)
26
26
  ├── skills/
27
27
  │ ├── Coding/
28
- │ │ ├── SKILL.md ← 공통 코딩 원칙
29
- │ └── backend.md ← NestJS 코딩 규칙
28
+ │ │ └── SKILL.md ← 공통 코딩 원칙
29
+ ├── NestJS/
30
+ │ │ └── SKILL.md ← NestJS 백엔드 규칙
30
31
  │ ├── Planning/
31
32
  │ │ └── SKILL.md ← 작업 계획 (티어 판단, 작업 분해)
32
33
  │ ├── React/
33
- │ │ └── SKILL.md ← React 컴포넌트, 훅, 상태 관리
34
+ │ │ ├── SKILL.md ← React 핵심 규칙
35
+ │ │ └── references/ ← 상태/훅, 렌더링 패턴, 접근성/UX
34
36
  │ ├── NextJS/
35
- │ │ └── SKILL.md ← Next.js App Router, SSR
37
+ │ │ ├── SKILL.md ← Next.js App Router 핵심 규칙
38
+ │ │ └── references/ ← 데이터 페칭, 미들웨어, 최적화
36
39
  │ ├── TailwindCSS/
37
- │ │ └── SKILL.md ← Tailwind CSS 유틸리티 패턴
40
+ │ │ ├── SKILL.md ← Tailwind CSS 핵심 규칙
41
+ │ │ └── references/ ← 반응형/다크모드, 패턴, 트랜지션
38
42
  │ ├── TanStackQuery/
39
43
  │ │ └── SKILL.md ← TanStack Query 서버 상태
40
44
  │ ├── Zustand/
41
45
  │ │ └── SKILL.md ← Zustand 클라이언트 상태
42
46
  │ ├── ReactHookForm/
43
- │ │ └── SKILL.md ← React Hook Form + Zod
47
+ │ │ ├── SKILL.md ← React Hook Form 핵심 규칙
48
+ │ │ └── references/ ← Controller, 동적 필드, 중첩 스키마
44
49
  │ ├── TypeScript/
45
- │ │ └── SKILL.md ← TypeScript 고급 패턴
50
+ │ │ ├── SKILL.md ← TypeScript 고급 패턴
51
+ │ │ └── references/ ← 제네릭, 타입 가드, 고급 패턴
46
52
  │ ├── TypeORM/
47
53
  │ │ ├── SKILL.md ← TypeORM Entity, Repository
48
54
  │ │ └── references/ ← 고급 쿼리, 마이그레이션, 트랜잭션
49
55
  │ ├── DDD/
50
56
  │ │ ├── SKILL.md ← DDD 전술적 패턴
51
- │ │ └── references/ ← Entity/VO, Aggregate, Domain Event 심화
57
+ │ │ └── references/ ← Entity/VO, Aggregate, Domain Event
52
58
  │ ├── TDD/
53
59
  │ │ ├── SKILL.md ← TDD 핵심 원칙
54
- │ │ ├── frontend.md ← React 테스트 규칙
55
- │ │ └── backend.md ← NestJS 테스트 규칙
60
+ │ │ └── references/ ← React 테스트, NestJS 테스트
56
61
  │ ├── Git/
57
62
  │ │ └── SKILL.md ← 커밋/PR/브랜치 규칙
58
63
  │ ├── FailureRecovery/
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@choblue/claude-code-toolkit",
3
- "version": "1.2.6",
3
+ "version": "1.2.7",
4
4
  "description": "Claude Code 서브에이전트 위임 툴킷 - npx로 바로 설치",
5
5
  "bin": {
6
6
  "claude-code-toolkit": "bin/cli.js"
@@ -1,11 +0,0 @@
1
- # Coding Skill - Frontend
2
-
3
- > **이 파일은 더 이상 사용되지 않는다.**
4
- > 프론트엔드 규칙은 기술별 스킬 파일로 분리되었다.
5
-
6
- - `../React/SKILL.md` - React 컴포넌트, 훅, 상태 관리
7
- - `../NextJS/SKILL.md` - Next.js App Router, SSR, Server Actions
8
- - `../TailwindCSS/SKILL.md` - Tailwind CSS 유틸리티 패턴
9
- - `../TanStackQuery/SKILL.md` - 서버 상태 관리 (React Query)
10
- - `../Zustand/SKILL.md` - 클라이언트 전역 상태 관리
11
- - `../ReactHookForm/SKILL.md` - 폼 관리 + Zod 검증