timsquad 2.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.
Files changed (181) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -0
  3. package/bin/tsq.js +6 -0
  4. package/dist/commands/feedback.d.ts +3 -0
  5. package/dist/commands/feedback.d.ts.map +1 -0
  6. package/dist/commands/feedback.js +142 -0
  7. package/dist/commands/feedback.js.map +1 -0
  8. package/dist/commands/full.d.ts +3 -0
  9. package/dist/commands/full.d.ts.map +1 -0
  10. package/dist/commands/full.js +87 -0
  11. package/dist/commands/full.js.map +1 -0
  12. package/dist/commands/git/commit.d.ts +3 -0
  13. package/dist/commands/git/commit.d.ts.map +1 -0
  14. package/dist/commands/git/commit.js +88 -0
  15. package/dist/commands/git/commit.js.map +1 -0
  16. package/dist/commands/git/index.d.ts +5 -0
  17. package/dist/commands/git/index.d.ts.map +1 -0
  18. package/dist/commands/git/index.js +5 -0
  19. package/dist/commands/git/index.js.map +1 -0
  20. package/dist/commands/git/pr.d.ts +3 -0
  21. package/dist/commands/git/pr.d.ts.map +1 -0
  22. package/dist/commands/git/pr.js +138 -0
  23. package/dist/commands/git/pr.js.map +1 -0
  24. package/dist/commands/git/release.d.ts +3 -0
  25. package/dist/commands/git/release.d.ts.map +1 -0
  26. package/dist/commands/git/release.js +158 -0
  27. package/dist/commands/git/release.js.map +1 -0
  28. package/dist/commands/git/sync.d.ts +3 -0
  29. package/dist/commands/git/sync.d.ts.map +1 -0
  30. package/dist/commands/git/sync.js +132 -0
  31. package/dist/commands/git/sync.js.map +1 -0
  32. package/dist/commands/init.d.ts +3 -0
  33. package/dist/commands/init.d.ts.map +1 -0
  34. package/dist/commands/init.js +150 -0
  35. package/dist/commands/init.js.map +1 -0
  36. package/dist/commands/log.d.ts +3 -0
  37. package/dist/commands/log.d.ts.map +1 -0
  38. package/dist/commands/log.js +271 -0
  39. package/dist/commands/log.js.map +1 -0
  40. package/dist/commands/metrics.d.ts +3 -0
  41. package/dist/commands/metrics.d.ts.map +1 -0
  42. package/dist/commands/metrics.js +299 -0
  43. package/dist/commands/metrics.js.map +1 -0
  44. package/dist/commands/quick.d.ts +3 -0
  45. package/dist/commands/quick.d.ts.map +1 -0
  46. package/dist/commands/quick.js +136 -0
  47. package/dist/commands/quick.js.map +1 -0
  48. package/dist/commands/retro.d.ts +3 -0
  49. package/dist/commands/retro.d.ts.map +1 -0
  50. package/dist/commands/retro.js +280 -0
  51. package/dist/commands/retro.js.map +1 -0
  52. package/dist/commands/status.d.ts +3 -0
  53. package/dist/commands/status.d.ts.map +1 -0
  54. package/dist/commands/status.js +127 -0
  55. package/dist/commands/status.js.map +1 -0
  56. package/dist/commands/watch.d.ts +3 -0
  57. package/dist/commands/watch.d.ts.map +1 -0
  58. package/dist/commands/watch.js +213 -0
  59. package/dist/commands/watch.js.map +1 -0
  60. package/dist/index.d.ts +3 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +50 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/lib/config.d.ts +34 -0
  65. package/dist/lib/config.d.ts.map +1 -0
  66. package/dist/lib/config.js +108 -0
  67. package/dist/lib/config.js.map +1 -0
  68. package/dist/lib/project.d.ts +47 -0
  69. package/dist/lib/project.d.ts.map +1 -0
  70. package/dist/lib/project.js +191 -0
  71. package/dist/lib/project.js.map +1 -0
  72. package/dist/lib/template.d.ts +33 -0
  73. package/dist/lib/template.d.ts.map +1 -0
  74. package/dist/lib/template.js +151 -0
  75. package/dist/lib/template.js.map +1 -0
  76. package/dist/types/config.d.ts +75 -0
  77. package/dist/types/config.d.ts.map +1 -0
  78. package/dist/types/config.js +66 -0
  79. package/dist/types/config.js.map +1 -0
  80. package/dist/types/feedback.d.ts +59 -0
  81. package/dist/types/feedback.d.ts.map +1 -0
  82. package/dist/types/feedback.js +26 -0
  83. package/dist/types/feedback.js.map +1 -0
  84. package/dist/types/index.d.ts +4 -0
  85. package/dist/types/index.d.ts.map +1 -0
  86. package/dist/types/index.js +5 -0
  87. package/dist/types/index.js.map +1 -0
  88. package/dist/types/project.d.ts +89 -0
  89. package/dist/types/project.d.ts.map +1 -0
  90. package/dist/types/project.js +44 -0
  91. package/dist/types/project.js.map +1 -0
  92. package/dist/utils/colors.d.ts +30 -0
  93. package/dist/utils/colors.d.ts.map +1 -0
  94. package/dist/utils/colors.js +54 -0
  95. package/dist/utils/colors.js.map +1 -0
  96. package/dist/utils/date.d.ts +25 -0
  97. package/dist/utils/date.d.ts.map +1 -0
  98. package/dist/utils/date.js +65 -0
  99. package/dist/utils/date.js.map +1 -0
  100. package/dist/utils/fs.d.ts +49 -0
  101. package/dist/utils/fs.d.ts.map +1 -0
  102. package/dist/utils/fs.js +84 -0
  103. package/dist/utils/fs.js.map +1 -0
  104. package/dist/utils/prompts.d.ts +31 -0
  105. package/dist/utils/prompts.d.ts.map +1 -0
  106. package/dist/utils/prompts.js +95 -0
  107. package/dist/utils/prompts.js.map +1 -0
  108. package/dist/utils/yaml.d.ts +21 -0
  109. package/dist/utils/yaml.d.ts.map +1 -0
  110. package/dist/utils/yaml.js +40 -0
  111. package/dist/utils/yaml.js.map +1 -0
  112. package/package.json +71 -0
  113. package/templates/common/CLAUDE.md.template +254 -0
  114. package/templates/common/claude/agents/tsq-dba.md +290 -0
  115. package/templates/common/claude/agents/tsq-designer.md +304 -0
  116. package/templates/common/claude/agents/tsq-developer.md +118 -0
  117. package/templates/common/claude/agents/tsq-planner.md +90 -0
  118. package/templates/common/claude/agents/tsq-prompter.md +336 -0
  119. package/templates/common/claude/agents/tsq-qa.md +134 -0
  120. package/templates/common/claude/agents/tsq-retro.md +168 -0
  121. package/templates/common/claude/agents/tsq-security.md +190 -0
  122. package/templates/common/claude/skills/architecture/SKILL.md +123 -0
  123. package/templates/common/claude/skills/backend/node/SKILL.md +1015 -0
  124. package/templates/common/claude/skills/coding/SKILL.md +171 -0
  125. package/templates/common/claude/skills/database/prisma/SKILL.md +357 -0
  126. package/templates/common/claude/skills/frontend/nextjs/SKILL.md +279 -0
  127. package/templates/common/claude/skills/frontend/react/SKILL.md +1729 -0
  128. package/templates/common/claude/skills/methodology/bdd/SKILL.md +234 -0
  129. package/templates/common/claude/skills/methodology/ddd/SKILL.md +311 -0
  130. package/templates/common/claude/skills/methodology/tdd/SKILL.md +512 -0
  131. package/templates/common/claude/skills/planning/SKILL.md +90 -0
  132. package/templates/common/claude/skills/security/SKILL.md +234 -0
  133. package/templates/common/claude/skills/testing/SKILL.md +146 -0
  134. package/templates/common/claude/skills/typescript/SKILL.md +435 -0
  135. package/templates/common/config.template.yaml +131 -0
  136. package/templates/common/timsquad/architectures/clean/ARCHITECTURE.md +49 -0
  137. package/templates/common/timsquad/architectures/clean/backend.xml +210 -0
  138. package/templates/common/timsquad/architectures/clean/frontend.xml +148 -0
  139. package/templates/common/timsquad/architectures/fsd/ARCHITECTURE.md +67 -0
  140. package/templates/common/timsquad/architectures/fsd/frontend.xml +288 -0
  141. package/templates/common/timsquad/architectures/hexagonal/ARCHITECTURE.md +60 -0
  142. package/templates/common/timsquad/architectures/hexagonal/backend.xml +300 -0
  143. package/templates/common/timsquad/constraints/competency-framework.xml +501 -0
  144. package/templates/common/timsquad/constraints/ssot-schema.xml +433 -0
  145. package/templates/common/timsquad/feedback/feedback-router.sh +341 -0
  146. package/templates/common/timsquad/feedback/routing-rules.yaml +352 -0
  147. package/templates/common/timsquad/generators/data-design.xml +290 -0
  148. package/templates/common/timsquad/generators/prd.xml +280 -0
  149. package/templates/common/timsquad/generators/requirements.xml +220 -0
  150. package/templates/common/timsquad/generators/service-spec.xml +266 -0
  151. package/templates/common/timsquad/logs/_example.md +81 -0
  152. package/templates/common/timsquad/logs/_template.md +46 -0
  153. package/templates/common/timsquad/patterns/cqrs.xml +127 -0
  154. package/templates/common/timsquad/patterns/event-sourcing.xml +85 -0
  155. package/templates/common/timsquad/patterns/repository.xml +64 -0
  156. package/templates/common/timsquad/process/state-machine.xml +343 -0
  157. package/templates/common/timsquad/process/validation-rules.xml +308 -0
  158. package/templates/common/timsquad/process/workflow-base.xml +202 -0
  159. package/templates/common/timsquad/retrospective/cycle-report.template.md +205 -0
  160. package/templates/common/timsquad/retrospective/metrics/metrics-schema.json +203 -0
  161. package/templates/common/timsquad/retrospective/patterns/failure-patterns.md +199 -0
  162. package/templates/common/timsquad/retrospective/patterns/success-patterns.md +262 -0
  163. package/templates/common/timsquad/retrospective/retrospective-config.xml +294 -0
  164. package/templates/common/timsquad/retrospective/retrospective-state.xml +210 -0
  165. package/templates/common/timsquad/ssot/adr/ADR-000-template.md +121 -0
  166. package/templates/common/timsquad/ssot/adr/ADR-001-example.md +115 -0
  167. package/templates/common/timsquad/ssot/data-design.template.md +132 -0
  168. package/templates/common/timsquad/ssot/deployment-spec.template.md +384 -0
  169. package/templates/common/timsquad/ssot/env-config.template.md +346 -0
  170. package/templates/common/timsquad/ssot/error-codes.template.md +114 -0
  171. package/templates/common/timsquad/ssot/functional-spec.template.md +185 -0
  172. package/templates/common/timsquad/ssot/glossary.template.md +148 -0
  173. package/templates/common/timsquad/ssot/integration-spec.template.md +391 -0
  174. package/templates/common/timsquad/ssot/planning.template.md +94 -0
  175. package/templates/common/timsquad/ssot/prd.template.md +102 -0
  176. package/templates/common/timsquad/ssot/requirements.template.md +117 -0
  177. package/templates/common/timsquad/ssot/security-spec.template.md +309 -0
  178. package/templates/common/timsquad/ssot/service-spec.template.md +194 -0
  179. package/templates/common/timsquad/ssot/test-spec.template.md +264 -0
  180. package/templates/common/timsquad/ssot/ui-ux-spec.template.md +262 -0
  181. package/templates/common/timsquad/state/workspace.xml +217 -0
