์์ฑ ์ผ์: 2025-12-17 ๋ชฉ์ : Community Feature ๊ตฌํ ๊ณผ์ ์์ ๋ฐ๊ฒฌ๋ ์์ด์ ํธ ๊ฐ์ ์ฌํญ
๐ฏ ๊ฐ์ ํ์ ์์ด์ ํธ#
1. /figma:analyze ๊ฐ์ #
ํ์ฌ ๋ฌธ์ :
- โ ๋ถ์๋ง ํ๊ณ ์ค์ UI ๊ตฌํ๊น์ง ์ฐ๊ฒฐ๋์ง ์์
- โ ZenHub Story์ ํผ๊ทธ๋ง ํ๋ ์ ๋งํฌ๊ฐ ๊ธฐ๋ก๋์ง ์์
๊ฐ์ ์๊ตฌ์ฌํญ:
1-1. ํผ๊ทธ๋ง ํ๋ ์ ๋งํฌ ๊ธฐ๋ก
Story Body์ ์ถ๊ฐํด์ผ ํ ๋ด์ฉ:
## ๐จ Figma Design
**ํ๋ ์ ๋งํฌ**:
- [๋ชฉ๋ก ํ๋ฉด](https://www.figma.com/design/QkKRtr51GXgmLdKcKcBqQe/๐ถ-Petaround?node-id=235-11480)
- [์์ธ ํ๋ฉด](https://www.figma.com/design/...)
- [์์ฑ ํ๋ฉด](https://www.figma.com/design/...)
์์ด์ ํธ ๋์:
1. ํผ๊ทธ๋ง URL ํ์ฑ
2. Story ๋ฌธ์ ์์ฑ ์ "## ๐จ Figma Design" ์น์
์๋ ์ถ๊ฐ
3. ๊ฐ ํ๋ฉด๋ณ ํ๋ ์ ๋งํฌ ๋งคํ
1-2. ์ค์ UI ๊ตฌํ ์ฐ๊ฒฐ
ํ์ฌ ํ๋ก์ฐ:
ํผ๊ทธ๋ง ๋ถ์ โ ์๊ตฌ์ฌํญ ๋ฌธ์ โ BDD ์๋๋ฆฌ์ค โ (๋)
๊ฐ์ ๋ ํ๋ก์ฐ:
ํผ๊ทธ๋ง ๋ถ์ โ ์๊ตฌ์ฌํญ ๋ฌธ์ โ BDD ์๋๋ฆฌ์ค โ ZenHub ์์ฑ โ UI ๊ตฌํ โ ๊ฒ์ฆ
Phase ์ถ๊ฐ:
Phase 7: UI ๊ตฌํ (NEW)
- /feature:presentation ์คํ
- ํผ๊ทธ๋ง ์คํ์ผ ๋ฐ์
- ์ค์ ํ๋ฉด ๊ตฌํ
Phase 8: ๋์ ๊ฒ์ฆ (NEW)
- build_runner ์คํ
- ํ
์คํธ ์คํ
- ํ๋ฉด ๋์ ํ์ธ
2. ZenHub Issue Body ํ์ ๊ฐ์ #
ํ์ฌ ๋ฌธ์ :
- โ ๋งํฌ๋ง ์ ๊ณต (์ค์ ๋ด์ฉ ํ์ธ ๋ถ๊ฐ)
- โ ๋ด์ฉ์ด ๊ธธ์ด๋ ๋ชจ๋ ํ์ (๊ฐ๋ ์ฑ ์ ํ)
ํ์ฌ ํ์:
## ์ฐธ์กฐ
- [Story ๋ฌธ์](../claudedocs/community/zenhub/stories/list_story.md)
- [BDD Scenarios](../claudedocs/community/bdd/community_list.feature)
๊ฐ์ ๋ ํ์ (Details ํ๊ทธ ์ฌ์ฉ):
<details>
<summary>๐ Story ์์ธ ๋ด์ฉ (ํด๋ฆญํ์ฌ ํผ์น๊ธฐ)</summary>
## Story ์ค๋ช
(์ ์ฒด Story ๋ฌธ์ ๋ด์ฉ)
</details>
<details>
<summary>โ
Acceptance Criteria (10๊ฐ)</summary>
### AC1: ๋ชฉ๋ก ๋ก๋ฉ ์ฑ๊ณต
```gherkin
Given the app is running # ์ฑ์ด ์คํ๋จ
...
AC2: ๋น๊ฒจ์ ์๋ก๊ณ ์นจ#
...
๐งช BDD ํ ์คํธ ์๋๋ฆฌ์ค (13๊ฐ)
Feature: Community ๋ชฉ๋ก ํ๋ฉด
(์ ์ฒด BDD Feature ํ์ผ ๋ด์ฉ)
๐ ๏ธ ๊ตฌํ ํ์คํฌ
Backend Tasks#
- Post ๋ชจ๋ธ ์ ์
- API ๊ตฌํ
Frontend Tasks#
- Domain Layer
- Data Layer
- Presentation Layer
์ฅ์ :
- โ Issue ํ๋๋ก ๋ชจ๋ ์ ๋ณด ํ์ธ ๊ฐ๋ฅ
- โ ๊ฐ๋ ์ฑ ํฅ์ (์ ์๋ค ํผ์น๊ธฐ)
- โ ๋งํฌ ํด๋ฆญ ์์ด ๋ฐ๋ก ํ์ธ
- โ ์คํ๋ผ์ธ์์๋ ํ์ธ ๊ฐ๋ฅ
3. /feature:create ์ค์ผ์คํธ๋ ์ดํฐ ๊ฐ์ #
ํ์ฌ ๋ฌธ์ :
- โ ๊ธฐ์กด feature ์กด์ฌ ์ ์ฒ๋ฆฌ ๋ก์ง ์์
- โ Phase๋ณ ์คํ์ด ๋ถ์์ ํจ
- โ UI ์ค์ ๊ตฌํ์ด ๋๋ฝ๋จ
- โ ๊ฒ์ฆ ๋จ๊ณ ์์
๊ฐ์ ์๊ตฌ์ฌํญ:
3-1. ๊ธฐ์กด Feature ๊ฐ์ง
1. feature/{location}/{feature_name} ์กด์ฌ ํ์ธ
2. ์กด์ฌํ๋ฉด:
- ์ต์
A: ์
๋ฐ์ดํธ ๋ชจ๋
- ์ต์
B: ์คํต
- ์ต์
C: ๋ฎ์ด์ฐ๊ธฐ (ํ์ธ ํ์)
3. ์กด์ฌํ์ง ์์ผ๋ฉด:
- ์ ์ฒด ์์ฑ
3-2. Phase๋ณ ์์ ํ ์คํ
Phase 2: Backend (ํ์ฌ OK):
- โ Serverpod ๋ชจ๋ธ ์์ฑ
- โ ์๋ํฌ์ธํธ ์์ฑ
- โ ์ฝ๋ ์์ฑ
- โ ๋ง์ด๊ทธ๋ ์ด์
Phase 3: Frontend (๊ฐ์ ํ์):
// ํ์ฌ: ๊ตฌ์กฐ๋ง ์์ฑ
/feature:domain โ Entity, UseCase, Repository Interface
/feature:data โ Repository impl, Mixin
/feature:presentation โ BLoC, Page (ํ
ํ๋ฆฟ๋ง)
// ๊ฐ์ : ์ค์ ๋์ํ๋ ์ฝ๋ ์์ฑ
/feature:domain โ (๋์ผ)
/feature:data โ (๋์ผ)
/feature:presentation โ
- BLoC ์์ ๊ตฌํ (Event, State, Logic)
- Page ์์ ๊ตฌํ (Scaffold, AppBar, Body)
- Widget ์์ ๊ตฌํ (PostCard with ๋ชจ๋ ํ๋)
- ํผ๊ทธ๋ง ์คํ์ผ ๋ฐ์
3-3. ์ค์ UI ๊ตฌํ ๋ณด์ฅ
์ถ๊ฐํด์ผ ํ Step:
Step 7-1: ํผ๊ทธ๋ง ๋ถ์ ์ ๋ณด ๋ก๋
- claudedocs/{feature}/figma_analysis.md ์ฝ๊ธฐ
- ์คํ์ผ, ๋ ์ด์์ ์ ๋ณด ์ถ์ถ
Step 7-2: Widget ์ค์ ๊ตฌํ
- PostCard: ๋ชจ๋ ํ๋ ํ์
- CategoryChip: ์คํ์ผ ์ ์ฉ
- SearchBar: ๋์ ๊ตฌํ
Step 7-3: Page ์ค์ ๊ตฌํ
- Scaffold ์์ฑ
- BLoC ์ฐ๊ฒฐ
- ์ํ๋ณ UI (Loading, Loaded, Error, Empty)
3-4. ๊ฒ์ฆ ๋จ๊ณ ์ถ๊ฐ
Phase 5: ๊ฒ์ฆ (๊ฐํ ํ์):
# ํ์ฌ
melos run build
melos run test
# ๊ฐ์
melos run build --scope={feature}
melos run analyze --scope={feature}
melos run test --scope={feature}
melos run test:bdd --scope={feature} # BDD ํ
์คํธ ์คํ
flutter run --target=lib/main_development.dart # ์ค์ ์ฑ ์คํ
๐ ์์ด์ ํธ ์ ๋ฐ์ดํธ ์ฒดํฌ๋ฆฌ์คํธ#
/figma:analyze ์
๋ฐ์ดํธ#
ํ์ผ: ~/.claude/commands/figma/analyze.md (๋๋ ํ๋ก์ ํธ)
์ถ๊ฐ ์ฌํญ:
- Phase 6์ "ํผ๊ทธ๋ง ํ๋ ์ ๋งํฌ Story์ ๊ธฐ๋ก" ๋จ๊ณ ์ถ๊ฐ
- Story ํ ํ๋ฆฟ์ "## ๐จ Figma Design" ์น์ ์ถ๊ฐ
- URL ํ์ฑ ๋ฐ ๋งคํ ๋ก์ง
ํ ํ๋ฆฟ:
## ๐จ Figma Design
**ํ๋ ์ ๋งํฌ**:
- [๋ชฉ๋ก ํ๋ฉด]({figma_url_1})
- [์์ธ ํ๋ฉด]({figma_url_2})
- [์์ฑ ํ๋ฉด]({figma_url_3})
**๋์์ธ ๋ถ์**:
- ์ปฌ๋ฌ: {colors}
- ํ์ดํฌ๊ทธ๋ํผ: {typography}
- ์คํ์ด์ฑ: {spacing}
ZenHub Issue ํ ํ๋ฆฟ ๊ฐ์ #
ํ์ผ: ์ ๊ท ์์ฑ ํ์
Issue Body ํ ํ๋ฆฟ:
# [Story] {title}
> **Story Point**: {point}
> **Sprint**: {sprint}
> **Epic**: #{epic_number}
## ๐จ Figma Design
{figma_links}
<details>
<summary>๐ Story ์์ธ ๋ด์ฉ (ํด๋ฆญํ์ฌ ํผ์น๊ธฐ)</summary>
{story_content}
</details>
<details>
<summary>โ
Acceptance Criteria ({ac_count}๊ฐ)</summary>
{ac_list}
</details>
<details>
<summary>๐งช BDD ํ
์คํธ ์๋๋ฆฌ์ค ({scenario_count}๊ฐ)</summary>
```gherkin
{bdd_content}
๐ ๏ธ ๊ตฌํ ํ์คํฌ
{tasks}
๐ค Generated with Claude Code
---
### `/feature:create` ์ค์ผ์คํธ๋ ์ดํฐ ๊ฐ์
**ํ์ผ**: `~/.claude/commands/feature/create.md` (๋๋ ํ๋ก์ ํธ)
**์ถ๊ฐ Phase**:
```markdown
## Phase 3.5: ํผ๊ทธ๋ง ์คํ์ผ ์ ์ฉ (NEW)
### Step 3.5-1: ํผ๊ทธ๋ง ๋ถ์ ๋ก๋
- claudedocs/{feature}/figma_analysis.md ์ฝ๊ธฐ
- ๋์์ธ ํ ํฐ ์ถ์ถ (์์, ํฐํธ, ์คํ์ด์ฑ)
### Step 3.5-2: ์คํ์ผ ์ ์ฉ
- Widget์ ํผ๊ทธ๋ง ์คํ์ผ ๋ฐ์
- ์ปฌ๋ฌ, ํ์ดํฌ๊ทธ๋ํผ, ๋ ์ด์์ ์ ์ฉ
## Phase 4.5: ์ค์ ๋์ ๊ตฌํ (NEW)
### Step 4.5-1: BLoC ๋ก์ง ์์ฑ
- Event handler ์ค์ ๊ตฌํ
- State transition ๋ก์ง
### Step 4.5-2: Widget ์์ ๊ตฌํ
- ๋ชจ๋ ํ๋ ํ์
- ์ฌ์ฉ์ ์ธํฐ๋์
- ์๋ฌ ์ฒ๋ฆฌ
### Step 4.5-3: Page ์์ ๊ตฌํ
- Scaffold ๊ตฌ์ฑ
- AppBar, Body, FAB
- ๋ค๋น๊ฒ์ด์
์ฐ๊ฒฐ
๊ธฐ์กด Feature ์ฒ๋ฆฌ:
## Phase 0: ๊ธฐ์กด Feature ํ์ธ (NEW)
### Step 0-1: ์กด์ฌ ์ฌ๋ถ ํ์ธ
```bash
if [ -d "feature/{location}/{feature_name}" ]; then
echo "Feature already exists"
# ์
๋ฐ์ดํธ ๋ชจ๋
else
# ์ ์ฒด ์์ฑ ๋ชจ๋
fi
Step 0-2: ์ฌ์ฉ์ ํ์ธ#
-
๊ธฐ์กด feature ์กด์ฌ ์:
- ์ต์ 1: ์ ๋ฐ์ดํธ (ํ๋ ์ถ๊ฐ, UI ๊ฐ์ )
- ์ต์ 2: ์คํต
- ์ต์ 3: ์ฌ์์ฑ (๊ธฐ์กด ๋ฐฑ์ )
---
## ๐ ๊ตฌํ ๊ฐ์ด๋
### Details ํ๊ทธ ์์ฑ ํจ์
```typescript
function createDetailsSection(
summary: string,
content: string,
icon: string = ""
): string {
return `
<details>
<summary>${icon} ${summary}</summary>
${content}
</details>
`;
}
// ์ฌ์ฉ ์์
const storyDetails = createDetailsSection(
"Story ์์ธ ๋ด์ฉ (ํด๋ฆญํ์ฌ ํผ์น๊ธฐ)",
storyContent,
"๐"
);
const acDetails = createDetailsSection(
`Acceptance Criteria (${acCount}๊ฐ)`,
acContent,
"โ
"
);
Story Body ์์ฑ ๋ก์ง#
const issueBody = `
# [Story] ${title}
> **Story Point**: ${point}
> **Sprint**: ${sprint}
> **Epic**: #${epicNumber}
## ๐จ Figma Design
${figmaLinks}
${storyDetails}
${acDetails}
${bddDetails}
${tasksDetails}
๐ค Generated with [Claude Code](https://claude.com/claude-code)
`;
โ ์ ์ฉ ์ฒดํฌ๋ฆฌ์คํธ#
/figma:analyze#
- Story ์์ฑ ์ ํผ๊ทธ๋ง ๋งํฌ ์น์ ์ถ๊ฐ
- URL์์ node-id ์ถ์ถํ์ฌ ๋งคํ
- ํ๋ฉด๋ณ ํ๋ ์ ๋งํฌ ๊ธฐ๋ก
ZenHub Issue#
- Details ํ๊ทธ ํ ํ๋ฆฟ ์์ฑ
- Story ์ ์ฒด ๋ด์ฉ ํฌํจ
- AC ์ ์ฒด ๋ด์ฉ ํฌํจ
- BDD ์๋๋ฆฌ์ค ์ ์ฒด ๋ด์ฉ ํฌํจ
- ๊ตฌํ ํ์คํฌ ์ฒดํฌ๋ฆฌ์คํธ ํฌํจ
/feature:create#
- ๊ธฐ์กด feature ๊ฐ์ง ๋ก์ง
- Phase 3.5: ํผ๊ทธ๋ง ์คํ์ผ ์ ์ฉ
- Phase 4.5: ์ค์ ๋์ ๊ตฌํ
- Phase 5: ์์ ํ ๊ฒ์ฆ (BDD ํฌํจ)
๐ง ๋ค์ ์ธ์ ์์ #
-
์์ด์ ํธ ํ์ผ ์์น ํ์ธ:
# ์ ์ญ ์ค์ ls ~/.claude/commands/ # ํ๋ก์ ํธ ์ค์ ls .claude/commands/ /figma:analyze ์ ๋ฐ์ดํธ:
- ํผ๊ทธ๋ง ๋งํฌ ๊ธฐ๋ก ๋ก์ง ์ถ๊ฐ
- Story ํ ํ๋ฆฟ ์ ๋ฐ์ดํธ
ZenHub Issue ํ ํ๋ฆฟ ์์ฑ:
- Details ํ๊ทธ ํ์ฉ
- ์ ์ฒด ๋ด์ฉ ํฌํจ
-
/feature:create ๊ฐํ:
- ๊ธฐ์กด feature ์ฒ๋ฆฌ
- UI ์์ ๊ตฌํ
- ๊ฒ์ฆ ๊ฐํ
Community UI ์ค์ ๊ตฌํ:
- ๊ฐ์ ๋ ์์ด์ ํธ๋ก ์ฌ์คํ
- ๋์ํ๋ ๋ชฉ๋ก ํ๋ฉด ์์ฑ
๐ ์ฐธ๊ณ ๋ฌธ์#
- Dart Convention: ๋๋ ํ ๋ฆฌ๋ช ๋จ์ ์ฌ์ฉ (CLAUDE.md:508-513)
- BDD ๊ท์น: ์์ด Step + ํ๊ธ ์ฃผ์ (.claude/commands/bdd/generate.md)
- Community ์๊ตฌ์ฌํญ: claudedocs/community/requirements.md
- ํผ๊ทธ๋ง ๋ถ์: claudedocs/community/figma_analysis.md
๋ฌธ์ ๋ฒ์ : 1.0 ์ต์ข ์์ ์ผ: 2025-12-17