bitbucket-gemini-action 1.0.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,2130 @@
1
+ /**
2
+ * Review Presets
3
+ * Predefined review configurations for different contexts, experience levels, and frameworks
4
+ */
5
+
6
+ export interface ReviewPreset {
7
+ name: string;
8
+ description: string;
9
+ prompt: string;
10
+ tags: string[];
11
+ }
12
+
13
+ export type PresetCategory =
14
+ | "experience"
15
+ | "perspective"
16
+ | "framework"
17
+ | "domain"
18
+ | "language"
19
+ | "quality"
20
+ | "ai";
21
+
22
+ export interface PresetRegistry {
23
+ [key: string]: ReviewPreset;
24
+ }
25
+
26
+ /**
27
+ * Experience Level Presets
28
+ * 개발자 경험 수준별 리뷰
29
+ */
30
+ export const EXPERIENCE_PRESETS: PresetRegistry = {
31
+ junior: {
32
+ name: "주니어 개발자용",
33
+ description: "초보 개발자가 성장할 수 있도록 친절하고 교육적인 리뷰",
34
+ tags: ["experience", "beginner"],
35
+ prompt: `주니어 개발자를 위한 교육적인 코드 리뷰를 제공해주세요:
36
+
37
+ ## 리뷰 스타일
38
+ - 친절하고 격려하는 톤 사용
39
+ - 모든 피드백에 "왜"를 설명
40
+ - 기본 개념이 부족해 보이면 간단히 설명 추가
41
+ - 좋은 부분도 칭찬하여 자신감 부여
42
+
43
+ ## 중점 검토 사항
44
+ 1. **기본기 확인**
45
+ - 변수/함수 네이밍이 명확한가?
46
+ - 코드 가독성이 좋은가?
47
+ - 주석이 적절한가?
48
+
49
+ 2. **일반적인 실수 체크**
50
+ - null/undefined 처리
51
+ - 에러 핸들링 누락
52
+ - 하드코딩된 값
53
+ - 중복 코드
54
+
55
+ 3. **학습 기회 제공**
56
+ - 더 나은 패턴 소개 (이유와 함께)
57
+ - 관련 문서/자료 링크 제안
58
+ - 단계별 개선 방법 제시
59
+
60
+ ## 피드백 형식
61
+ - ✅ 잘한 점: [구체적 칭찬]
62
+ - 📚 학습 포인트: [개념 설명 + 개선 방향]
63
+ - 💡 팁: [실무에서 유용한 조언]`,
64
+ },
65
+
66
+ middle: {
67
+ name: "미들급 개발자용",
68
+ description: "중급 개발자의 성장을 위한 심화 리뷰",
69
+ tags: ["experience", "intermediate"],
70
+ prompt: `중급 개발자를 위한 심화 코드 리뷰를 제공해주세요:
71
+
72
+ ## 리뷰 스타일
73
+ - 동등한 개발자로서 토론하는 톤
74
+ - 트레이드오프 관점에서 분석
75
+ - 대안 제시 시 각각의 장단점 설명
76
+
77
+ ## 중점 검토 사항
78
+ 1. **설계 패턴 및 원칙**
79
+ - SOLID 원칙 준수 여부
80
+ - 적절한 디자인 패턴 사용
81
+ - 의존성 관리 및 결합도
82
+
83
+ 2. **코드 품질 심화**
84
+ - 테스트 용이성 (Testability)
85
+ - 확장성 고려
86
+ - 재사용 가능성
87
+
88
+ 3. **성능 및 최적화**
89
+ - 알고리즘 복잡도
90
+ - 메모리 사용 패턴
91
+ - 불필요한 연산 제거
92
+
93
+ 4. **실무 관점**
94
+ - 유지보수성
95
+ - 팀 협업 시 가독성
96
+ - 문서화 필요성
97
+
98
+ ## 피드백 형식
99
+ - 🔍 분석: [현재 코드의 특성]
100
+ - 🎯 제안: [개선 방향 + 이유]
101
+ - ⚖️ 트레이드오프: [대안들의 장단점]`,
102
+ },
103
+
104
+ senior: {
105
+ name: "시니어 개발자용",
106
+ description: "고급 아키텍처 및 전략적 관점의 리뷰",
107
+ tags: ["experience", "advanced"],
108
+ prompt: `시니어 개발자를 위한 고급 코드 리뷰를 제공해주세요:
109
+
110
+ ## 리뷰 스타일
111
+ - 간결하고 핵심적인 피드백
112
+ - 아키텍처 수준의 인사이트
113
+ - 장기적 관점의 제안
114
+
115
+ ## 중점 검토 사항
116
+ 1. **아키텍처 영향도**
117
+ - 시스템 전체에 미치는 영향
118
+ - 기존 아키텍처와의 일관성
119
+ - 기술 부채 발생 가능성
120
+
121
+ 2. **확장성 및 유연성**
122
+ - 향후 요구사항 변경 대응력
123
+ - 모듈화 및 경계 설정
124
+ - 인터페이스 설계
125
+
126
+ 3. **운영 관점**
127
+ - 모니터링/로깅 적절성
128
+ - 장애 복구 고려
129
+ - 배포 전략 영향
130
+
131
+ 4. **팀/조직 영향**
132
+ - 코드 컨벤션 준수
133
+ - 온보딩 용이성
134
+ - 지식 공유 관점
135
+
136
+ ## 피드백 형식
137
+ - 🏗️ 아키텍처: [시스템 관점 분석]
138
+ - ⚠️ 리스크: [잠재적 문제점]
139
+ - 🚀 전략: [장기적 개선 방향]`,
140
+ },
141
+
142
+ lead: {
143
+ name: "테크 리드용",
144
+ description: "팀 리딩 관점의 전략적 리뷰",
145
+ tags: ["experience", "leadership"],
146
+ prompt: `테크 리드 관점의 전략적 코드 리뷰를 제공해주세요:
147
+
148
+ ## 리뷰 스타일
149
+ - 팀 전체 관점에서 분석
150
+ - 멘토링 기회 식별
151
+ - 프로세스 개선점 도출
152
+
153
+ ## 중점 검토 사항
154
+ 1. **팀 역량 관점**
155
+ - 주니어 멤버 학습 기회
156
+ - 코드 리뷰 문화 개선점
157
+ - 페어 프로그래밍 필요성
158
+
159
+ 2. **표준화 및 일관성**
160
+ - 팀 컨벤션 준수
161
+ - 공통 패턴 적용
162
+ - 문서화 표준
163
+
164
+ 3. **기술 부채 관리**
165
+ - 즉시 수정 필요 사항
166
+ - 백로그 등록 필요 사항
167
+ - 리팩토링 계획 제안
168
+
169
+ 4. **프로젝트 영향**
170
+ - 일정 영향도
171
+ - 리스크 평가
172
+ - 다른 팀과의 인터페이스`,
173
+ },
174
+ };
175
+
176
+ /**
177
+ * Perspective Presets
178
+ * 리뷰 관점별 프리셋
179
+ */
180
+ export const PERSPECTIVE_PRESETS: PresetRegistry = {
181
+ architecture: {
182
+ name: "아키텍처/설계",
183
+ description: "소프트웨어 설계 및 아키텍처 관점 리뷰",
184
+ tags: ["perspective", "design"],
185
+ prompt: `소프트웨어 아키텍처 관점에서 코드를 리뷰해주세요:
186
+
187
+ ## 검토 항목
188
+
189
+ ### 1. 설계 원칙
190
+ - **SOLID 원칙**
191
+ - Single Responsibility: 클래스/함수의 단일 책임
192
+ - Open/Closed: 확장에 열림, 수정에 닫힘
193
+ - Liskov Substitution: 하위 타입 치환 가능성
194
+ - Interface Segregation: 인터페이스 분리
195
+ - Dependency Inversion: 의존성 역전
196
+
197
+ - **기타 원칙**
198
+ - DRY (Don't Repeat Yourself)
199
+ - KISS (Keep It Simple, Stupid)
200
+ - YAGNI (You Ain't Gonna Need It)
201
+
202
+ ### 2. 아키텍처 패턴
203
+ - 레이어 분리 적절성
204
+ - 도메인 모델 설계
205
+ - 의존성 방향 (안쪽으로 향하는지)
206
+ - 경계 컨텍스트 식별
207
+
208
+ ### 3. 모듈화
209
+ - 응집도 (Cohesion) - 높을수록 좋음
210
+ - 결합도 (Coupling) - 낮을수록 좋음
211
+ - 인터페이스 정의
212
+ - 캡슐화 수준
213
+
214
+ ### 4. 확장 포인트
215
+ - 플러그인/확장 가능한 구조
216
+ - 설정의 외부화
217
+ - 전략 패턴 적용 가능성`,
218
+ },
219
+
220
+ security: {
221
+ name: "보안",
222
+ description: "보안 취약점 및 안전한 코딩 관점 리뷰",
223
+ tags: ["perspective", "security"],
224
+ prompt: `보안 관점에서 코드를 철저히 리뷰해주세요:
225
+
226
+ ## 검토 항목
227
+
228
+ ### 1. 입력 검증
229
+ - 모든 사용자 입력 검증 여부
230
+ - 화이트리스트 vs 블랙리스트 접근
231
+ - 입력 길이/형식 제한
232
+ - 파일 업로드 검증
233
+
234
+ ### 2. 인젝션 공격
235
+ - **SQL Injection**: 파라미터화된 쿼리 사용
236
+ - **XSS**: 출력 인코딩, CSP 헤더
237
+ - **Command Injection**: 셸 명령 실행 검증
238
+ - **LDAP/XML Injection**: 특수문자 처리
239
+
240
+ ### 3. 인증/인가
241
+ - 인증 로직 우회 가능성
242
+ - 권한 검사 누락
243
+ - 세션 관리 취약점
244
+ - JWT/토큰 처리 안전성
245
+
246
+ ### 4. 민감 데이터
247
+ - 비밀번호 평문 저장 여부
248
+ - API 키/시크릿 노출
249
+ - 로그에 민감정보 출력
250
+ - 암호화 적절성 (알고리즘, 키 관리)
251
+
252
+ ### 5. 기타 보안
253
+ - CSRF 방어
254
+ - 안전하지 않은 직접 객체 참조 (IDOR)
255
+ - 레이스 컨디션
256
+ - 에러 메시지 정보 노출
257
+
258
+ ## 심각도 표시
259
+ - 🔴 Critical: 즉시 수정 필요
260
+ - 🟠 High: 배포 전 수정 필요
261
+ - 🟡 Medium: 조속한 수정 권장
262
+ - 🟢 Low: 개선 권장`,
263
+ },
264
+
265
+ performance: {
266
+ name: "성능",
267
+ description: "성능 최적화 관점 리뷰",
268
+ tags: ["perspective", "optimization"],
269
+ prompt: `성능 최적화 관점에서 코드를 리뷰해주세요:
270
+
271
+ ## 검토 항목
272
+
273
+ ### 1. 알고리즘 복잡도
274
+ - 시간 복잡도 (Big O)
275
+ - 공간 복잡도
276
+ - 더 효율적인 알고리즘 존재 여부
277
+ - 불필요한 반복/재계산
278
+
279
+ ### 2. 데이터베이스
280
+ - **N+1 쿼리 문제**
281
+ - 인덱스 활용 여부
282
+ - 불필요한 SELECT *
283
+ - 트랜잭션 범위 적절성
284
+ - 커넥션 풀 관리
285
+
286
+ ### 3. 메모리 관리
287
+ - 메모리 누수 가능성
288
+ - 대용량 데이터 처리 방식
289
+ - 객체 생성 최소화
290
+ - 캐싱 전략
291
+
292
+ ### 4. 네트워크
293
+ - API 호출 최소화
294
+ - 배치 처리 가능성
295
+ - 압축 사용
296
+ - 연결 재사용
297
+
298
+ ### 5. 비동기 처리
299
+ - 블로킹 코드 식별
300
+ - 병렬 처리 가능성
301
+ - 적절한 타임아웃 설정
302
+ - 백프레셔 처리
303
+
304
+ ### 6. 프론트엔드 (해당 시)
305
+ - 번들 사이즈
306
+ - 레이지 로딩
307
+ - 메모이제이션
308
+ - 리렌더링 최소화`,
309
+ },
310
+
311
+ testing: {
312
+ name: "테스트",
313
+ description: "테스트 품질 및 전략 관점 리뷰",
314
+ tags: ["perspective", "quality"],
315
+ prompt: `테스트 관점에서 코드를 리뷰해주세요:
316
+
317
+ ## 검토 항목
318
+
319
+ ### 1. 테스트 커버리지
320
+ - 핵심 로직 테스트 여부
321
+ - 엣지 케이스 커버
322
+ - 에러 케이스 테스트
323
+ - 경계값 테스트
324
+
325
+ ### 2. 테스트 품질
326
+ - **AAA 패턴**: Arrange, Act, Assert
327
+ - 테스트 독립성
328
+ - 테스트 가독성
329
+ - 테스트 이름의 명확성
330
+
331
+ ### 3. 테스트 유형
332
+ - 단위 테스트 적절성
333
+ - 통합 테스트 필요성
334
+ - E2E 테스트 시나리오
335
+ - 스냅샷 테스트 (UI)
336
+
337
+ ### 4. 모킹 전략
338
+ - 적절한 모킹 수준
339
+ - 과도한 모킹 여부
340
+ - 테스트 더블 사용 (Stub, Mock, Spy)
341
+ - 외부 의존성 격리
342
+
343
+ ### 5. 테스트 유지보수
344
+ - 테스트 코드 중복
345
+ - 테스트 헬퍼/유틸리티
346
+ - 픽스처 관리
347
+ - 테스트 데이터 관리
348
+
349
+ ### 6. 테스트 가능성
350
+ - 코드의 테스트 용이성
351
+ - 의존성 주입 활용
352
+ - 순수 함수 분리`,
353
+ },
354
+
355
+ accessibility: {
356
+ name: "접근성 (a11y)",
357
+ description: "웹 접근성 관점 리뷰",
358
+ tags: ["perspective", "a11y", "frontend"],
359
+ prompt: `웹 접근성(a11y) 관점에서 코드를 리뷰해주세요:
360
+
361
+ ## 검토 항목
362
+
363
+ ### 1. 시맨틱 HTML
364
+ - 적절한 HTML 태그 사용
365
+ - 헤딩 계층 구조
366
+ - 랜드마크 영역 (header, nav, main, footer)
367
+ - 리스트/테이블 구조
368
+
369
+ ### 2. ARIA
370
+ - aria-label, aria-labelledby 사용
371
+ - aria-live 영역 (동적 콘텐츠)
372
+ - role 속성 적절성
373
+ - aria-hidden 처리
374
+
375
+ ### 3. 키보드 접근성
376
+ - 모든 인터랙티브 요소 키보드 접근 가능
377
+ - 포커스 순서 논리적
378
+ - 포커스 표시 visible
379
+ - 키보드 트랩 방지
380
+
381
+ ### 4. 시각적 접근성
382
+ - 색상 대비 (WCAG 기준)
383
+ - 색상만으로 정보 전달 X
384
+ - 텍스트 크기 조절 가능
385
+ - 애니메이션 제어 (prefers-reduced-motion)
386
+
387
+ ### 5. 폼 접근성
388
+ - label과 input 연결
389
+ - 에러 메시지 명확
390
+ - 필수 필드 표시
391
+ - 자동완성 속성
392
+
393
+ ### 6. 이미지/미디어
394
+ - alt 텍스트 적절성
395
+ - 장식 이미지 처리
396
+ - 비디오 자막
397
+ - 오디오 대체 텍스트`,
398
+ },
399
+
400
+ errorHandling: {
401
+ name: "에러 핸들링",
402
+ description: "에러 처리 및 예외 관리 관점 리뷰",
403
+ tags: ["perspective", "reliability"],
404
+ prompt: `에러 핸들링 관점에서 코드를 리뷰해주세요:
405
+
406
+ ## 검토 항목
407
+
408
+ ### 1. 예외 처리 기본
409
+ - try-catch 적절한 범위
410
+ - 구체적인 예외 타입 사용
411
+ - 빈 catch 블록 금지
412
+ - finally 블록 활용
413
+
414
+ ### 2. 에러 전파
415
+ - 에러 래핑 및 컨텍스트 추가
416
+ - 에러 체이닝
417
+ - 적절한 추상화 수준의 에러
418
+ - 호출자에게 유용한 정보 제공
419
+
420
+ ### 3. 사용자 피드백
421
+ - 사용자 친화적 에러 메시지
422
+ - 기술적 세부사항 숨김
423
+ - 복구 방법 안내
424
+ - 일관된 에러 형식
425
+
426
+ ### 4. 로깅 및 모니터링
427
+ - 적절한 로그 레벨
428
+ - 에러 컨텍스트 로깅
429
+ - 스택 트레이스 보존
430
+ - 알림 설정 고려
431
+
432
+ ### 5. 복구 전략
433
+ - 재시도 로직
434
+ - 폴백 메커니즘
435
+ - 서킷 브레이커 패턴
436
+ - 그레이스풀 디그레이데이션
437
+
438
+ ### 6. 비동기 에러
439
+ - Promise rejection 처리
440
+ - async/await 에러 처리
441
+ - 이벤트 에러 핸들링
442
+ - 스트림 에러 처리`,
443
+ },
444
+
445
+ codeStyle: {
446
+ name: "코드 스타일/컨벤션",
447
+ description: "코드 스타일 및 일관성 관점 리뷰",
448
+ tags: ["perspective", "style"],
449
+ prompt: `코드 스타일과 컨벤션 관점에서 리뷰해주세요:
450
+
451
+ ## 검토 항목
452
+
453
+ ### 1. 네이밍
454
+ - 변수/함수/클래스 이름의 명확성
455
+ - 일관된 네이밍 컨벤션 (camelCase, PascalCase 등)
456
+ - 축약어 사용 최소화
457
+ - 의미 있는 이름 사용
458
+
459
+ ### 2. 코드 구조
460
+ - 함수 길이 (20-30줄 이하 권장)
461
+ - 파일 길이 적절성
462
+ - 들여쓰기 일관성
463
+ - 빈 줄 사용으로 논리적 분리
464
+
465
+ ### 3. 주석
466
+ - 필요한 곳에 주석 존재
467
+ - 불필요한 주석 제거
468
+ - TODO/FIXME 적절한 사용
469
+ - JSDoc/TSDoc 문서화
470
+
471
+ ### 4. 가독성
472
+ - 복잡한 조건문 단순화
473
+ - 매직 넘버 상수화
474
+ - 깊은 중첩 피하기
475
+ - Early return 패턴
476
+
477
+ ### 5. 일관성
478
+ - 팀 컨벤션 준수
479
+ - 기존 코드베이스와 일관성
480
+ - import 순서
481
+ - 파일 구조`,
482
+ },
483
+ };
484
+
485
+ /**
486
+ * Framework Presets
487
+ * 프레임워크별 프리셋
488
+ */
489
+ export const FRAMEWORK_PRESETS: PresetRegistry = {
490
+ react: {
491
+ name: "React",
492
+ description: "React 베스트 프랙티스 기반 리뷰",
493
+ tags: ["framework", "frontend", "react"],
494
+ prompt: `React 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
495
+
496
+ ## 검토 항목
497
+
498
+ ### 1. 컴포넌트 설계
499
+ - 단일 책임 원칙
500
+ - 컴포넌트 크기 적절성
501
+ - Presentational vs Container 분리
502
+ - 합성(Composition) 활용
503
+
504
+ ### 2. Hooks 사용
505
+ - **useState**: 적절한 상태 분리
506
+ - **useEffect**: 의존성 배열 정확성, 클린업 함수
507
+ - **useMemo/useCallback**: 필요한 곳에만 사용
508
+ - **useRef**: DOM 접근 vs 값 저장 구분
509
+ - 커스텀 훅 추출 기회
510
+
511
+ ### 3. 상태 관리
512
+ - 로컬 vs 전역 상태 구분
513
+ - 상태 끌어올리기 적절성
514
+ - 불필요한 상태 제거
515
+ - 파생 상태 계산
516
+
517
+ ### 4. 성능 최적화
518
+ - 불필요한 리렌더링 방지
519
+ - React.memo 적절한 사용
520
+ - 키(key) 올바른 사용
521
+ - 코드 스플리팅
522
+
523
+ ### 5. 패턴
524
+ - Controlled vs Uncontrolled 컴포넌트
525
+ - Render Props / HOC / Hooks 선택
526
+ - Error Boundary 사용
527
+ - Suspense 활용
528
+
529
+ ### 6. TypeScript (해당 시)
530
+ - Props 타입 정의
531
+ - 제네릭 컴포넌트
532
+ - 이벤트 타입`,
533
+ },
534
+
535
+ nextjs: {
536
+ name: "Next.js",
537
+ description: "Next.js App Router 베스트 프랙티스 기반 리뷰",
538
+ tags: ["framework", "frontend", "nextjs", "react"],
539
+ prompt: `Next.js (App Router) 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
540
+
541
+ ## 검토 항목
542
+
543
+ ### 1. Server vs Client Components
544
+ - 'use client' 지시어 최소화
545
+ - 서버 컴포넌트에서 데이터 페칭
546
+ - 클라이언트 컴포넌트 경계 설정
547
+ - 인터리빙 패턴
548
+
549
+ ### 2. Data Fetching
550
+ - **Server Components**: async/await 직접 사용
551
+ - **Server Actions**: 폼 처리, 뮤테이션
552
+ - fetch 캐싱 전략 (cache, revalidate)
553
+ - 병렬 데이터 페칭
554
+
555
+ ### 3. 라우팅
556
+ - 파일 기반 라우팅 구조
557
+ - 동적 라우트 적절성
558
+ - Route Groups 활용
559
+ - Parallel/Intercepting Routes
560
+
561
+ ### 4. 메타데이터
562
+ - generateMetadata 사용
563
+ - 동적 OG 이미지
564
+ - sitemap, robots.txt
565
+
566
+ ### 5. 최적화
567
+ - **Image**: next/image 사용, sizes 속성
568
+ - **Font**: next/font 사용
569
+ - **Script**: next/script 전략
570
+ - Static vs Dynamic 렌더링
571
+
572
+ ### 6. 캐싱 전략
573
+ - Full Route Cache
574
+ - Data Cache
575
+ - Router Cache
576
+ - revalidatePath/revalidateTag
577
+
578
+ ### 7. 에러 처리
579
+ - error.tsx 바운더리
580
+ - not-found.tsx
581
+ - loading.tsx 스켈레톤`,
582
+ },
583
+
584
+ vue: {
585
+ name: "Vue.js",
586
+ description: "Vue 3 Composition API 베스트 프랙티스 기반 리뷰",
587
+ tags: ["framework", "frontend", "vue"],
588
+ prompt: `Vue 3 (Composition API) 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
589
+
590
+ ## 검토 항목
591
+
592
+ ### 1. Composition API
593
+ - setup() 또는 <script setup> 사용
594
+ - ref vs reactive 적절한 선택
595
+ - computed 활용
596
+ - watch/watchEffect 사용
597
+
598
+ ### 2. 컴포넌트 설계
599
+ - Props 정의 (타입, 기본값, 검증)
600
+ - Emits 정의
601
+ - v-model 커스텀
602
+ - Slots 활용
603
+
604
+ ### 3. Composables
605
+ - 재사용 가능한 로직 추출
606
+ - 네이밍 컨벤션 (use 접두사)
607
+ - 반응성 유지
608
+ - 클린업 처리
609
+
610
+ ### 4. 성능
611
+ - v-show vs v-if 선택
612
+ - v-for 키 사용
613
+ - 컴포넌트 지연 로딩
614
+ - keep-alive 활용
615
+
616
+ ### 5. 상태 관리 (Pinia)
617
+ - Store 구조
618
+ - Actions vs Getters
619
+ - 구독 및 플러그인
620
+
621
+ ### 6. TypeScript
622
+ - defineProps/defineEmits 타입
623
+ - 제네릭 컴포넌트`,
624
+ },
625
+
626
+ angular: {
627
+ name: "Angular",
628
+ description: "Angular 베스트 프랙티스 기반 리뷰",
629
+ tags: ["framework", "frontend", "angular"],
630
+ prompt: `Angular 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
631
+
632
+ ## 검토 항목
633
+
634
+ ### 1. 컴포넌트
635
+ - 스마트/덤 컴포넌트 분리
636
+ - ChangeDetectionStrategy.OnPush 사용
637
+ - 컴포넌트 크기 적절성
638
+ - Input/Output 데코레이터
639
+
640
+ ### 2. 모듈 구조
641
+ - Feature 모듈 분리
642
+ - Shared 모듈 활용
643
+ - Lazy Loading 적용
644
+ - Standalone Components
645
+
646
+ ### 3. 서비스 및 DI
647
+ - 싱글톤 vs 컴포넌트 스코프
648
+ - providedIn 설정
649
+ - 인터페이스 기반 설계
650
+
651
+ ### 4. RxJS
652
+ - Observable 구독 관리
653
+ - takeUntil/async pipe 사용
654
+ - 에러 핸들링
655
+ - 적절한 오퍼레이터 선택
656
+
657
+ ### 5. 폼
658
+ - Reactive Forms vs Template Forms
659
+ - 폼 검증 로직
660
+ - 커스텀 Validator
661
+
662
+ ### 6. 성능
663
+ - TrackBy 함수
664
+ - 순수 Pipe
665
+ - Zone.js 최적화`,
666
+ },
667
+
668
+ nestjs: {
669
+ name: "NestJS",
670
+ description: "NestJS 베스트 프랙티스 기반 리뷰",
671
+ tags: ["framework", "backend", "nestjs", "node"],
672
+ prompt: `NestJS 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
673
+
674
+ ## 검토 항목
675
+
676
+ ### 1. 모듈 구조
677
+ - 모듈 경계 명확성
678
+ - 순환 의존성 방지
679
+ - Dynamic Modules 활용
680
+ - Global 모듈 최소화
681
+
682
+ ### 2. 의존성 주입
683
+ - Provider 스코프 (DEFAULT, REQUEST, TRANSIENT)
684
+ - 커스텀 Provider
685
+ - 인터페이스 기반 주입
686
+ - useFactory/useClass/useValue
687
+
688
+ ### 3. 컨트롤러
689
+ - REST 규칙 준수
690
+ - 라우트 네이밍
691
+ - HTTP 상태 코드 적절성
692
+ - API 버저닝
693
+
694
+ ### 4. 서비스
695
+ - 비즈니스 로직 분리
696
+ - 트랜잭션 관리
697
+ - 캐싱 전략
698
+
699
+ ### 5. 미들웨어/가드/인터셉터/파이프
700
+ - 적절한 레이어 선택
701
+ - Guard: 인증/인가
702
+ - Interceptor: 로깅, 변환
703
+ - Pipe: 검증, 변환
704
+
705
+ ### 6. DTO 및 검증
706
+ - class-validator 데코레이터
707
+ - class-transformer 활용
708
+ - 화이트리스트 검증
709
+ - 커스텀 Validator
710
+
711
+ ### 7. 예외 처리
712
+ - HttpException 활용
713
+ - 커스텀 Exception Filter
714
+ - 에러 응답 일관성
715
+
716
+ ### 8. TypeORM/Prisma
717
+ - Repository 패턴
718
+ - 쿼리 최적화
719
+ - 마이그레이션 관리`,
720
+ },
721
+
722
+ express: {
723
+ name: "Express.js",
724
+ description: "Express.js 베스트 프랙티스 기반 리뷰",
725
+ tags: ["framework", "backend", "express", "node"],
726
+ prompt: `Express.js 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
727
+
728
+ ## 검토 항목
729
+
730
+ ### 1. 라우팅
731
+ - Router 모듈화
732
+ - RESTful 규칙 준수
733
+ - 라우트 네이밍 일관성
734
+ - 버저닝 전략
735
+
736
+ ### 2. 미들웨어
737
+ - 미들웨어 순서
738
+ - 에러 핸들링 미들웨어
739
+ - 커스텀 미들웨어 구조
740
+ - async 미들웨어 처리
741
+
742
+ ### 3. 보안
743
+ - helmet 사용
744
+ - CORS 설정
745
+ - Rate Limiting
746
+ - 입력 검증 (express-validator)
747
+
748
+ ### 4. 에러 처리
749
+ - 중앙 집중식 에러 핸들러
750
+ - 커스텀 에러 클래스
751
+ - 운영/개발 에러 분리
752
+ - 비동기 에러 캐치
753
+
754
+ ### 5. 구조
755
+ - MVC 또는 레이어드 아키텍처
756
+ - 설정 관리
757
+ - 환경 변수 처리
758
+ - 로깅 전략
759
+
760
+ ### 6. 성능
761
+ - 압축 (compression)
762
+ - 캐싱 헤더
763
+ - 클러스터링
764
+ - 커넥션 풀링`,
765
+ },
766
+
767
+ fastify: {
768
+ name: "Fastify",
769
+ description: "Fastify 베스트 프랙티스 기반 리뷰",
770
+ tags: ["framework", "backend", "fastify", "node"],
771
+ prompt: `Fastify 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
772
+
773
+ ## 검토 항목
774
+
775
+ ### 1. 플러그인 시스템
776
+ - 플러그인 캡슐화
777
+ - fastify-plugin 사용
778
+ - 데코레이터 활용
779
+ - 플러그인 순서
780
+
781
+ ### 2. 스키마 검증
782
+ - JSON Schema 정의
783
+ - 응답 스키마
784
+ - 쿼리/파라미터 스키마
785
+ - 공유 스키마 ($ref)
786
+
787
+ ### 3. 직렬화
788
+ - fast-json-stringify 활용
789
+ - 응답 직렬화 최적화
790
+
791
+ ### 4. 훅
792
+ - 라이프사이클 훅 활용
793
+ - onRequest, preHandler, onSend
794
+ - 에러 훅
795
+
796
+ ### 5. 타입 안전성
797
+ - TypeBox 또는 Typebox
798
+ - 타입 프로바이더
799
+ - 제네릭 라우트`,
800
+ },
801
+
802
+ springboot: {
803
+ name: "Spring Boot",
804
+ description: "Spring Boot 베스트 프랙티스 기반 리뷰",
805
+ tags: ["framework", "backend", "java", "spring"],
806
+ prompt: `Spring Boot 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
807
+
808
+ ## 검토 항목
809
+
810
+ ### 1. 레이어 구조
811
+ - Controller → Service → Repository 분리
812
+ - DTO vs Entity 분리
813
+ - 도메인 로직 위치
814
+
815
+ ### 2. 의존성 주입
816
+ - 생성자 주입 선호
817
+ - @Autowired 필드 주입 지양
818
+ - 인터페이스 기반 설계
819
+
820
+ ### 3. REST API
821
+ - @RestController 사용
822
+ - ResponseEntity 활용
823
+ - HTTP 상태 코드
824
+ - API 버저닝
825
+
826
+ ### 4. 검증
827
+ - @Valid, @Validated
828
+ - 커스텀 Validator
829
+ - BindingResult 처리
830
+
831
+ ### 5. 예외 처리
832
+ - @ControllerAdvice
833
+ - @ExceptionHandler
834
+ - 커스텀 예외 클래스
835
+
836
+ ### 6. JPA/Hibernate
837
+ - 지연 로딩 vs 즉시 로딩
838
+ - N+1 문제 해결 (fetch join, @EntityGraph)
839
+ - 트랜잭션 범위
840
+ - 영속성 컨텍스트
841
+
842
+ ### 7. 보안
843
+ - Spring Security 설정
844
+ - 인증/인가 분리
845
+ - CSRF, CORS
846
+
847
+ ### 8. 설정
848
+ - application.yml 구조
849
+ - 프로파일 관리
850
+ - 외부 설정`,
851
+ },
852
+
853
+ django: {
854
+ name: "Django",
855
+ description: "Django 베스트 프랙티스 기반 리뷰",
856
+ tags: ["framework", "backend", "python", "django"],
857
+ prompt: `Django 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
858
+
859
+ ## 검토 항목
860
+
861
+ ### 1. 프로젝트 구조
862
+ - 앱 분리 원칙
863
+ - 설정 파일 구조
864
+ - URL 라우팅
865
+
866
+ ### 2. 모델
867
+ - 필드 타입 적절성
868
+ - 인덱스 설정
869
+ - Manager 커스터마이징
870
+ - 시그널 사용
871
+
872
+ ### 3. 뷰
873
+ - CBV vs FBV 선택
874
+ - Mixin 활용
875
+ - 권한 처리
876
+
877
+ ### 4. ORM
878
+ - QuerySet 최적화
879
+ - select_related/prefetch_related
880
+ - 집계 함수 활용
881
+ - Raw SQL 최소화
882
+
883
+ ### 5. 폼
884
+ - ModelForm 활용
885
+ - 커스텀 검증
886
+ - 위젯 커스터마이징
887
+
888
+ ### 6. 보안
889
+ - CSRF 보호
890
+ - XSS 방지
891
+ - SQL Injection 방지
892
+ - 인증/인가
893
+
894
+ ### 7. Django REST Framework
895
+ - Serializer 설계
896
+ - ViewSet 활용
897
+ - 권한 클래스
898
+ - 페이지네이션`,
899
+ },
900
+
901
+ flask: {
902
+ name: "Flask",
903
+ description: "Flask 베스트 프랙티스 기반 리뷰",
904
+ tags: ["framework", "backend", "python", "flask"],
905
+ prompt: `Flask 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
906
+
907
+ ## 검토 항목
908
+
909
+ ### 1. 애플리케이션 팩토리
910
+ - create_app 패턴
911
+ - 설정 관리
912
+ - 확장 초기화
913
+
914
+ ### 2. 블루프린트
915
+ - 모듈화 구조
916
+ - URL 프리픽스
917
+ - 에러 핸들러
918
+
919
+ ### 3. 라우팅
920
+ - 데코레이터 사용
921
+ - URL 변수
922
+ - HTTP 메서드
923
+
924
+ ### 4. 요청/응답
925
+ - request 객체 활용
926
+ - jsonify 사용
927
+ - 에러 응답
928
+
929
+ ### 5. 데이터베이스
930
+ - Flask-SQLAlchemy 사용
931
+ - 세션 관리
932
+ - 마이그레이션 (Flask-Migrate)
933
+
934
+ ### 6. 보안
935
+ - Flask-Login
936
+ - 비밀번호 해싱
937
+ - CSRF 보호`,
938
+ },
939
+ };
940
+
941
+ /**
942
+ * Domain Presets
943
+ * 도메인/영역별 프리셋
944
+ */
945
+ export const DOMAIN_PRESETS: PresetRegistry = {
946
+ frontend: {
947
+ name: "프론트엔드 일반",
948
+ description: "프론트엔드 개발 전반 관점 리뷰",
949
+ tags: ["domain", "frontend"],
950
+ prompt: `프론트엔드 개발 관점에서 코드를 리뷰해주세요:
951
+
952
+ ## 검토 항목
953
+
954
+ ### 1. UI/UX
955
+ - 사용자 피드백 (로딩, 에러 상태)
956
+ - 인터랙션 일관성
957
+ - 폼 유효성 검사 UX
958
+ - 반응형 디자인
959
+
960
+ ### 2. 상태 관리
961
+ - 로컬/전역 상태 분리
962
+ - 상태 정규화
963
+ - 캐싱 전략
964
+ - 낙관적 업데이트
965
+
966
+ ### 3. API 통신
967
+ - 에러 핸들링
968
+ - 로딩 상태 관리
969
+ - 재시도 로직
970
+ - 요청 취소
971
+
972
+ ### 4. 스타일링
973
+ - CSS 방법론 (BEM, CSS Modules, CSS-in-JS)
974
+ - 테마 시스템
975
+ - 반응형 브레이크포인트
976
+ - 다크모드 지원
977
+
978
+ ### 5. 빌드/번들
979
+ - 트리 쉐이킹
980
+ - 코드 스플리팅
981
+ - 환경 변수 관리
982
+ - 소스맵
983
+
984
+ ### 6. 브라우저 호환성
985
+ - Polyfill 필요성
986
+ - CSS 프리픽스
987
+ - Feature Detection`,
988
+ },
989
+
990
+ backend: {
991
+ name: "백엔드 일반",
992
+ description: "백엔드 개발 전반 관점 리뷰",
993
+ tags: ["domain", "backend"],
994
+ prompt: `백엔드 개발 관점에서 코드를 리뷰해주세요:
995
+
996
+ ## 검토 항목
997
+
998
+ ### 1. API 설계
999
+ - RESTful 원칙 준수
1000
+ - 엔드포인트 네이밍
1001
+ - HTTP 메서드 적절성
1002
+ - 상태 코드 사용
1003
+ - 버저닝 전략
1004
+
1005
+ ### 2. 데이터베이스
1006
+ - 스키마 설계
1007
+ - 인덱스 전략
1008
+ - 쿼리 최적화
1009
+ - 트랜잭션 관리
1010
+ - 커넥션 풀링
1011
+
1012
+ ### 3. 인증/인가
1013
+ - 인증 방식 (JWT, Session, OAuth)
1014
+ - 권한 체크 위치
1015
+ - 토큰 관리
1016
+ - 비밀번호 정책
1017
+
1018
+ ### 4. 비동기 처리
1019
+ - 큐 시스템 활용
1020
+ - 백그라운드 작업
1021
+ - 이벤트 기반 처리
1022
+
1023
+ ### 5. 캐싱
1024
+ - 캐시 전략 (Cache-Aside, Write-Through)
1025
+ - TTL 설정
1026
+ - 캐시 무효화
1027
+ - 분산 캐시
1028
+
1029
+ ### 6. 로깅/모니터링
1030
+ - 로그 레벨
1031
+ - 구조화된 로깅
1032
+ - 요청 추적
1033
+ - 메트릭 수집`,
1034
+ },
1035
+
1036
+ fullstack: {
1037
+ name: "풀스택",
1038
+ description: "프론트엔드와 백엔드 전체 관점 리뷰",
1039
+ tags: ["domain", "fullstack"],
1040
+ prompt: `풀스택 관점에서 코드를 리뷰해주세요:
1041
+
1042
+ ## 검토 항목
1043
+
1044
+ ### 1. API 계약
1045
+ - 프론트-백 인터페이스 일관성
1046
+ - 타입 공유 (OpenAPI, GraphQL 스키마)
1047
+ - 에러 응답 형식 통일
1048
+ - 페이지네이션 표준
1049
+
1050
+ ### 2. 데이터 흐름
1051
+ - 클라이언트-서버 데이터 동기화
1052
+ - 실시간 업데이트 처리
1053
+ - 캐싱 전략 일관성
1054
+ - 낙관적 업데이트
1055
+
1056
+ ### 3. 인증 흐름
1057
+ - 토큰 저장 방식
1058
+ - 리프레시 토큰 처리
1059
+ - 세션 만료 UX
1060
+ - 로그아웃 처리
1061
+
1062
+ ### 4. 환경 설정
1063
+ - 환경 변수 관리
1064
+ - 시크릿 관리
1065
+ - 설정 검증
1066
+
1067
+ ### 5. 배포
1068
+ - 빌드 파이프라인
1069
+ - 환경별 설정
1070
+ - 마이그레이션 전략`,
1071
+ },
1072
+
1073
+ mobile: {
1074
+ name: "모바일 (React Native/Flutter)",
1075
+ description: "크로스 플랫폼 모바일 앱 관점 리뷰",
1076
+ tags: ["domain", "mobile"],
1077
+ prompt: `모바일 앱 개발 관점에서 코드를 리뷰해주세요:
1078
+
1079
+ ## 검토 항목
1080
+
1081
+ ### 1. 성능
1082
+ - 렌더링 최적화
1083
+ - 메모리 관리
1084
+ - 리스트 가상화
1085
+ - 이미지 최적화
1086
+ - 네이티브 모듈 사용
1087
+
1088
+ ### 2. UX
1089
+ - 제스처 핸들링
1090
+ - 애니메이션 부드러움
1091
+ - 오프라인 지원
1092
+ - 딥링킹
1093
+
1094
+ ### 3. 네이티브 연동
1095
+ - 플랫폼별 코드 분리
1096
+ - 권한 요청
1097
+ - 푸시 알림
1098
+ - 백그라운드 작업
1099
+
1100
+ ### 4. 상태 관리
1101
+ - 로컬 저장소 활용
1102
+ - 상태 지속성
1103
+ - 네비게이션 상태
1104
+
1105
+ ### 5. 테스트
1106
+ - 단위 테스트
1107
+ - 위젯/컴포넌트 테스트
1108
+ - E2E 테스트
1109
+ - 디바이스 테스트`,
1110
+ },
1111
+
1112
+ devops: {
1113
+ name: "DevOps/인프라",
1114
+ description: "CI/CD, 인프라 코드 관점 리뷰",
1115
+ tags: ["domain", "devops", "infrastructure"],
1116
+ prompt: `DevOps/인프라 관점에서 코드를 리뷰해주세요:
1117
+
1118
+ ## 검토 항목
1119
+
1120
+ ### 1. CI/CD
1121
+ - 파이프라인 구조
1122
+ - 테스트 단계
1123
+ - 빌드 최적화
1124
+ - 배포 전략 (Blue-Green, Canary)
1125
+
1126
+ ### 2. IaC (Infrastructure as Code)
1127
+ - 모듈화
1128
+ - 상태 관리
1129
+ - 변수/시크릿 관리
1130
+ - 드리프트 방지
1131
+
1132
+ ### 3. 컨테이너
1133
+ - Dockerfile 최적화
1134
+ - 이미지 크기
1135
+ - 레이어 캐싱
1136
+ - 보안 스캐닝
1137
+
1138
+ ### 4. Kubernetes
1139
+ - 리소스 정의
1140
+ - 리소스 제한
1141
+ - 헬스 체크
1142
+ - 시크릿 관리
1143
+
1144
+ ### 5. 모니터링
1145
+ - 메트릭 수집
1146
+ - 로그 집계
1147
+ - 알림 설정
1148
+ - 대시보드`,
1149
+ },
1150
+
1151
+ database: {
1152
+ name: "데이터베이스",
1153
+ description: "데이터베이스 스키마, 쿼리 최적화 관점 리뷰",
1154
+ tags: ["domain", "database"],
1155
+ prompt: `데이터베이스 관점에서 코드를 리뷰해주세요:
1156
+
1157
+ ## 검토 항목
1158
+
1159
+ ### 1. 스키마 설계
1160
+ - 정규화 수준 적절성
1161
+ - 관계 설정
1162
+ - 데이터 타입 선택
1163
+ - NULL 허용 여부
1164
+
1165
+ ### 2. 인덱스
1166
+ - 인덱스 필요성
1167
+ - 복합 인덱스 순서
1168
+ - 인덱스 과다 사용
1169
+ - 커버링 인덱스
1170
+
1171
+ ### 3. 쿼리 최적화
1172
+ - 실행 계획 분석
1173
+ - N+1 문제
1174
+ - 서브쿼리 vs JOIN
1175
+ - LIMIT/OFFSET 주의
1176
+
1177
+ ### 4. 트랜잭션
1178
+ - 격리 수준
1179
+ - 데드락 방지
1180
+ - 트랜잭션 범위
1181
+ - 롤백 처리
1182
+
1183
+ ### 5. 마이그레이션
1184
+ - 무중단 마이그레이션
1185
+ - 롤백 계획
1186
+ - 데이터 백필`,
1187
+ },
1188
+ };
1189
+
1190
+ /**
1191
+ * Language Presets
1192
+ * 프로그래밍 언어별 프리셋
1193
+ */
1194
+ export const LANGUAGE_PRESETS: PresetRegistry = {
1195
+ typescript: {
1196
+ name: "TypeScript",
1197
+ description: "TypeScript 타입 시스템 및 베스트 프랙티스 리뷰",
1198
+ tags: ["language", "typescript"],
1199
+ prompt: `TypeScript 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
1200
+
1201
+ ## 검토 항목
1202
+
1203
+ ### 1. 타입 정의
1204
+ - any 사용 최소화
1205
+ - unknown vs any 선택
1206
+ - 타입 추론 활용
1207
+ - 명시적 타입 필요 여부
1208
+
1209
+ ### 2. 타입 안전성
1210
+ - null/undefined 처리
1211
+ - 타입 가드 사용
1212
+ - 타입 단언 최소화
1213
+ - never 타입 활용
1214
+
1215
+ ### 3. 제네릭
1216
+ - 제네릭 활용 기회
1217
+ - 제네릭 제약 조건
1218
+ - 조건부 타입
1219
+ - 매핑된 타입
1220
+
1221
+ ### 4. 인터페이스 vs 타입
1222
+ - 적절한 선택
1223
+ - 확장성 고려
1224
+ - 유니온/인터섹션 활용
1225
+
1226
+ ### 5. 유틸리티 타입
1227
+ - Partial, Required, Pick, Omit
1228
+ - Record, Readonly
1229
+ - ReturnType, Parameters
1230
+
1231
+ ### 6. 모듈
1232
+ - import/export 구조
1233
+ - 타입 전용 import
1234
+ - 배럴 파일`,
1235
+ },
1236
+
1237
+ javascript: {
1238
+ name: "JavaScript",
1239
+ description: "모던 JavaScript 베스트 프랙티스 리뷰",
1240
+ tags: ["language", "javascript"],
1241
+ prompt: `모던 JavaScript 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
1242
+
1243
+ ## 검토 항목
1244
+
1245
+ ### 1. ES6+ 문법
1246
+ - const/let 사용 (var 지양)
1247
+ - 화살표 함수 적절한 사용
1248
+ - 템플릿 리터럴
1249
+ - 구조 분해 할당
1250
+ - 스프레드 연산자
1251
+
1252
+ ### 2. 비동기 처리
1253
+ - async/await 패턴
1254
+ - Promise 체이닝
1255
+ - 에러 핸들링
1256
+ - 병렬 처리 (Promise.all)
1257
+
1258
+ ### 3. 배열/객체 메서드
1259
+ - map, filter, reduce 활용
1260
+ - find, findIndex, includes
1261
+ - Object.entries/keys/values
1262
+ - Optional chaining (?.)
1263
+ - Nullish coalescing (??)
1264
+
1265
+ ### 4. 모듈 시스템
1266
+ - ES Modules 사용
1267
+ - 동적 import
1268
+ - 네임드 vs 디폴트 export
1269
+
1270
+ ### 5. 클로저 및 스코프
1271
+ - 클로저 이해
1272
+ - this 바인딩
1273
+ - 호이스팅 주의`,
1274
+ },
1275
+
1276
+ python: {
1277
+ name: "Python",
1278
+ description: "Python/PEP 스타일 가이드 기반 리뷰",
1279
+ tags: ["language", "python"],
1280
+ prompt: `Python (PEP 8) 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
1281
+
1282
+ ## 검토 항목
1283
+
1284
+ ### 1. PEP 8 스타일
1285
+ - 네이밍 컨벤션 (snake_case)
1286
+ - 들여쓰기 (4 spaces)
1287
+ - 줄 길이 (79-120자)
1288
+ - import 순서
1289
+
1290
+ ### 2. Pythonic 코드
1291
+ - List comprehension
1292
+ - Generator expression
1293
+ - Context manager (with)
1294
+ - f-string 포매팅
1295
+
1296
+ ### 3. 타입 힌트
1297
+ - 함수 시그니처 타입
1298
+ - 변수 타입 힌트
1299
+ - typing 모듈 활용
1300
+ - mypy 호환성
1301
+
1302
+ ### 4. 예외 처리
1303
+ - 구체적인 예외 타입
1304
+ - 예외 체이닝 (from)
1305
+ - 커스텀 예외
1306
+
1307
+ ### 5. 클래스
1308
+ - @dataclass 활용
1309
+ - @property 데코레이터
1310
+ - __slots__ 최적화
1311
+ - ABC 추상 클래스
1312
+
1313
+ ### 6. 함수형
1314
+ - 순수 함수
1315
+ - functools 활용
1316
+ - 불변성 선호`,
1317
+ },
1318
+
1319
+ go: {
1320
+ name: "Go",
1321
+ description: "Go 언어 관용구 및 베스트 프랙티스 리뷰",
1322
+ tags: ["language", "go"],
1323
+ prompt: `Go 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
1324
+
1325
+ ## 검토 항목
1326
+
1327
+ ### 1. Go 관용구
1328
+ - 에러 핸들링 패턴
1329
+ - 명시적 에러 반환
1330
+ - defer 활용
1331
+ - 빈 인터페이스 최소화
1332
+
1333
+ ### 2. 네이밍
1334
+ - MixedCaps 컨벤션
1335
+ - 약어 대문자 (HTTP, URL)
1336
+ - 내보내기 (대문자 시작)
1337
+ - 패키지 이름
1338
+
1339
+ ### 3. 동시성
1340
+ - goroutine 사용
1341
+ - channel 패턴
1342
+ - sync 패키지 활용
1343
+ - 데이터 레이스 방지
1344
+
1345
+ ### 4. 인터페이스
1346
+ - 작은 인터페이스 선호
1347
+ - 암묵적 구현
1348
+ - 인터페이스 수용, 구조체 반환
1349
+
1350
+ ### 5. 에러 처리
1351
+ - errors.Is, errors.As
1352
+ - 에러 래핑 (%w)
1353
+ - 센티널 에러
1354
+ - 커스텀 에러 타입
1355
+
1356
+ ### 6. 테스트
1357
+ - 테이블 주도 테스트
1358
+ - 서브테스트
1359
+ - 테스트 헬퍼`,
1360
+ },
1361
+
1362
+ java: {
1363
+ name: "Java",
1364
+ description: "Java 베스트 프랙티스 및 모던 Java 기능 리뷰",
1365
+ tags: ["language", "java"],
1366
+ prompt: `Java 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
1367
+
1368
+ ## 검토 항목
1369
+
1370
+ ### 1. 모던 Java (8+)
1371
+ - Stream API 활용
1372
+ - Optional 사용
1373
+ - 람다 표현식
1374
+ - 메서드 레퍼런스
1375
+ - Record 클래스 (16+)
1376
+
1377
+ ### 2. 객체 지향
1378
+ - SOLID 원칙
1379
+ - 상속 vs 컴포지션
1380
+ - 인터페이스 기반 설계
1381
+ - 불변 객체
1382
+
1383
+ ### 3. 예외 처리
1384
+ - Checked vs Unchecked
1385
+ - try-with-resources
1386
+ - 예외 체이닝
1387
+ - 커스텀 예외
1388
+
1389
+ ### 4. 컬렉션
1390
+ - 적절한 컬렉션 선택
1391
+ - 불변 컬렉션 (List.of)
1392
+ - 스트림 vs 루프
1393
+ - Null 안전 컬렉션
1394
+
1395
+ ### 5. 동시성
1396
+ - ExecutorService
1397
+ - CompletableFuture
1398
+ - 동기화 전략
1399
+ - 불변성 활용
1400
+
1401
+ ### 6. 메모리
1402
+ - 메모리 누수 방지
1403
+ - WeakReference
1404
+ - 객체 풀링`,
1405
+ },
1406
+
1407
+ rust: {
1408
+ name: "Rust",
1409
+ description: "Rust 소유권, 안전성 관점 리뷰",
1410
+ tags: ["language", "rust"],
1411
+ prompt: `Rust 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
1412
+
1413
+ ## 검토 항목
1414
+
1415
+ ### 1. 소유권
1416
+ - 소유권 이동 vs 빌림
1417
+ - 라이프타임 적절성
1418
+ - 복사 vs 클론 선택
1419
+
1420
+ ### 2. 에러 처리
1421
+ - Result, Option 활용
1422
+ - ? 연산자
1423
+ - 커스텀 에러 타입
1424
+ - thiserror/anyhow 활용
1425
+
1426
+ ### 3. 패턴
1427
+ - match 완전성
1428
+ - if let, while let
1429
+ - 구조체 패턴
1430
+
1431
+ ### 4. 타입 시스템
1432
+ - 제네릭 활용
1433
+ - 트레이트 바운드
1434
+ - Associated Types
1435
+ - PhantomData
1436
+
1437
+ ### 5. 동시성
1438
+ - Send, Sync 트레이트
1439
+ - Arc, Mutex 활용
1440
+ - 채널 통신
1441
+ - async/await
1442
+
1443
+ ### 6. 성능
1444
+ - 제로 코스트 추상화
1445
+ - 인라이닝
1446
+ - 스택 vs 힙 할당`,
1447
+ },
1448
+ };
1449
+
1450
+ /**
1451
+ * AI/ML Presets
1452
+ * AI/ML 및 챗봇 관련 프리셋
1453
+ */
1454
+ export const AI_PRESETS: PresetRegistry = {
1455
+ chatbot: {
1456
+ name: "챗봇/대화형 AI",
1457
+ description: "챗봇 및 대화형 AI 시스템 관점 리뷰",
1458
+ tags: ["ai", "chatbot", "conversational"],
1459
+ prompt: `챗봇/대화형 AI 시스템 관점에서 코드를 리뷰해주세요:
1460
+
1461
+ ## 검토 항목
1462
+
1463
+ ### 1. 대화 관리
1464
+ - 대화 컨텍스트 유지
1465
+ - 세션 관리
1466
+ - 대화 히스토리 저장
1467
+ - 컨텍스트 윈도우 관리
1468
+ - 멀티턴 대화 처리
1469
+
1470
+ ### 2. 프롬프트 엔지니어링
1471
+ - 시스템 프롬프트 설계
1472
+ - 프롬프트 템플릿 관리
1473
+ - 동적 프롬프트 생성
1474
+ - Few-shot 예제 관리
1475
+ - 프롬프트 인젝션 방지
1476
+
1477
+ ### 3. LLM 통합
1478
+ - API 호출 최적화
1479
+ - 토큰 사용량 관리
1480
+ - 스트리밍 응답 처리
1481
+ - 폴백 모델 전략
1482
+ - Rate Limiting 처리
1483
+
1484
+ ### 4. 응답 처리
1485
+ - 응답 파싱 및 검증
1486
+ - 할루시네이션 감지
1487
+ - 응답 필터링 (부적절한 내용)
1488
+ - 구조화된 출력 처리
1489
+
1490
+ ### 5. RAG (Retrieval Augmented Generation)
1491
+ - 문서 청킹 전략
1492
+ - 임베딩 생성
1493
+ - 벡터 검색 최적화
1494
+ - 컨텍스트 주입
1495
+
1496
+ ### 6. 사용자 경험
1497
+ - 타이핑 인디케이터
1498
+ - 에러 메시지 친화성
1499
+ - 대화 재시작/초기화
1500
+ - 피드백 수집
1501
+
1502
+ ### 7. 안전성
1503
+ - 콘텐츠 필터링
1504
+ - PII 마스킹
1505
+ - 프롬프트 인젝션 방어
1506
+ - 출력 검증`,
1507
+ },
1508
+
1509
+ llmIntegration: {
1510
+ name: "LLM API 통합",
1511
+ description: "OpenAI, Anthropic, Google AI 등 LLM API 통합 관점 리뷰",
1512
+ tags: ["ai", "llm", "api"],
1513
+ prompt: `LLM API 통합 관점에서 코드를 리뷰해주세요:
1514
+
1515
+ ## 검토 항목
1516
+
1517
+ ### 1. API 클라이언트
1518
+ - 공식 SDK 사용 여부
1519
+ - 클라이언트 초기화
1520
+ - 설정 관리
1521
+ - 타임아웃 설정
1522
+
1523
+ ### 2. 요청 처리
1524
+ - 토큰 카운팅
1525
+ - 요청 크기 최적화
1526
+ - 배치 처리
1527
+ - 비동기 요청 관리
1528
+
1529
+ ### 3. 응답 처리
1530
+ - 스트리밍 처리
1531
+ - 응답 파싱
1532
+ - 에러 코드 처리
1533
+ - 재시도 로직
1534
+
1535
+ ### 4. 비용 관리
1536
+ - 토큰 사용량 추적
1537
+ - 모델 선택 최적화
1538
+ - 캐싱 전략
1539
+ - 비용 알림
1540
+
1541
+ ### 5. 에러 핸들링
1542
+ - Rate Limit 처리
1543
+ - 네트워크 에러
1544
+ - 컨텍스트 길이 초과
1545
+ - 콘텐츠 필터 에러
1546
+
1547
+ ### 6. 보안
1548
+ - API 키 관리
1549
+ - 요청 로깅 (민감정보 제외)
1550
+ - 사용자 데이터 처리`,
1551
+ },
1552
+
1553
+ rag: {
1554
+ name: "RAG 시스템",
1555
+ description: "Retrieval Augmented Generation 시스템 관점 리뷰",
1556
+ tags: ["ai", "rag", "vector"],
1557
+ prompt: `RAG (Retrieval Augmented Generation) 시스템 관점에서 코드를 리뷰해주세요:
1558
+
1559
+ ## 검토 항목
1560
+
1561
+ ### 1. 문서 처리
1562
+ - 문서 로딩 방식
1563
+ - 청킹 전략 (크기, 오버랩)
1564
+ - 메타데이터 추출
1565
+ - 문서 전처리
1566
+
1567
+ ### 2. 임베딩
1568
+ - 임베딩 모델 선택
1569
+ - 배치 임베딩 처리
1570
+ - 임베딩 캐싱
1571
+ - 차원 최적화
1572
+
1573
+ ### 3. 벡터 저장소
1574
+ - 벡터 DB 선택 (Pinecone, Weaviate, Chroma 등)
1575
+ - 인덱스 전략
1576
+ - 메타데이터 필터링
1577
+ - 하이브리드 검색
1578
+
1579
+ ### 4. 검색
1580
+ - 유사도 검색 알고리즘
1581
+ - Top-K 선택
1582
+ - 리랭킹 전략
1583
+ - 검색 품질 평가
1584
+
1585
+ ### 5. 컨텍스트 조합
1586
+ - 검색 결과 병합
1587
+ - 컨텍스트 압축
1588
+ - 소스 인용
1589
+ - 중복 제거
1590
+
1591
+ ### 6. 응답 생성
1592
+ - 프롬프트 구성
1593
+ - 소스 기반 응답 강제
1594
+ - 할루시네이션 방지
1595
+ - 응답 검증`,
1596
+ },
1597
+
1598
+ aiAgent: {
1599
+ name: "AI 에이전트",
1600
+ description: "자율적 AI 에이전트 시스템 관점 리뷰",
1601
+ tags: ["ai", "agent", "autonomous"],
1602
+ prompt: `AI 에이전트 시스템 관점에서 코드를 리뷰해주세요:
1603
+
1604
+ ## 검토 항목
1605
+
1606
+ ### 1. 에이전트 아키텍처
1607
+ - 계획-실행-관찰 루프
1608
+ - 상태 관리
1609
+ - 메모리 시스템
1610
+ - 목표 분해
1611
+
1612
+ ### 2. 도구 사용
1613
+ - 도구 정의 및 스키마
1614
+ - 도구 선택 로직
1615
+ - 도구 실행 결과 처리
1616
+ - 도구 에러 핸들링
1617
+
1618
+ ### 3. 의사결정
1619
+ - 추론 체인
1620
+ - 자기 반성 메커니즘
1621
+ - 불확실성 처리
1622
+ - 휴먼 인 더 루프
1623
+
1624
+ ### 4. 안전성
1625
+ - 액션 검증
1626
+ - 샌드박스 실행
1627
+ - 권한 제한
1628
+ - 무한 루프 방지
1629
+
1630
+ ### 5. 관찰 가능성
1631
+ - 추론 과정 로깅
1632
+ - 디버깅 지원
1633
+ - 실행 추적
1634
+ - 성능 모니터링
1635
+
1636
+ ### 6. 멀티 에이전트
1637
+ - 에이전트 간 통신
1638
+ - 역할 분담
1639
+ - 협업 패턴
1640
+ - 충돌 해결`,
1641
+ },
1642
+
1643
+ mlOps: {
1644
+ name: "MLOps",
1645
+ description: "ML 모델 배포 및 운영 관점 리뷰",
1646
+ tags: ["ai", "mlops", "deployment"],
1647
+ prompt: `MLOps 관점에서 코드를 리뷰해주세요:
1648
+
1649
+ ## 검토 항목
1650
+
1651
+ ### 1. 모델 관리
1652
+ - 모델 버저닝
1653
+ - 모델 레지스트리
1654
+ - 아티팩트 저장
1655
+ - 메타데이터 추적
1656
+
1657
+ ### 2. 실험 추적
1658
+ - 하이퍼파라미터 로깅
1659
+ - 메트릭 기록
1660
+ - 실험 비교
1661
+ - 재현성
1662
+
1663
+ ### 3. 파이프라인
1664
+ - 데이터 파이프라인
1665
+ - 학습 파이프라인
1666
+ - 평가 파이프라인
1667
+ - 배포 파이프라인
1668
+
1669
+ ### 4. 서빙
1670
+ - 모델 서빙 방식
1671
+ - 배치 vs 실시간
1672
+ - A/B 테스트
1673
+ - 카나리 배포
1674
+
1675
+ ### 5. 모니터링
1676
+ - 모델 성능 모니터링
1677
+ - 데이터 드리프트 감지
1678
+ - 예측 분포 추적
1679
+ - 알림 설정
1680
+
1681
+ ### 6. 거버넌스
1682
+ - 모델 문서화
1683
+ - 감사 추적
1684
+ - 편향 모니터링
1685
+ - 규정 준수`,
1686
+ },
1687
+
1688
+ promptEngineering: {
1689
+ name: "프롬프트 엔지니어링",
1690
+ description: "프롬프트 설계 및 최적화 관점 리뷰",
1691
+ tags: ["ai", "prompt", "engineering"],
1692
+ prompt: `프롬프트 엔지니어링 관점에서 코드를 리뷰해주세요:
1693
+
1694
+ ## 검토 항목
1695
+
1696
+ ### 1. 프롬프트 구조
1697
+ - 시스템/사용자/어시스턴트 역할 분리
1698
+ - 명확한 지시사항
1699
+ - 형식 지정
1700
+ - 제약 조건 명시
1701
+
1702
+ ### 2. 프롬프트 템플릿
1703
+ - 변수 치환 방식
1704
+ - 조건부 섹션
1705
+ - 템플릿 재사용성
1706
+ - 버저닝
1707
+
1708
+ ### 3. 기법 적용
1709
+ - Few-shot 예제 품질
1710
+ - Chain-of-Thought 유도
1711
+ - 역할 부여
1712
+ - 출력 형식 지정
1713
+
1714
+ ### 4. 프롬프트 관리
1715
+ - 프롬프트 저장/로드
1716
+ - A/B 테스트 지원
1717
+ - 프롬프트 히스토리
1718
+ - 성능 추적
1719
+
1720
+ ### 5. 최적화
1721
+ - 토큰 효율성
1722
+ - 불필요한 텍스트 제거
1723
+ - 압축 기법
1724
+ - 캐싱
1725
+
1726
+ ### 6. 안전성
1727
+ - 프롬프트 인젝션 방어
1728
+ - 탈옥 방지
1729
+ - 출력 검증
1730
+ - 민감 정보 필터링`,
1731
+ },
1732
+
1733
+ vectorDB: {
1734
+ name: "벡터 데이터베이스",
1735
+ description: "벡터 DB 활용 및 최적화 관점 리뷰",
1736
+ tags: ["ai", "vector", "database"],
1737
+ prompt: `벡터 데이터베이스 활용 관점에서 코드를 리뷰해주세요:
1738
+
1739
+ ## 검토 항목
1740
+
1741
+ ### 1. 인덱스 설계
1742
+ - 인덱스 타입 선택 (HNSW, IVF 등)
1743
+ - 파라미터 튜닝
1744
+ - 메모리 vs 정확도 트레이드오프
1745
+
1746
+ ### 2. 데이터 모델링
1747
+ - 벡터 차원 최적화
1748
+ - 메타데이터 스키마
1749
+ - 네임스페이스/컬렉션 구조
1750
+
1751
+ ### 3. 쿼리 최적화
1752
+ - 필터링 전략
1753
+ - Top-K 설정
1754
+ - 하이브리드 검색 (벡터 + 키워드)
1755
+
1756
+ ### 4. 데이터 관리
1757
+ - 배치 업서트
1758
+ - 삭제 전략
1759
+ - 백업/복구
1760
+ - 동기화
1761
+
1762
+ ### 5. 성능
1763
+ - 쿼리 지연 시간
1764
+ - 처리량 최적화
1765
+ - 커넥션 풀링
1766
+ - 캐싱 전략
1767
+
1768
+ ### 6. 운영
1769
+ - 모니터링 메트릭
1770
+ - 스케일링 전략
1771
+ - 비용 최적화`,
1772
+ },
1773
+
1774
+ langchain: {
1775
+ name: "LangChain",
1776
+ description: "LangChain 프레임워크 베스트 프랙티스 리뷰",
1777
+ tags: ["ai", "langchain", "framework"],
1778
+ prompt: `LangChain 베스트 프랙티스 기준으로 코드를 리뷰해주세요:
1779
+
1780
+ ## 검토 항목
1781
+
1782
+ ### 1. 체인 설계
1783
+ - LCEL (LangChain Expression Language) 활용
1784
+ - 체인 조합 패턴
1785
+ - Runnable 인터페이스 활용
1786
+
1787
+ ### 2. 프롬프트
1788
+ - PromptTemplate 사용
1789
+ - ChatPromptTemplate 구조
1790
+ - 동적 프롬프트 생성
1791
+
1792
+ ### 3. 메모리
1793
+ - 적절한 메모리 타입 선택
1794
+ - 메모리 크기 관리
1795
+ - 커스텀 메모리 구현
1796
+
1797
+ ### 4. 에이전트
1798
+ - 도구 정의
1799
+ - 에이전트 타입 선택
1800
+ - 에이전트 실행기 설정
1801
+
1802
+ ### 5. 검색
1803
+ - 문서 로더 활용
1804
+ - 텍스트 스플리터 설정
1805
+ - 리트리버 구성
1806
+
1807
+ ### 6. 콜백
1808
+ - 콜백 핸들러 구현
1809
+ - 스트리밍 처리
1810
+ - 로깅/추적`,
1811
+ },
1812
+ };
1813
+
1814
+ /**
1815
+ * Quality Presets
1816
+ * 코드 품질 관련 프리셋
1817
+ */
1818
+ export const QUALITY_PRESETS: PresetRegistry = {
1819
+ cleanCode: {
1820
+ name: "클린 코드",
1821
+ description: "클린 코드 원칙 기반 리뷰",
1822
+ tags: ["quality", "clean-code"],
1823
+ prompt: `클린 코드 원칙에 따라 코드를 리뷰해주세요:
1824
+
1825
+ ## 검토 항목
1826
+
1827
+ ### 1. 의미 있는 이름
1828
+ - 의도를 나타내는 이름
1829
+ - 발음 가능한 이름
1830
+ - 검색 가능한 이름
1831
+ - 클래스/메서드 네이밍 규칙
1832
+
1833
+ ### 2. 함수
1834
+ - 작게 만들기 (20줄 이하)
1835
+ - 한 가지만 하기
1836
+ - 추상화 수준 일관성
1837
+ - 부수 효과 없애기
1838
+
1839
+ ### 3. 주석
1840
+ - 코드로 의도 표현
1841
+ - 불필요한 주석 제거
1842
+ - TODO, FIXME 정리
1843
+
1844
+ ### 4. 형식 맞추기
1845
+ - 적절한 줄 길이
1846
+ - 세로 밀집도
1847
+ - 가로 공백
1848
+
1849
+ ### 5. 객체와 자료 구조
1850
+ - 자료 추상화
1851
+ - 디미터 법칙
1852
+ - DTO 분리
1853
+
1854
+ ### 6. 오류 처리
1855
+ - 예외 사용
1856
+ - 미확인 예외 사용
1857
+ - 예외에 의미 담기
1858
+
1859
+ ### 7. 경계
1860
+ - 외부 코드 깔끔하게 사용
1861
+ - 어댑터 패턴 활용`,
1862
+ },
1863
+
1864
+ refactoring: {
1865
+ name: "리팩토링 기회",
1866
+ description: "리팩토링이 필요한 코드 스멜 식별",
1867
+ tags: ["quality", "refactoring"],
1868
+ prompt: `리팩토링 관점에서 코드 스멜을 식별해주세요:
1869
+
1870
+ ## 코드 스멜 체크리스트
1871
+
1872
+ ### 1. 블로터 (Bloaters)
1873
+ - 긴 메서드
1874
+ - 큰 클래스
1875
+ - 기본 타입 집착
1876
+ - 긴 매개변수 목록
1877
+ - 데이터 덩어리
1878
+
1879
+ ### 2. 객체 지향 남용 (OO Abusers)
1880
+ - Switch 문
1881
+ - 임시 필드
1882
+ - 거부된 유산
1883
+ - 다른 인터페이스를 가진 대안 클래스
1884
+
1885
+ ### 3. 변경 방해꾼 (Change Preventers)
1886
+ - 산탄총 수술
1887
+ - 평행 상속 계층
1888
+ - 발산적 변경
1889
+
1890
+ ### 4. 생략 가능 요소 (Dispensables)
1891
+ - 중복 코드
1892
+ - 게으른 클래스
1893
+ - 데이터 클래스
1894
+ - 죽은 코드
1895
+ - 추측 일반성
1896
+
1897
+ ### 5. 결합 (Couplers)
1898
+ - 기능 선망
1899
+ - 부적절한 친밀
1900
+ - 메시지 체인
1901
+ - 중재자
1902
+ - 불완전한 라이브러리 클래스
1903
+
1904
+ ## 리팩토링 제안
1905
+ 각 스멜에 대해 구체적인 리팩토링 기법을 제안해주세요.`,
1906
+ },
1907
+
1908
+ documentation: {
1909
+ name: "문서화",
1910
+ description: "코드 문서화 및 주석 관점 리뷰",
1911
+ tags: ["quality", "documentation"],
1912
+ prompt: `코드 문서화 관점에서 리뷰해주세요:
1913
+
1914
+ ## 검토 항목
1915
+
1916
+ ### 1. API 문서화
1917
+ - 공개 API 문서 존재
1918
+ - 파라미터 설명
1919
+ - 반환값 설명
1920
+ - 예외/에러 설명
1921
+ - 사용 예제
1922
+
1923
+ ### 2. 코드 주석
1924
+ - 복잡한 로직 설명
1925
+ - 비즈니스 규칙 명시
1926
+ - 왜(Why) 설명 (What 아님)
1927
+ - 경고/주의사항
1928
+
1929
+ ### 3. README
1930
+ - 프로젝트 개요
1931
+ - 설치 방법
1932
+ - 사용법
1933
+ - 설정 설명
1934
+
1935
+ ### 4. 인라인 문서
1936
+ - JSDoc/TSDoc/Docstring
1937
+ - 타입 설명
1938
+ - deprecated 표시
1939
+ - see also 참조
1940
+
1941
+ ### 5. 아키텍처 문서
1942
+ - 시스템 구조 설명
1943
+ - 의사결정 기록 (ADR)
1944
+ - 다이어그램`,
1945
+ },
1946
+
1947
+ maintainability: {
1948
+ name: "유지보수성",
1949
+ description: "장기적 유지보수 관점 리뷰",
1950
+ tags: ["quality", "maintainability"],
1951
+ prompt: `코드 유지보수성 관점에서 리뷰해주세요:
1952
+
1953
+ ## 검토 항목
1954
+
1955
+ ### 1. 가독성
1956
+ - 코드 자체 문서화
1957
+ - 일관된 스타일
1958
+ - 적절한 추상화 수준
1959
+ - 명확한 제어 흐름
1960
+
1961
+ ### 2. 모듈성
1962
+ - 단일 책임
1963
+ - 낮은 결합도
1964
+ - 높은 응집도
1965
+ - 명확한 인터페이스
1966
+
1967
+ ### 3. 테스트 가능성
1968
+ - 의존성 주입
1969
+ - 순수 함수
1970
+ - 부수 효과 격리
1971
+ - 모킹 용이성
1972
+
1973
+ ### 4. 확장성
1974
+ - 열린-닫힌 원칙
1975
+ - 플러그인 구조
1976
+ - 설정 외부화
1977
+
1978
+ ### 5. 디버깅 용이성
1979
+ - 명확한 에러 메시지
1980
+ - 충분한 로깅
1981
+ - 스택 트레이스 보존
1982
+
1983
+ ### 6. 기술 부채
1984
+ - 임시 해결책 식별
1985
+ - TODO 항목 정리
1986
+ - 레거시 코드 표시`,
1987
+ },
1988
+ };
1989
+
1990
+ /**
1991
+ * All presets combined
1992
+ */
1993
+ export const ALL_PRESETS: PresetRegistry = {
1994
+ ...EXPERIENCE_PRESETS,
1995
+ ...PERSPECTIVE_PRESETS,
1996
+ ...FRAMEWORK_PRESETS,
1997
+ ...DOMAIN_PRESETS,
1998
+ ...LANGUAGE_PRESETS,
1999
+ ...AI_PRESETS,
2000
+ ...QUALITY_PRESETS,
2001
+ };
2002
+
2003
+ /**
2004
+ * Get preset by key
2005
+ */
2006
+ export function getPreset(key: string): ReviewPreset | undefined {
2007
+ return ALL_PRESETS[key];
2008
+ }
2009
+
2010
+ /**
2011
+ * Get multiple presets by keys
2012
+ */
2013
+ export function getPresets(keys: string[]): ReviewPreset[] {
2014
+ return keys.map((key) => ALL_PRESETS[key]).filter(Boolean);
2015
+ }
2016
+
2017
+ /**
2018
+ * Search presets by tag
2019
+ */
2020
+ export function getPresetsByTag(tag: string): ReviewPreset[] {
2021
+ return Object.values(ALL_PRESETS).filter((preset) =>
2022
+ preset.tags.includes(tag)
2023
+ );
2024
+ }
2025
+
2026
+ /**
2027
+ * Get all preset keys
2028
+ */
2029
+ export function getAllPresetKeys(): string[] {
2030
+ return Object.keys(ALL_PRESETS);
2031
+ }
2032
+
2033
+ /**
2034
+ * Combine multiple presets into a single prompt
2035
+ */
2036
+ export function combinePresets(keys: string[], customPrompt?: string): string {
2037
+ const presets = getPresets(keys);
2038
+
2039
+ if (presets.length === 0 && !customPrompt) {
2040
+ return "";
2041
+ }
2042
+
2043
+ const sections: string[] = [];
2044
+
2045
+ // Add header
2046
+ if (presets.length > 0) {
2047
+ const presetNames = presets.map((p) => p.name).join(", ");
2048
+ sections.push(`# 코드 리뷰 가이드\n\n선택된 프리셋: ${presetNames}\n`);
2049
+ }
2050
+
2051
+ // Add each preset
2052
+ presets.forEach((preset, index) => {
2053
+ sections.push(`---\n\n## ${index + 1}. ${preset.name}\n\n${preset.prompt}`);
2054
+ });
2055
+
2056
+ // Add custom prompt
2057
+ if (customPrompt) {
2058
+ sections.push(`---\n\n## 추가 지시사항\n\n${customPrompt}`);
2059
+ }
2060
+
2061
+ return sections.join("\n\n");
2062
+ }
2063
+
2064
+ /**
2065
+ * Get preset categories for display
2066
+ */
2067
+ export function getPresetCategories(): Array<{
2068
+ category: PresetCategory;
2069
+ name: string;
2070
+ presets: Array<{ key: string; preset: ReviewPreset }>;
2071
+ }> {
2072
+ return [
2073
+ {
2074
+ category: "experience",
2075
+ name: "경험 레벨",
2076
+ presets: Object.entries(EXPERIENCE_PRESETS).map(([key, preset]) => ({
2077
+ key,
2078
+ preset,
2079
+ })),
2080
+ },
2081
+ {
2082
+ category: "perspective",
2083
+ name: "리뷰 관점",
2084
+ presets: Object.entries(PERSPECTIVE_PRESETS).map(([key, preset]) => ({
2085
+ key,
2086
+ preset,
2087
+ })),
2088
+ },
2089
+ {
2090
+ category: "framework",
2091
+ name: "프레임워크",
2092
+ presets: Object.entries(FRAMEWORK_PRESETS).map(([key, preset]) => ({
2093
+ key,
2094
+ preset,
2095
+ })),
2096
+ },
2097
+ {
2098
+ category: "domain",
2099
+ name: "도메인",
2100
+ presets: Object.entries(DOMAIN_PRESETS).map(([key, preset]) => ({
2101
+ key,
2102
+ preset,
2103
+ })),
2104
+ },
2105
+ {
2106
+ category: "language",
2107
+ name: "프로그래밍 언어",
2108
+ presets: Object.entries(LANGUAGE_PRESETS).map(([key, preset]) => ({
2109
+ key,
2110
+ preset,
2111
+ })),
2112
+ },
2113
+ {
2114
+ category: "ai",
2115
+ name: "AI/ML",
2116
+ presets: Object.entries(AI_PRESETS).map(([key, preset]) => ({
2117
+ key,
2118
+ preset,
2119
+ })),
2120
+ },
2121
+ {
2122
+ category: "quality",
2123
+ name: "코드 품질",
2124
+ presets: Object.entries(QUALITY_PRESETS).map(([key, preset]) => ({
2125
+ key,
2126
+ preset,
2127
+ })),
2128
+ },
2129
+ ];
2130
+ }