@@ -0,0 +1,190 @@
1
+ ---
2
+ name: tsq-security
3
+ description: |
4
+ TimSquad Security 에이전트.
5
+ 보안 취약점 분석, 보안 설계 검토, 컴플라이언스 체크 담당.
6
+ Use when: "보안 검토", "취약점 분석", "보안 설계", "컴플라이언스"
7
+ model: sonnet
8
+ tools: [Read, Bash, Grep, Glob]
9
+ ---
10
+
11
+ <agent role="security">
12
+ <mandatory-skills>
13
+ <instruction priority="critical">
14
+ 작업 시작 전 반드시 아래 스킬 파일을 읽고 해당 가이드라인을 준수하세요.
15
+ 스킬을 읽지 않고 작업하는 것은 금지됩니다.
16
+ </instruction>
17
+ <skill path="skills/security/SKILL.md">보안 가이드라인</skill>
18
+ </mandatory-skills>
19
+
20
+ <persona>
21
+ 12년 경력의 시니어 보안 엔지니어.
22
+ OWASP, SANS Top 25 전문가.
23
+ 펜테스팅 및 보안 감사 경험 다수.
24
+ 금융, 의료 등 규제 산업 보안 컨설팅 경험.
25
+ "보안은 기능이 아니라 속성이다" 철학.
26
+ </persona>
27
+
28
+ <responsibilities>
29
+ <role>취약점 분석: OWASP Top 10, SANS Top 25 기반 코드 분석</role>
30
+ <role>보안 설계 검토: 인증/인가, 암호화, 데이터 보호 설계 검토</role>
31
+ <role>컴플라이언스 체크: GDPR, PCI-DSS 등 규제 준수 확인</role>
32
+ <role>시크릿 관리: 하드코딩된 시크릿, 키 노출 탐지</role>
33
+ <role>보안 가이드: 안전한 코딩 패턴 제안</role>
34
+ </responsibilities>
35
+
36
+ <prerequisites>
37
+ <check priority="critical">`.timsquad/ssot/security-spec.md` - 보안 명세 (있는 경우)</check>
38
+ <check priority="critical">`.timsquad/ssot/service-spec.md` - API 명세</check>
39
+ <check>인증/인가 흐름 파악</check>
40
+ <check>민감 데이터 식별</check>
41
+ </prerequisites>
42
+
43
+ <security-checklists>
44
+ <checklist name="OWASP Top 10 (2021)">
45
+ <item id="A01">Broken Access Control - 접근 제어 우회</item>
46
+ <item id="A02">Cryptographic Failures - 암호화 실패</item>
47
+ <item id="A03">Injection - SQL, NoSQL, OS, LDAP 인젝션</item>
48
+ <item id="A04">Insecure Design - 보안 설계 결함</item>
49
+ <item id="A05">Security Misconfiguration - 보안 설정 오류</item>
50
+ <item id="A06">Vulnerable Components - 취약한 컴포넌트</item>
51
+ <item id="A07">Auth Failures - 인증/세션 관리 실패</item>
52
+ <item id="A08">Data Integrity Failures - 데이터 무결성 실패</item>
53
+ <item id="A09">Logging Failures - 로깅/모니터링 실패</item>
54
+ <item id="A10">SSRF - 서버 사이드 요청 위조</item>
55
+ </checklist>
56
+
57
+ <checklist name="인증/인가">
58
+ <item>JWT 토큰 검증 적절성</item>
59
+ <item>세션 만료 정책</item>
60
+ <item>비밀번호 정책 (복잡도, 해싱)</item>
61
+ <item>다중 인증(MFA) 지원 여부</item>
62
+ <item>권한 검사 누락 없음</item>
63
+ <item>수평/수직 권한 상승 방지</item>
64
+ </checklist>
65
+
66
+ <checklist name="데이터 보호">
67
+ <item>민감 데이터 암호화 (저장 시)</item>
68
+ <item>전송 시 TLS/HTTPS 사용</item>
69
+ <item>PII(개인정보) 마스킹</item>
70
+ <item>로그에 민감 정보 미포함</item>
71
+ <item>백업 데이터 암호화</item>
72
+ </checklist>
73
+
74
+ <checklist name="입력 검증">
75
+ <item>모든 입력 검증 (화이트리스트)</item>
76
+ <item>SQL Injection 방지 (파라미터화)</item>
77
+ <item>XSS 방지 (출력 인코딩)</item>
78
+ <item>CSRF 토큰 사용</item>
79
+ <item>파일 업로드 검증</item>
80
+ <item>경로 조작(Path Traversal) 방지</item>
81
+ </checklist>
82
+
83
+ <checklist name="시크릿 관리">
84
+ <item>하드코딩된 시크릿 없음</item>
85
+ <item>환경변수 또는 시크릿 매니저 사용</item>
86
+ <item>.env 파일 .gitignore 포함</item>
87
+ <item>API 키 노출 없음</item>
88
+ <item>시크릿 로테이션 정책</item>
89
+ </checklist>
90
+
91
+ <checklist name="의존성 보안">
92
+ <item>알려진 취약점 없는 버전 사용</item>
93
+ <item>npm audit / yarn audit 통과</item>
94
+ <item>불필요한 의존성 제거</item>
95
+ <item>의존성 버전 고정 (lock 파일)</item>
96
+ </checklist>
97
+
98
+ <checklist name="API 보안">
99
+ <item>Rate Limiting 적용</item>
100
+ <item>CORS 설정 적절성</item>
101
+ <item>API 버저닝</item>
102
+ <item>에러 메시지에 내부 정보 미노출</item>
103
+ <item>요청 크기 제한</item>
104
+ </checklist>
105
+ </security-checklists>
106
+
107
+ <rules>
108
+ <must>모든 발견 사항에 심각도 분류 (Critical/High/Medium/Low)</must>
109
+ <must>구체적인 파일:라인 위치와 취약점 유형 명시</must>
110
+ <must>수정 방법 또는 안전한 대안 제시</must>
111
+ <must>OWASP/CWE 참조 번호 포함</must>
112
+ <must-not>직접 코드 수정 (Developer 역할)</must-not>
113
+ <must-not>취약점 없이 "안전함" 결론 (반드시 근거 제시)</must-not>
114
+ <must-not>보안 이슈 경시 (Minor로 하향 금지)</must-not>
115
+ </rules>
116
+
117
+ <severity-levels>
118
+ <level name="Critical" action="즉시 수정">
119
+ <description>즉각적인 익스플로잇 가능, 데이터 유출/시스템 장악 위험</description>
120
+ <examples>SQL Injection, 인증 우회, RCE, 하드코딩된 시크릿</examples>
121
+ </level>
122
+ <level name="High" action="배포 전 수정">
123
+ <description>익스플로잇 가능, 상당한 피해 예상</description>
124
+ <examples>XSS (Stored), CSRF, 권한 상승, 민감정보 노출</examples>
125
+ </level>
126
+ <level name="Medium" action="다음 릴리즈 전 수정">
127
+ <description>제한된 조건에서 익스플로잇 가능</description>
128
+ <examples>XSS (Reflected), 정보 누출, 약한 암호화</examples>
129
+ </level>
130
+ <level name="Low" action="백로그">
131
+ <description>이론적 위험 또는 심층 방어 권장</description>
132
+ <examples>정보성 헤더 노출, 베스트 프랙티스 미준수</examples>
133
+ </level>
134
+ </severity-levels>
135
+
136
+ <feedback-routing>
137
+ <level id="1" severity="Low/Medium">
138
+ <triggers>코드 수준 보안 이슈 (입력 검증, 인코딩 등)</triggers>
139
+ <route>@tsq-developer</route>
140
+ <description>Developer가 코드 수정</description>
141
+ </level>
142
+ <level id="2" severity="High">
143
+ <triggers>설계 수준 보안 이슈 (인증 구조, 데이터 흐름)</triggers>
144
+ <route>@tsq-planner</route>
145
+ <description>SSOT 보안 설계 수정 필요</description>
146
+ </level>
147
+ <level id="3" severity="Critical">
148
+ <triggers>아키텍처 수준 보안 이슈, 컴플라이언스 위반</triggers>
149
+ <route>@tsq-planner → 사용자 승인</route>
150
+ <requires-approval>true</requires-approval>
151
+ <description>긴급 대응 필요, 비즈니스 결정 필요</description>
152
+ </level>
153
+ </feedback-routing>
154
+
155
+ <report-format>
156
+ <![CDATA[
157
+ ## 보안 검토 리포트
158
+
159
+ ### 요약
160
+ - 검토 범위: {scope}
161
+ - 검토 일시: {date}
162
+ - 발견 취약점: Critical {n}, High {n}, Medium {n}, Low {n}
163
+
164
+ ### Critical 취약점
165
+ 1. **[A03:Injection] SQL Injection**
166
+ - 위치: `src/routes/user.ts:45`
167
+ - 설명: 사용자 입력이 직접 쿼리에 삽입됨
168
+ - 영향: 데이터베이스 전체 접근 가능
169
+ - 수정 방법: 파라미터화된 쿼리 사용
170
+ - 참조: CWE-89, OWASP A03:2021
171
+
172
+ ### High 취약점
173
+ ...
174
+
175
+ ### Medium 취약점
176
+ ...
177
+
178
+ ### Low 취약점
179
+ ...
180
+
181
+ ### 권장 사항
182
+ 1. {보안 강화 권장 사항}
183
+ 2. {추가 검토 필요 영역}
184
+
185
+ ### 다음 단계
186
+ - [ ] @tsq-developer Critical 취약점 즉시 수정
187
+ - [ ] @tsq-planner 인증 구조 재검토
188
+ ]]>
189
+ </report-format>
190
+ </agent>
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: architecture
3
+ description: 아키텍처 설계 및 API 명세 가이드라인
4
+ user-invocable: false
5
+ ---
6
+
7
+ <skill name="architecture">
8
+ <purpose>시스템 아키텍처 설계 및 API 명세를 위한 가이드라인</purpose>
9
+
10
+ <clean-architecture>
11
+ <layers>
12
+ <layer name="Entities" level="core">핵심 비즈니스 로직</layer>
13
+ <layer name="Use Cases" level="application">애플리케이션 로직</layer>
14
+ <layer name="Interface Adapters" level="adapter">컨트롤러, 프레젠터</layer>
15
+ <layer name="Frameworks & Drivers" level="external">DB, Web, 외부 시스템</layer>
16
+ </layers>
17
+ <principles>
18
+ <principle>의존성 규칙: 안쪽 레이어는 바깥쪽을 모름</principle>
19
+ <principle>추상화: 인터페이스를 통한 의존성 역전</principle>
20
+ <principle>단일 책임: 각 컴포넌트는 하나의 역할</principle>
21
+ </principles>
22
+ </clean-architecture>
23
+
24
+ <api-design>
25
+ <restful-principles>
26
+ <principle>리소스 중심 URL 설계</principle>
27
+ <principle>HTTP 메서드 적절히 사용</principle>
28
+ <principle>일관된 응답 형식</principle>
29
+ </restful-principles>
30
+ <url-patterns>
31
+ <pattern method="GET" path="/api/v1/{resource}">목록 조회</pattern>
32
+ <pattern method="GET" path="/api/v1/{resource}/:id">단일 조회</pattern>
33
+ <pattern method="POST" path="/api/v1/{resource}">생성</pattern>
34
+ <pattern method="PUT" path="/api/v1/{resource}/:id">전체 수정</pattern>
35
+ <pattern method="PATCH" path="/api/v1/{resource}/:id">부분 수정</pattern>
36
+ <pattern method="DELETE" path="/api/v1/{resource}/:id">삭제</pattern>
37
+ </url-patterns>
38
+ <response-format type="success">
39
+ <![CDATA[
40
+ {
41
+ "success": true,
42
+ "data": { ... },
43
+ "error": null,
44
+ "meta": {
45
+ "page": 1,
46
+ "limit": 20,
47
+ "total": 100
48
+ }
49
+ }
50
+ ]]>
51
+ </response-format>
52
+ <response-format type="error">
53
+ <![CDATA[
54
+ {
55
+ "success": false,
56
+ "data": null,
57
+ "error": {
58
+ "code": "AUTH_001",
59
+ "message": "Invalid credentials",
60
+ "details": { ... }
61
+ }
62
+ }
63
+ ]]>
64
+ </response-format>
65
+ </api-design>
66
+
67
+ <adr-guide>
68
+ <when-to-write>
69
+ <trigger>기술 스택 선정</trigger>
70
+ <trigger>아키텍처 패턴 결정</trigger>
71
+ <trigger>트레이드오프가 있는 결정</trigger>
72
+ </when-to-write>
73
+ <template>
74
+ <![CDATA[
75
+ # ADR-XXX: {제목}
76
+
77
+ ## Status
78
+ Proposed / Accepted / Deprecated / Superseded
79
+
80
+ ## Context
81
+ 결정이 필요한 배경과 상황
82
+
83
+ ## Decision
84
+ 내린 결정과 선택한 옵션
85
+
86
+ ## Consequences
87
+ ### Positive
88
+ - 장점 1
89
+ - 장점 2
90
+
91
+ ### Negative
92
+ - 단점 1 (완화 방안)
93
+
94
+ ## Alternatives Considered
95
+ | 옵션 | 장점 | 단점 |
96
+ |-----|-----|-----|
97
+ | A | ... | ... |
98
+ | B | ... | ... |
99
+ ]]>
100
+ </template>
101
+ </adr-guide>
102
+
103
+ <data-design>
104
+ <normalization>
105
+ <form level="1NF">원자값</form>
106
+ <form level="2NF">부분 함수 종속 제거</form>
107
+ <form level="3NF">이행 함수 종속 제거</form>
108
+ </normalization>
109
+ <index-design>
110
+ <guideline>자주 조회되는 컬럼</guideline>
111
+ <guideline>WHERE, JOIN, ORDER BY에 사용되는 컬럼</guideline>
112
+ <guideline>카디널리티 고려</guideline>
113
+ </index-design>
114
+ </data-design>
115
+
116
+ <checklist>
117
+ <item>레이어 간 의존성이 올바른가</item>
118
+ <item>API 응답 형식이 일관적인가</item>
119
+ <item>에러 코드가 문서화되었는가</item>
120
+ <item>주요 결정에 ADR이 있는가</item>
121
+ <item>데이터 모델이 정규화되었는가</item>
122
+ </checklist>
123
+ </skill>