Souzip ๊ธฐ๋ฅ ์์ ์ ์์ํ ๋ ๋ฐ๋ฅด๋ ์์์ ๋๋ค.
์ฌ์ฉ ์คํฌ: souzip-goal
AI๋ ๋จผ์ ์ธํฐ๋ทฐ๋ก ์๊ตฌ์ฌํญ๊ณผ ์ดํด๊ด๊ณ๋ฅผ ๋ฌป์ต๋๋ค. ์ง๋ฌธ์ ํ ๋ฒ์ 1~3๊ฐ๋ง ํฉ๋๋ค.
Goal ๋ฌธ์์๋ ์๋๊ฐ ์์ด์ผ ํฉ๋๋ค.
- ํ ์ค ๋ชฉํ
- ๋ฐฐ๊ฒฝ๊ณผ ๋ฌธ์
- ์ฌ์ฉ์์ ์ดํด๊ด๊ณ
- ์ฑ๊ณต ๊ธฐ์ค
- ํ์ง ์์ ๊ฒ
- ํ์ฌ ํ๋ฆ๊ณผ ์ํ๋ ํ๋ฆ
- UI ์ํฅ
- API, ๋ฐ์ดํฐ, ๋๋ฉ์ธ ์ํฅ
- ์ ์ฝ ์กฐ๊ฑด
- ์ด๋ฆฐ ์ง๋ฌธ
- Story ํ๋ณด
- ์ต์ข ํฉ์
์ฌ์ฉ์๊ฐ ์์ฐ์ด๋ก ๋ช
ํํ ๋์ํ๋ฉด Goal ์น์ธ์ผ๋ก ๋ด
๋๋ค.
์ค์ Goal ๋ฌธ์๋ docs/goals/ ์๋์ ๋ก์ปฌ๋ก๋ง ๋ณด๊ดํ๊ณ Git์ ์ฌ๋ฆฌ์ง ์์ต๋๋ค.
์ฌ์ฉ ์คํฌ: souzip-story
Goal ์น์ธ ๋ค Story ํ๋ณด ์ ์ฒด๋ฅผ ๋ง๋ญ๋๋ค. Jira๋ ์ฒ์๋ถํฐ ์ ๋ถ ๋ง๋ค์ง ์์ต๋๋ค.
๋จผ์ active Story 1~2๊ฐ๋ง ๊ณ ๋ฆ ๋๋ค.
- ์ฒซ ๋ฒ์งธ: ์์ง๋ง ๋๋จ ํ๋ฆ์ ์ค์ ๋ก ์ฐ๊ฒฐํด ๋ณผ ์ ์๋ Story
- ๋ ๋ฒ์งธ: ํ์ํ๋ฉด ๊ฐ์ฅ ๋ถํ์คํ ๊ธฐ์ ๋ฆฌ์คํฌ๋ฅผ ๊ฒ์ฆํ๋ Story
๋๋ฌด ํฐ Story๋ Jira์ worktree๋ก ์ฌ๋ฆฌ๊ธฐ ์ ์ ๋ค์ ์ชผ๊ฐญ๋๋ค.
์ฌ์ฉ ์คํฌ: souzip-jira-story
active Story ํ์ ๋ค EpicยทStory Jira ์ด์์ ์ค๋นํฉ๋๋ค.
์ด์ ์น์ธ ํ, ์ฌ์ฉ์๊ฐ Jira ๋ง๋ค์ด์ฒ๋ผ ๋ช
์์ ์ผ๋ก ๋งํ ๋๋ง Jira์ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด ์ด์์ ์ฐ๊ฒฐํฉ๋๋ค.
- Goal Epic: ์์ผ๋ฉด Goal ๊ธฐ์ค์ผ๋ก Epic ์ด์ โ ์น์ธ โ ์์ฑ
- Story: active 1~2๊ฐ๋ง ๋์
- ์ค๋ณต ๊ฒ์: Goal
jiraํค ์ฐ์ , ์์ผ๋ฉด Epic ํ์ ์ ์ฌ summary ๊ฒ์ priority,description์ ๋ฃ์ง ์์- worktreeยท๋ธ๋์น ์์๋ ์์
Story ํ๋๋ worktree ํ๋์ด์ PR ํ๋์ ๋๋ค.
- base branch:
develop - target branch:
develop - Jira Story: active Story๋ง ์์ฑ
- Story ๋ฌธ์: worktree, branch, base commit ๊ธฐ๋ก
- ์ worktree ์ค๋น:
docs/harness/scripts/bootstrap-worktree.sh
Story๋ฅผ ์์ํ๊ธฐ ์ ์๋ develop ๊ธฐ์ค์ ์ด ๋ถ๋ช
ํด์ผ ํฉ๋๋ค.
์ worktree๋ฅผ ๋ง๋ ์งํ์๋ bootstrap ์คํฌ๋ฆฝํธ๋ฅผ ํ ๋ฒ ์คํํฉ๋๋ค.
์ด ์คํฌ๋ฆฝํธ๋ ๋ก์ปฌ Config ํ์ผ์ ๋ณต์ฌํ ๋ค tuist install๊ณผ tuist generate๋ฅผ ์คํํฉ๋๋ค.
tuist install์ Tuist/Package.resolved๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ํ ์์กด์ฑ ์ํ๋ฅผ ๋ง์ถ๋ฉฐ, ๋๊ตฌ์ ์บ์๊ฐ ์์ผ๋ฉด ์ฌ์ฌ์ฉํฉ๋๋ค.
์ค์ Story ๋ฌธ์๋ docs/goals/ ์๋์ ๋ก์ปฌ๋ก๋ง ๋ณด๊ดํ๊ณ Git์ ์ฌ๋ฆฌ์ง ์์ต๋๋ค.
์ฌ์ฉ ์คํฌ: souzip-plan
Plan์ Story ์์ ์ธ์ ๋จ์ ์์ ์ ๋๋ค.
Plan์ ์๋ ๊ธฐ์ค์ ๋ง์กฑํด์ผ ํฉ๋๋ค.
- ํ ์ธ์ ์์ ๊ตฌํ๊ณผ ๊ฒ์ฆ๊น์ง ๋๋ผ ์ ์์ต๋๋ค.
- ๊ฒ์ฆ ๋ช ๋ น์ด ์์ต๋๋ค.
- ํ์ง ์์ ๋ฒ์๊ฐ ๋ถ๋ช ํฉ๋๋ค.
์ฌ์ฉ์๊ฐ Plan์ ์น์ธํ๊ณ โ๊ตฌํํดโ๋ผ๊ณ ๋งํ ๋ค์๋ง ์ฝ๋๋ฅผ ๊ณ ์นฉ๋๋ค.
์ค์ Plan ๋ฌธ์๋ docs/goals/ ์๋์ ๋ก์ปฌ๋ก๋ง ๋ณด๊ดํ๊ณ Git์ ์ฌ๋ฆฌ์ง ์์ต๋๋ค.
๊ตฌํ์ ์น์ธ๋ Plan ๋ฒ์ ์์์๋ง ํฉ๋๋ค. Plan ๋ฐ ์๊ตฌ๊ฐ ์๊ธฐ๋ฉด Plan์ ๋จผ์ ๊ณ ์นฉ๋๋ค.
Tuist, Factory, ๋ชจ๋ ๊ฒฝ๊ณ, ๋ ์ด์ด ๊ท์น์ฒ๋ผ ํฐ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ๋ฉ์ถ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฌป์ต๋๋ค.
์ฌ์ฉ ์คํฌ: souzip-verify
Plan ์ข ๋ฃ ๊ธฐ๋ณธ ๊ฒ์ฆ์ ์๋ ์์์ ๋๋ค.
docs/harness/scripts/verify.sh plan๊ด๋ จ ํ ์คํธ๊ฐ ์์ผ๋ฉด Plan์ ๋ง๊ฒ ์ง์ ํฉ๋๋ค.
VERIFY_TEST_TARGETS="DomainTests" docs/harness/scripts/verify.sh plan
VERIFY_TEST_SCHEME="Domain" docs/harness/scripts/verify.sh plan๊ฒ์ฆ ์คํจ๊ฐ Plan ๋ฒ์ ์์ด๋ฉด AI๊ฐ ๊ณ ์น๊ณ ๊ฐ์ ๊ฒ์ฆ์ ๋ค์ ์คํํฉ๋๋ค. ๊ฐ์ ์คํจ๋ฅผ ๋ ๋ฒ ์ด์ ์์ ํด๋ ํด๊ฒฐ๋์ง ์์ผ๋ฉด ์์ธ ์กฐ์ฌ๋ก ์ ํํฉ๋๋ค.
Story์ ๋ชจ๋ Plan์ด ๋๋๋ฉด Story ์ข ๋ฃ ๊ฒ์ฆ์ ํฉ๋๋ค.
docs/harness/scripts/verify.sh storyPR ์ ์๋ Story ์์ ์ดํ develop์ด ๋ฐ๋์ด Plan์ด ๋ก์ง ์์๋์ง ํ์ธํฉ๋๋ค.
ํ์ธ์ ๋ณ๊ฒฝ ํ์ผ ๊ฒน์นจ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
git fetch origin develop
git diff --name-only {base_commit}..origin/develop
git diff --name-only {base_commit}..HEAD๋ ๊ฒฐ๊ณผ์์ ๊ฒน์น๋ ํ์ผ์ด ์์ผ๋ฉด ๋ฉ์ถ๊ณ ์ฌ์ฉ์์๊ฒ ์๋ฆฝ๋๋ค. ๊ฒน์น๋ ํ์ผ์ด ์์ผ๋ฉด Story ์ข ๋ฃ ๊ฒ์ฆ์ ์ ์งํ๊ณ PR๋ก ๊ฐ ์ ์์ต๋๋ค.
์ฌ์ฉ ์คํฌ: souzip-commit, souzip-pr
commit, PR ์์ฑ, PR ์์ฑ์ ์ํ push๋ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ๋งํ ๋ค์๋ง ํฉ๋๋ค.
- โ์ปค๋ฐํดโ: commit ๊ฐ๋ฅ
- โPRโ: PR ์ค๋น ํ์ธ ํต๊ณผ ๋ค Story ๋ธ๋์น push์ PR ์์ฑ ๊ฐ๋ฅ
Story PR์ develop์ผ๋ก ๋ณด๋
๋๋ค.
PR ํ์ดํ์ Jira ํค๊ฐ ์์ผ๋ฉด [SOU-xxx] {์ ๋ชฉ}, ์์ผ๋ฉด [NO-ISSUE] {์ ๋ชฉ}์ ์๋๋ค.