muno-claude-plugin 1.11.0 → 1.12.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.
package/README.md
CHANGED
|
@@ -184,21 +184,24 @@ Task Level (단위 테스트)
|
|
|
184
184
|
**호출 조건:** "Epic 생성해줘", "Story 만들어줘", "백로그 작성" 등의 요청 시 자동 호출
|
|
185
185
|
|
|
186
186
|
**입력:** PRD 문서
|
|
187
|
-
**출력:** `
|
|
187
|
+
**출력:** `documents/issues/{feature}/` 디렉토리
|
|
188
188
|
|
|
189
189
|
**사용 예시:**
|
|
190
190
|
```
|
|
191
|
-
@documents/
|
|
191
|
+
@documents/request/cart-prd.md 를 기반으로 Epic과 Story를 생성해주세요.
|
|
192
192
|
```
|
|
193
193
|
|
|
194
194
|
**생성 구조:**
|
|
195
195
|
```
|
|
196
|
-
|
|
197
|
-
├──
|
|
198
|
-
├──
|
|
199
|
-
├── STORY-001-add-item.md
|
|
200
|
-
├── STORY-002-remove-item.md
|
|
201
|
-
└── ...
|
|
196
|
+
documents/issues/cart/
|
|
197
|
+
├── README.md # Epic 개요 (Epic이 있는 경우)
|
|
198
|
+
├── stories/
|
|
199
|
+
│ ├── STORY-001-add-item.md # User Story (AC 포함)
|
|
200
|
+
│ ├── STORY-002-remove-item.md
|
|
201
|
+
│ └── ...
|
|
202
|
+
└── tasks/ # task-generator가 생성
|
|
203
|
+
└── STORY-{id}/
|
|
204
|
+
└── TASK-{seq}.md
|
|
202
205
|
```
|
|
203
206
|
|
|
204
207
|
**User Story 포함 내용:**
|
|
@@ -267,21 +270,20 @@ backlogs/cart-feature/
|
|
|
267
270
|
**호출 조건:** "태스크 생성해줘", "구현 작업 분해", "Task 만들어줘" 등의 요청 시 자동 호출
|
|
268
271
|
|
|
269
272
|
**입력:** Story + LLD
|
|
270
|
-
**출력:**
|
|
273
|
+
**출력:** `documents/issues/{feature}/tasks/STORY-{id}/` 디렉토리
|
|
271
274
|
|
|
272
275
|
**사용 예시:**
|
|
273
276
|
```
|
|
274
|
-
@
|
|
275
|
-
@documents/
|
|
277
|
+
@documents/issues/cart/stories/STORY-001-add-item.md
|
|
278
|
+
@documents/system-design/features/cart/lld.md
|
|
276
279
|
|
|
277
280
|
구현 태스크를 생성해주세요.
|
|
278
281
|
```
|
|
279
282
|
|
|
280
283
|
**생성 구조:**
|
|
281
284
|
```
|
|
282
|
-
|
|
283
|
-
├──
|
|
284
|
-
├── TASK-001-entity.md # 엔티티 구현
|
|
285
|
+
documents/issues/cart/tasks/STORY-001/
|
|
286
|
+
├── TASK-001-entity.md
|
|
285
287
|
├── TASK-002-repository.md
|
|
286
288
|
├── TASK-003-service.md
|
|
287
289
|
├── TASK-004-controller.md
|
|
@@ -889,16 +891,31 @@ Task의 완료 조건(DoD)을 테스트로 변환합니다.
|
|
|
889
891
|
상태 자동 업데이트
|
|
890
892
|
```
|
|
891
893
|
|
|
892
|
-
### 문서 저장 위치
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
894
|
+
### 문서 저장 위치 (Feature 기반 구조)
|
|
895
|
+
|
|
896
|
+
```
|
|
897
|
+
documents/
|
|
898
|
+
├── request/
|
|
899
|
+
│ └── <feature>-prd.md # PRD
|
|
900
|
+
├── issues/
|
|
901
|
+
│ ├── <feature>/ # Feature별 그룹화
|
|
902
|
+
│ │ ├── README.md # Epic 개요 (선택)
|
|
903
|
+
│ │ ├── stories/
|
|
904
|
+
│ │ │ └── STORY-<id>-<name>.md # Story
|
|
905
|
+
│ │ └── tasks/
|
|
906
|
+
│ │ └── STORY-<id>/ # Story별 Task 그룹화
|
|
907
|
+
│ │ └── TASK-<id>.md # Task
|
|
908
|
+
│ └── standalone/ # Epic/Feature 없는 독립 작업
|
|
909
|
+
│ ├── stories/
|
|
910
|
+
│ └── tasks/
|
|
911
|
+
├── system-design/
|
|
912
|
+
│ └── features/<feature>/
|
|
913
|
+
│ ├── hld.md # HLD
|
|
914
|
+
│ └── lld.md # LLD
|
|
915
|
+
└── test/
|
|
916
|
+
├── acceptance/AT-<id>.md # Acceptance Test
|
|
917
|
+
└── unit/UT-<id>.md # Unit Test
|
|
918
|
+
```
|
|
902
919
|
|
|
903
920
|
---
|
|
904
921
|
|
|
@@ -915,29 +932,30 @@ Task의 완료 조건(DoD)을 테스트로 변환합니다.
|
|
|
915
932
|
- 세션 관리
|
|
916
933
|
|
|
917
934
|
# 2. Epic/Story 생성 (epic-story-generator 스킬이 자동 호출됨)
|
|
918
|
-
@documents/
|
|
935
|
+
@documents/request/auth-prd.md 기반으로 Epic과 Story를 생성해주세요.
|
|
919
936
|
|
|
920
937
|
# 3. TC 생성 (tc-generator 스킬이 자동 호출됨)
|
|
921
938
|
# → 이후 tc-reviewer, acceptance-test-generator 서브에이전트가 자동 실행됨
|
|
922
|
-
@
|
|
939
|
+
@documents/issues/auth/stories/STORY-001-email-login.md 에 대한 테스트 케이스를 작성해주세요.
|
|
923
940
|
|
|
924
941
|
# 4. HLD 생성 (hld-generator 스킬이 자동 호출됨)
|
|
925
|
-
@
|
|
942
|
+
@documents/issues/auth/stories/STORY-001-email-login.md 의 HLD를 작성해주세요.
|
|
926
943
|
|
|
927
944
|
# 5. LLD 생성 (lld-generator 스킬이 자동 호출됨)
|
|
928
|
-
@
|
|
929
|
-
@documents/
|
|
945
|
+
@documents/issues/auth/stories/STORY-001-email-login.md
|
|
946
|
+
@documents/system-design/features/auth/hld.md
|
|
930
947
|
위 문서를 기반으로 LLD를 작성해주세요.
|
|
931
948
|
|
|
932
949
|
# 6. Task 생성 (task-generator 스킬이 자동 호출됨)
|
|
933
950
|
# → 이후 unit-test-generator 서브에이전트가 자동으로 테스트 먼저 생성
|
|
934
|
-
@
|
|
935
|
-
@documents/
|
|
951
|
+
@documents/issues/auth/stories/STORY-001-email-login.md
|
|
952
|
+
@documents/system-design/features/auth/lld.md
|
|
936
953
|
구현 태스크를 생성해주세요.
|
|
937
954
|
|
|
938
955
|
# 7. 구현 시작 (Developer 페르소나 활성화 - Command 사용)
|
|
939
956
|
/dev
|
|
940
|
-
TASK-001 구현을 시작하겠습니다.
|
|
957
|
+
@documents/issues/auth/tasks/STORY-001/TASK-001-entity.md 구현을 시작하겠습니다.
|
|
958
|
+
테스트가 통과하도록 구현해주세요.
|
|
941
959
|
```
|
|
942
960
|
|
|
943
961
|
### Example 2: 버그 수정 (간단한 워크플로우)
|
package/bin/cli.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "muno-claude-plugin",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "Unleash Claude Code's full power - Complete development workflow with expert personas, TDD-based agents, and automated documentation",
|
|
5
5
|
"main": "bin/cli.js",
|
|
6
6
|
"bin": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"license": "MIT",
|
|
28
28
|
"repository": {
|
|
29
29
|
"type": "git",
|
|
30
|
-
"url": "git+https://github.com/
|
|
30
|
+
"url": "git+https://github.com/musinsa/muno-claude-plugin.git"
|
|
31
31
|
},
|
|
32
32
|
"engines": {
|
|
33
33
|
"node": ">=18.0.0"
|
|
@@ -58,7 +58,7 @@ color: cyan
|
|
|
58
58
|
## PRD 작성 기준
|
|
59
59
|
|
|
60
60
|
```
|
|
61
|
-
|
|
61
|
+
┌───그럼 ──────────────────────────────────────────────────────────────┐
|
|
62
62
|
│ PRD는 "새로운 요구사항"에 작성 │
|
|
63
63
|
├─────────────────────────────────────────────────────────────────┤
|
|
64
64
|
│ │
|
|
@@ -275,70 +275,82 @@ Story 분해안을 검토해주세요.
|
|
|
275
275
|
|
|
276
276
|
## Step 4: 저장
|
|
277
277
|
|
|
278
|
-
### 출력 구조
|
|
278
|
+
### 출력 구조 (Feature 기반 그룹화)
|
|
279
279
|
|
|
280
280
|
```
|
|
281
|
-
documents/
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
281
|
+
documents/issues/
|
|
282
|
+
├── {feature}/ # Feature/Epic 이름 (예: auth, cart)
|
|
283
|
+
│ ├── README.md # Epic 개요 (Epic이 있는 경우)
|
|
284
|
+
│ ├── stories/
|
|
285
|
+
│ │ ├── STORY-{id}-{name}.md # Story 개별 문서
|
|
286
|
+
│ │ └── ...
|
|
287
|
+
│ └── tasks/
|
|
288
|
+
│ ├── STORY-{id}/ # Story별 Task 그룹화
|
|
289
|
+
│ │ ├── TASK-{id}.md
|
|
290
|
+
│ │ └── ...
|
|
291
|
+
│ └── ...
|
|
292
|
+
└── standalone/ # Epic/Feature 없는 독립 작업
|
|
285
293
|
├── stories/
|
|
286
|
-
│ └── STORY-xxx.md # Story 개별 문서
|
|
287
294
|
└── tasks/
|
|
288
|
-
└── TASK-xxx.md # Task 개별 문서 (task-generator)
|
|
289
295
|
```
|
|
290
296
|
|
|
291
297
|
**파일명 규칙**:
|
|
292
|
-
-
|
|
293
|
-
-
|
|
294
|
-
-
|
|
298
|
+
- Feature 폴더: `{feature-name}` (예: `auth`, `cart`, `payment`)
|
|
299
|
+
- Epic: `{feature}/README.md` (Epic 개요 포함)
|
|
300
|
+
- Story: `{feature}/stories/STORY-{id}-{name}.md`
|
|
301
|
+
- Task: `{feature}/tasks/STORY-{id}/TASK-{id}.md` (task-generator가 생성)
|
|
295
302
|
|
|
296
|
-
|
|
297
|
-
- Epic
|
|
298
|
-
-
|
|
299
|
-
-
|
|
303
|
+
**유연한 워크플로우 지원**:
|
|
304
|
+
- Epic 있음: `{feature}/README.md` + `stories/`
|
|
305
|
+
- Epic 없음: `{feature}/stories/` (README.md 없이)
|
|
306
|
+
- Story 없음: `standalone/tasks/` (독립 Task)
|
|
300
307
|
|
|
301
|
-
###
|
|
308
|
+
### README.md 구조 (Epic 개요)
|
|
309
|
+
|
|
310
|
+
Epic이 있는 경우 `{feature}/README.md`에 작성:
|
|
302
311
|
|
|
303
312
|
```markdown
|
|
304
|
-
# [기능명]
|
|
313
|
+
# Epic: [기능명]
|
|
305
314
|
|
|
306
315
|
## 개요
|
|
307
|
-
- **PRD**:
|
|
308
|
-
- **총
|
|
309
|
-
- **총 Story**: M개
|
|
316
|
+
- **PRD**: documents/request/{기능명}-prd.md
|
|
317
|
+
- **총 Story**: N개
|
|
310
318
|
- **예상 기간**: X 스프린트
|
|
311
319
|
|
|
312
|
-
##
|
|
320
|
+
## 비즈니스 목표
|
|
321
|
+
[Epic의 비즈니스 가치]
|
|
322
|
+
|
|
323
|
+
## Story 목록
|
|
313
324
|
|
|
314
|
-
|
|
|
315
|
-
|
|
316
|
-
|
|
|
317
|
-
|
|
|
325
|
+
| Story ID | 제목 | 크기 | 상태 |
|
|
326
|
+
|---------|------|------|------|
|
|
327
|
+
| STORY-001 | ... | S | Not Started |
|
|
328
|
+
| STORY-002 | ... | M | Not Started |
|
|
318
329
|
|
|
319
|
-
## 우선순위
|
|
330
|
+
## 우선순위
|
|
320
331
|
|
|
321
332
|
| 우선순위 | Story |
|
|
322
333
|
|----------|-------|
|
|
323
|
-
| Must Have | STORY-001, STORY-002
|
|
324
|
-
| Should Have | STORY-005
|
|
325
|
-
| Could Have | STORY-008
|
|
334
|
+
| Must Have | STORY-001, STORY-002 |
|
|
335
|
+
| Should Have | STORY-005 |
|
|
336
|
+
| Could Have | STORY-008 |
|
|
326
337
|
|
|
327
|
-
## 의존성
|
|
338
|
+
## 의존성
|
|
328
339
|
|
|
329
|
-
[mermaid 다이어그램]
|
|
340
|
+
[mermaid 다이어그램 - 필요시]
|
|
330
341
|
|
|
331
342
|
## 스프린트 배분 제안
|
|
332
343
|
|
|
333
344
|
### Sprint 1
|
|
334
|
-
- STORY-001: [제목]
|
|
335
|
-
- STORY-002: [제목]
|
|
336
|
-
Total: X SP
|
|
345
|
+
- STORY-001: [제목] (3 SP)
|
|
346
|
+
- STORY-002: [제목] (5 SP)
|
|
337
347
|
|
|
338
348
|
### Sprint 2
|
|
339
349
|
...
|
|
340
350
|
```
|
|
341
351
|
|
|
352
|
+
**Epic 없는 경우**: README.md 생략하고 `stories/` 바로 생성
|
|
353
|
+
|
|
342
354
|
---
|
|
343
355
|
|
|
344
356
|
## Epic/Story 작성 완료 후 필수 작업
|
|
@@ -354,7 +366,7 @@ Task 도구를 사용하여 다음과 같이 호출합니다:
|
|
|
354
366
|
```
|
|
355
367
|
Task 도구 호출:
|
|
356
368
|
- subagent_type: epic-story-reviewer
|
|
357
|
-
- prompt: "다음
|
|
369
|
+
- prompt: "다음 Feature 폴더의 Epic/Story 문서를 검토해주세요: documents/issues/{feature}/"
|
|
358
370
|
```
|
|
359
371
|
|
|
360
372
|
**다음 단계 조건**:
|
|
@@ -388,30 +388,64 @@ Task 분해안을 검토해주세요.
|
|
|
388
388
|
|
|
389
389
|
### Task 필수 섹션 (7개)
|
|
390
390
|
|
|
391
|
-
각 Task는 **7개 핵심 섹션**을 반드시 포함합니다:
|
|
391
|
+
각 Task는 **Frontmatter + 7개 핵심 섹션**을 반드시 포함합니다:
|
|
392
392
|
|
|
393
393
|
```markdown
|
|
394
|
-
|
|
394
|
+
---
|
|
395
|
+
id: TASK-{seq}
|
|
396
|
+
title: [Task 이름]
|
|
397
|
+
story_id: STORY-{id}
|
|
398
|
+
feature: {feature-name}
|
|
399
|
+
status: todo
|
|
400
|
+
related_docs:
|
|
401
|
+
prd: documents/request/{feature}-prd.md
|
|
402
|
+
epic: documents/issues/{feature}/README.md # Epic이 있는 경우
|
|
403
|
+
story: documents/issues/{feature}/stories/STORY-{id}-{name}.md
|
|
404
|
+
hld: documents/system-design/features/{feature}/hld.md # 있는 경우
|
|
405
|
+
lld: documents/system-design/features/{feature}/lld.md # 있는 경우
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
# TASK-{seq}: [Task 이름]
|
|
409
|
+
|
|
410
|
+
## 🔗 참고 자료 (코딩 전 필독)
|
|
411
|
+
|
|
412
|
+
**이 Task를 구현하기 전에 다음 문서들을 반드시 읽어주세요:**
|
|
413
|
+
|
|
414
|
+
### 필수 문서
|
|
415
|
+
- **Story**: @documents/issues/{feature}/stories/STORY-{id}-{name}.md
|
|
416
|
+
- 이 Task가 충족해야 할 Acceptance Criteria
|
|
417
|
+
- 사용자 관점의 기대 동작
|
|
418
|
+
|
|
419
|
+
### 설계 문서 (있는 경우)
|
|
420
|
+
- **LLD**: @documents/system-design/features/{feature}/lld.md
|
|
421
|
+
- API 명세, 데이터 모델, 시퀀스 다이어그램
|
|
422
|
+
- **HLD**: @documents/system-design/features/{feature}/hld.md
|
|
423
|
+
- 전체 아키텍처, 컴포넌트 구조
|
|
424
|
+
|
|
425
|
+
### 비즈니스 맥락 (있는 경우)
|
|
426
|
+
- **PRD**: @documents/request/{feature}-prd.md
|
|
427
|
+
- 비즈니스 요구사항, 문제 정의
|
|
428
|
+
- **Epic**: @documents/issues/{feature}/README.md
|
|
429
|
+
- Epic 전체 목표
|
|
430
|
+
|
|
431
|
+
---
|
|
395
432
|
|
|
396
433
|
## 1. Context (맥락)
|
|
397
434
|
왜 이 Task가 필요한가, User Story와의 연결
|
|
398
435
|
|
|
399
|
-
## 2.
|
|
400
|
-
코딩 에이전트가 참고해야 할 문서들과 핵심 내용 발췌
|
|
401
|
-
|
|
402
|
-
## 3. Scope (범위)
|
|
436
|
+
## 2. Scope (범위)
|
|
403
437
|
생성할 파일, 선행 Task, 예상 소요
|
|
404
438
|
|
|
405
|
-
##
|
|
439
|
+
## 3. Reference Code (참조 코드)
|
|
406
440
|
기존 코드베이스에서 따라야 할 패턴
|
|
407
441
|
|
|
408
|
-
##
|
|
442
|
+
## 4. Implementation Spec (구현 명세)
|
|
409
443
|
조건, 요구사항, 의사 코드 (구현 코드 X)
|
|
410
444
|
|
|
411
|
-
##
|
|
445
|
+
## 5. Acceptance Criteria (완료 조건)
|
|
412
446
|
체크리스트 형태의 명확한 완료 기준
|
|
413
447
|
|
|
414
|
-
##
|
|
448
|
+
## 6. Test Scenarios (테스트 시나리오)
|
|
415
449
|
구체적인 테스트 케이스와 값
|
|
416
450
|
```
|
|
417
451
|
|
|
@@ -445,68 +479,12 @@ Task 분해안을 검토해주세요.
|
|
|
445
479
|
- **후행**: TASK-XXX (이 Task가 완료되어야 시작 가능)
|
|
446
480
|
```
|
|
447
481
|
|
|
448
|
-
|
|
482
|
+
**참고**: "🔗 참고 자료" 섹션은 이미 템플릿 상단에 추가되었으므로 별도 가이드 불필요
|
|
449
483
|
|
|
450
|
-
|
|
484
|
+
### 2. Scope (범위)
|
|
451
485
|
|
|
452
486
|
```markdown
|
|
453
|
-
## 2.
|
|
454
|
-
|
|
455
|
-
### 2.1 User Story (Required)
|
|
456
|
-
|
|
457
|
-
**파일**: `backlogs/feature-name/STORY-XXX.md`
|
|
458
|
-
|
|
459
|
-
**Acceptance Criteria 발췌**:
|
|
460
|
-
```gherkin
|
|
461
|
-
Scenario: [정상 케이스]
|
|
462
|
-
Given [전제 조건]
|
|
463
|
-
When [사용자 행동]
|
|
464
|
-
Then [기대 결과]
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
### 2.2 LLD (Required)
|
|
468
|
-
|
|
469
|
-
**파일**: `documents/lld/xxx-lld.md`
|
|
470
|
-
|
|
471
|
-
**ERD 발췌**:
|
|
472
|
-
```
|
|
473
|
-
[Table 정의 발췌]
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
**API Spec 발췌** (해당시):
|
|
477
|
-
```
|
|
478
|
-
POST /api/v1/xxx
|
|
479
|
-
Request: {...}
|
|
480
|
-
Response: {...}
|
|
481
|
-
```
|
|
482
|
-
|
|
483
|
-
**서비스 메서드 정의 발췌**:
|
|
484
|
-
```
|
|
485
|
-
createXxx(command: CreateXxxCommand): XxxDto
|
|
486
|
-
```
|
|
487
|
-
|
|
488
|
-
### 2.3 HLD (Optional)
|
|
489
|
-
|
|
490
|
-
**파일**: `documents/hld/xxx-hld.md`
|
|
491
|
-
|
|
492
|
-
**아키텍처 컨텍스트** (필요한 부분만):
|
|
493
|
-
```
|
|
494
|
-
[컴포넌트 관계, 데이터 흐름 등]
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
### 2.4 코드베이스 컨벤션
|
|
498
|
-
|
|
499
|
-
**참조 파일**: `CLAUDE.md`
|
|
500
|
-
|
|
501
|
-
**적용할 규칙**:
|
|
502
|
-
- [컨벤션 1]
|
|
503
|
-
- [컨벤션 2]
|
|
504
|
-
```
|
|
505
|
-
|
|
506
|
-
### 3. Scope (범위)
|
|
507
|
-
|
|
508
|
-
```markdown
|
|
509
|
-
## 3. Scope
|
|
487
|
+
## 2. Scope
|
|
510
488
|
|
|
511
489
|
| 항목 | 내용 |
|
|
512
490
|
|-----|------|
|
|
@@ -515,10 +493,10 @@ createXxx(command: CreateXxxCommand): XxxDto
|
|
|
515
493
|
| 예상 라인 | 약 150줄 |
|
|
516
494
|
```
|
|
517
495
|
|
|
518
|
-
###
|
|
496
|
+
### 3. Reference Code (참조 코드)
|
|
519
497
|
|
|
520
498
|
```markdown
|
|
521
|
-
##
|
|
499
|
+
## 3. Reference Code
|
|
522
500
|
|
|
523
501
|
**참조 파일**: `core/src/main/kotlin/com/example/domain/user/model/UserEntity.kt`
|
|
524
502
|
|
|
@@ -539,14 +517,14 @@ class UserEntity(
|
|
|
539
517
|
- [ ] @Column(name = "snake_case") 명시
|
|
540
518
|
```
|
|
541
519
|
|
|
542
|
-
###
|
|
520
|
+
### 4. Implementation Spec (구현 명세)
|
|
543
521
|
|
|
544
522
|
> **주의**: 구현 코드를 포함하지 않는다. 조건과 요구사항만 정의한다.
|
|
545
523
|
|
|
546
524
|
```markdown
|
|
547
|
-
##
|
|
525
|
+
## 4. Implementation Spec
|
|
548
526
|
|
|
549
|
-
###
|
|
527
|
+
### 4.1 데이터 정의
|
|
550
528
|
|
|
551
529
|
| 필드 | 타입 | 제약조건 | 설명 |
|
|
552
530
|
|------|------|----------|------|
|
|
@@ -556,7 +534,7 @@ class UserEntity(
|
|
|
556
534
|
| title | String | Not Null, Max 100 | 제목 |
|
|
557
535
|
| status | Enum | Not Null, Default ACTIVE | 상태 |
|
|
558
536
|
|
|
559
|
-
###
|
|
537
|
+
### 4.2 비즈니스 규칙
|
|
560
538
|
|
|
561
539
|
| ID | 규칙 | 설명 |
|
|
562
540
|
|----|------|------|
|
|
@@ -564,14 +542,14 @@ class UserEntity(
|
|
|
564
542
|
| BR-02 | 제목 검증 | title은 1-100자 |
|
|
565
543
|
| BR-03 | 외부 ID | UUIDv7로 자동 생성 |
|
|
566
544
|
|
|
567
|
-
###
|
|
545
|
+
### 4.3 메서드 시그니처 (Service의 경우)
|
|
568
546
|
|
|
569
547
|
| 메서드 | 입력 | 출력 | 설명 |
|
|
570
548
|
|--------|-----|------|------|
|
|
571
549
|
| create | CreateCommand | Dto | 생성 |
|
|
572
550
|
| getById | UUID, Long | Dto | 조회 (권한 검증) |
|
|
573
551
|
|
|
574
|
-
###
|
|
552
|
+
### 4.4 의사 코드 (복잡한 로직의 경우)
|
|
575
553
|
|
|
576
554
|
```
|
|
577
555
|
// updateTitle 로직
|
|
@@ -584,12 +562,12 @@ class UserEntity(
|
|
|
584
562
|
```
|
|
585
563
|
```
|
|
586
564
|
|
|
587
|
-
###
|
|
565
|
+
### 5. Acceptance Criteria (완료 조건)
|
|
588
566
|
|
|
589
567
|
**Story의 AC에서 이 Task가 충족해야 할 부분을 명시한다.**
|
|
590
568
|
|
|
591
569
|
```markdown
|
|
592
|
-
##
|
|
570
|
+
## 5. Acceptance Criteria
|
|
593
571
|
|
|
594
572
|
### Story AC 연결
|
|
595
573
|
- [ ] Story AC-1의 "[특정 부분]"을 이 Task에서 구현
|
|
@@ -605,14 +583,14 @@ class UserEntity(
|
|
|
605
583
|
- [ ] `./gradlew test` 기존 테스트 통과
|
|
606
584
|
```
|
|
607
585
|
|
|
608
|
-
###
|
|
586
|
+
### 6. Test Scenarios (테스트 시나리오)
|
|
609
587
|
|
|
610
588
|
> **주의**: 테스트 코드를 포함하지 않는다. 시나리오와 입출력 값만 정의한다.
|
|
611
589
|
|
|
612
590
|
```markdown
|
|
613
|
-
##
|
|
591
|
+
## 6. Test Scenarios
|
|
614
592
|
|
|
615
|
-
###
|
|
593
|
+
### 6.1 Happy Path
|
|
616
594
|
|
|
617
595
|
**Story AC 연결**: Story AC-1 "정상적으로 생성"
|
|
618
596
|
|
|
@@ -631,7 +609,7 @@ class UserEntity(
|
|
|
631
609
|
| status | ACTIVE |
|
|
632
610
|
| createdAt | 현재 시간 |
|
|
633
611
|
|
|
634
|
-
###
|
|
612
|
+
### 6.2 Edge Cases
|
|
635
613
|
|
|
636
614
|
**Story AC 연결**: Story AC-2 "유효성 검증"
|
|
637
615
|
|
|
@@ -641,14 +619,14 @@ class UserEntity(
|
|
|
641
619
|
| 100자 초과 | title = "가" × 101 | IllegalArgumentException |
|
|
642
620
|
| null userId | userId = null | NullPointerException (컴파일 타임) |
|
|
643
621
|
|
|
644
|
-
###
|
|
622
|
+
### 6.3 권한 검증 (해당시)
|
|
645
623
|
|
|
646
624
|
| 시나리오 | 조건 | 기대 결과 |
|
|
647
625
|
|---------|------|----------|
|
|
648
626
|
| 타인 접근 | chatRoom.userId ≠ requestUserId | AccessDeniedException |
|
|
649
627
|
| 본인 접근 | chatRoom.userId = requestUserId | 정상 처리 |
|
|
650
628
|
|
|
651
|
-
###
|
|
629
|
+
### 6.4 검증 쿼리 (DB 확인용)
|
|
652
630
|
|
|
653
631
|
- 생성 확인: `SELECT * FROM [table] WHERE external_id = ?`
|
|
654
632
|
- 인덱스 확인: `SHOW INDEX FROM [table]`
|
|
@@ -712,43 +690,46 @@ class UserEntity(
|
|
|
712
690
|
|
|
713
691
|
---
|
|
714
692
|
|
|
715
|
-
## 출력 구조
|
|
693
|
+
## 출력 구조 (Feature 기반 그룹화)
|
|
716
694
|
|
|
717
695
|
```
|
|
718
|
-
documents/
|
|
719
|
-
|
|
696
|
+
documents/issues/
|
|
697
|
+
├── {feature}/ # Feature 이름 (Story와 동일 폴더)
|
|
698
|
+
│ └── tasks/
|
|
699
|
+
│ └── STORY-{id}/ # Story별 Task 그룹화
|
|
700
|
+
│ ├── TASK-001-{name}.md
|
|
701
|
+
│ ├── TASK-002-{name}.md
|
|
702
|
+
│ └── ...
|
|
703
|
+
└── standalone/ # 독립 Task
|
|
720
704
|
└── tasks/
|
|
721
|
-
|
|
705
|
+
├── TASK-001-{name}.md
|
|
706
|
+
└── ...
|
|
722
707
|
```
|
|
723
708
|
|
|
724
709
|
**파일명 규칙**:
|
|
725
710
|
|
|
726
|
-
| Task 유형 | 파일명
|
|
727
|
-
|
|
728
|
-
| Story 기반 | `
|
|
729
|
-
|
|
|
730
|
-
| 독립 Task | `TASK-IND-{seq}-{name}.md` | `TASK-IND-01-fix-login-bug.md` |
|
|
711
|
+
| Task 유형 | 위치 | 파일명 | 예시 |
|
|
712
|
+
|----------|------|--------|------|
|
|
713
|
+
| Story 기반 | `{feature}/tasks/STORY-{id}/` | `TASK-{seq}-{name}.md` | `auth/tasks/STORY-001/TASK-001-entity.md` |
|
|
714
|
+
| 독립 Task | `standalone/tasks/` | `TASK-{id}-{name}.md` | `standalone/tasks/TASK-001-hotfix.md` |
|
|
731
715
|
|
|
732
|
-
**예시 (
|
|
716
|
+
**예시 (auth Feature)**:
|
|
733
717
|
```
|
|
734
|
-
documents/issues/
|
|
735
|
-
|
|
736
|
-
├──
|
|
737
|
-
├── TASK-
|
|
738
|
-
├── TASK-
|
|
739
|
-
└── TASK-
|
|
718
|
+
documents/issues/auth/
|
|
719
|
+
└── tasks/
|
|
720
|
+
├── STORY-001/ # Story-001의 Task들
|
|
721
|
+
│ ├── TASK-001-entity.md
|
|
722
|
+
│ ├── TASK-002-repository.md
|
|
723
|
+
│ └── TASK-003-service.md
|
|
724
|
+
└── STORY-002/ # Story-002의 Task들
|
|
725
|
+
├── TASK-001-controller.md
|
|
726
|
+
└── TASK-002-validator.md
|
|
740
727
|
```
|
|
741
728
|
|
|
742
|
-
**ID 규칙**:
|
|
743
|
-
- `S001` = Story-001 (Story 기반)
|
|
744
|
-
- `E001` = Epic-001 (Epic 기반)
|
|
745
|
-
- `IND` = Independent (독립 Task)
|
|
746
|
-
- `seq` = 01, 02, 03... (순번)
|
|
747
|
-
|
|
748
729
|
**특징**:
|
|
749
|
-
-
|
|
750
|
-
-
|
|
751
|
-
-
|
|
730
|
+
- Story별로 Task가 폴더로 그룹화되어 관리 용이
|
|
731
|
+
- Feature 단위로 모든 문서가 함께 위치
|
|
732
|
+
- 파일 탐색과 맥락 파악이 쉬움
|
|
752
733
|
|
|
753
734
|
---
|
|
754
735
|
|