docs: 개발환경 가이드 v1.6.1 최신화 #24

병합
htlee feature/guide-v161-update 에서 develop 로 1 commits 를 머지했습니다 2026-03-08 13:21:40 +09:00
3개의 변경된 파일299개의 추가작업 그리고 141개의 파일을 삭제
Showing only changes of commit 56fdc38f7b - Show all commits

파일 보기

@ -57,73 +57,182 @@ export default function ClaudeCodeSkills() {
Gitea .
</Alert>
{/* 일상적인 개발 흐름 */}
<h2 className="text-xl font-bold text-text-primary mt-10 mb-4"> </h2>
<p className="text-text-secondary mb-4">
Claude Code .
{/* 개발 프로세스 전체 흐름 */}
<h2 className="text-xl font-bold text-text-primary mt-10 mb-4"> </h2>
<p className="text-text-secondary mb-6">
, Claude Code .
</p>
{/* 시각적 플로우 */}
<div className="bg-surface border border-border-default rounded-xl p-5 mb-8">
<div className="flex flex-wrap items-center gap-2 text-sm font-mono justify-center">
<span className="px-3 py-1.5 bg-accent/10 text-accent rounded-lg font-semibold"> </span>
<span className="text-text-muted"></span>
<span className="px-3 py-1.5 bg-info/10 text-info rounded-lg font-semibold"> </span>
<span className="text-text-muted"></span>
<span className="px-3 py-1.5 bg-success/10 text-success rounded-lg font-semibold"></span>
<span className="text-text-muted"></span>
<span className="px-3 py-1.5 bg-warning/10 text-warning rounded-lg font-semibold">/push</span>
<span className="text-text-muted"></span>
<span className="px-3 py-1.5 bg-info/10 text-info rounded-lg font-semibold">/mr</span>
<span className="text-text-muted"></span>
<span className="px-3 py-1.5 bg-danger/10 text-danger rounded-lg font-semibold">/release</span>
</div>
</div>
<StepGuide
steps={[
{
title: '코드 수정 후 푸시 — /push',
title: '1. 계획 수립 — 플랜 모드',
content: (
<>
<p className="mb-2"> +.</p>
<p className="mb-2"> . Claude Code가 .</p>
<CodeBlock
language="text"
code={`/push
#
# +
/push "feat(auth): "
# `}
code={`"사용자 인증 기능을 추가해줘"
# Claude가
#
# `}
/>
<p className="text-xs text-text-muted mt-1">3 , .</p>
</>
),
},
{
title: 'MR 생성 — /mr',
title: '2. 브랜치 분리 — feature 브랜치 생성',
content: (
<>
<p className="mb-2">feature develop으로 MR을 .</p>
<p className="mb-2">develop에서 feature .</p>
<CodeBlock
language="text"
code={`/mr
# 1. +
# 2. (RELEASE-NOTES.md)
# 3. Gitea MR
# 4. or + `}
language="bash"
code={`git checkout develop
git pull origin develop
git checkout -b feature/ISSUE-42-user-auth`}
/>
<p className="text-xs text-text-muted mt-1">
<code className="bg-bg-tertiary px-1 rounded">/mr</code>{' '}
<code className="bg-bg-tertiary px-1 rounded">/push</code> + MR + .
MR claude-bot + .
<code className="bg-bg-tertiary px-1 rounded">/fix-issue 42</code>
+ .
</p>
</>
),
},
{
title: '릴리즈 — /release (관리자)',
title: '3. 개발 → /push',
content: (
<>
<p className="mb-2">develop main MR을 , .</p>
<p className="mb-2"> <code className="bg-bg-tertiary px-1 rounded">/push</code> +.</p>
<CodeBlock
language="text"
code={`/release
# 1. develop
# 2. [Unreleased] [] +
# 3. developmain MR
# 4. claude-bot CI/CD `}
code={`/push
# 1. ( )
# 2. + diff
# 3. Conventional Commits
# 4. commit + push`}
/>
<Alert type="warning">
<code className="bg-bg-tertiary px-1 rounded">/release</code> <strong>admin</strong> .
<Alert type="info">
, .
<code className="bg-bg-tertiary px-1 rounded ml-1">/push</code> .
</Alert>
</>
),
},
{
title: '4. MR 생성 — /mr',
content: (
<>
<p className="mb-2"> develop으로 MR(Merge Request) .</p>
<CodeBlock
language="text"
code={`/mr
# 1. +
# 2. docs/RELEASE-NOTES.md [Unreleased]
# 3. ( )
# 4. Gitea API로 MR
# 5. :
# - ()
# - + claude-bot이 +`}
/>
</>
),
},
]}
/>
{/* 권한별 시나리오 */}
<h2 className="text-xl font-bold text-text-primary mt-10 mb-4"> </h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="bg-surface border border-info/30 rounded-xl p-5">
<h4 className="font-semibold text-info mb-3 flex items-center gap-2">
<span className="px-2 py-0.5 bg-info/10 text-info rounded text-xs font-medium">push </span>
</h4>
<div className="text-sm text-text-secondary space-y-2">
<p className="font-medium text-text-primary"> : /push, /mr, /create-mr, /fix-issue</p>
<div className="bg-bg-tertiary rounded-lg p-3 text-xs space-y-1.5">
<div className="flex items-center gap-2">
<span className="text-success">1.</span>
<span><code className="bg-surface px-1 rounded">/push</code> +</span>
</div>
<div className="flex items-center gap-2">
<span className="text-success">2.</span>
<span><code className="bg-surface px-1 rounded">/mr</code> develop으로 MR </span>
</div>
<div className="flex items-center gap-2">
<span className="text-success">3.</span>
<span>&quot; &quot; </span>
</div>
<div className="flex items-center gap-2">
<span className="text-info"></span>
<span> Gitea에서 + </span>
</div>
</div>
<Alert type="info">
<code className="bg-bg-tertiary px-1 rounded">/release</code> <code className="bg-bg-tertiary px-1 rounded">/version</code>
admin . .
</Alert>
</div>
</div>
<div className="bg-surface border border-danger/30 rounded-xl p-5">
<h4 className="font-semibold text-danger mb-3 flex items-center gap-2">
<span className="px-2 py-0.5 bg-danger/10 text-danger rounded text-xs font-medium">admin </span>
</h4>
<div className="text-sm text-text-secondary space-y-2">
<p className="font-medium text-text-primary"> : /release, /version</p>
<div className="bg-bg-tertiary rounded-lg p-3 text-xs space-y-1.5">
<div className="flex items-center gap-2">
<span className="text-success">1.</span>
<span><code className="bg-surface px-1 rounded">/push</code> <code className="bg-surface px-1 rounded">/mr</code> &quot; +&quot; </span>
</div>
<div className="flex items-center gap-2">
<span className="text-success">2.</span>
<span>feature , develop에서:</span>
</div>
<div className="flex items-center gap-2">
<span className="text-success">3.</span>
<span><code className="bg-surface px-1 rounded">/release</code> developmain MR</span>
</div>
<div className="flex items-center gap-2 pl-4 text-text-muted">
<span> + </span>
</div>
<div className="flex items-center gap-2 pl-4 text-text-muted">
<span> claude-bot CI/CD </span>
</div>
<div className="flex items-center gap-2">
<span className="text-success">4.</span>
<span><code className="bg-surface px-1 rounded">/version</code> VERSION-HISTORY.md (SemVer)</span>
</div>
</div>
</div>
</div>
</div>
<Alert type="info">
Gitea . <strong>gc</strong> {' '}
<strong>developers</strong> push .
admin .
</Alert>
{/* 커스텀 에이전트 */}
<h2 className="text-xl font-bold text-text-primary mt-10 mb-4"> </h2>
<p className="text-text-secondary mb-4">
@ -161,38 +270,32 @@ export default function ClaudeCodeSkills() {
</div>
</div>
{/* 사전 준비 */}
<h2 className="text-xl font-bold text-text-primary mt-10 mb-4"> </h2>
{/* 시작하기 */}
<h2 className="text-xl font-bold text-text-primary mt-10 mb-4"></h2>
<p className="text-text-secondary mb-4">
.
Claude Code <code className="bg-bg-tertiary px-1 rounded">/init-project</code> .
</p>
<div className="bg-surface border border-border-default rounded-xl p-5">
<div className="space-y-3 text-sm">
<div className="flex items-start gap-3">
<span className="px-2 py-0.5 bg-accent/10 text-accent rounded text-xs font-semibold mt-0.5">1</span>
<span className="text-text-secondary">Claude Code : <code className="bg-bg-tertiary px-1 rounded">npm install -g @anthropic-ai/claude-code</code></span>
</div>
<div className="flex items-start gap-3">
<span className="px-2 py-0.5 bg-accent/10 text-accent rounded text-xs font-semibold mt-0.5">2</span>
<span className="text-text-secondary"> <code className="bg-bg-tertiary px-1 rounded">claude</code> <code className="bg-bg-tertiary px-1 rounded">/init-project</code></span>
</div>
<div className="flex items-start gap-3">
<span className="px-2 py-0.5 bg-accent/10 text-accent rounded text-xs font-semibold mt-0.5">3</span>
<span className="text-text-secondary">GITEA_TOKEN ( <strong> </strong> )</span>
</div>
</div>
</div>
<p className="text-xs text-text-muted mt-2">
<code className="bg-bg-tertiary px-1 rounded">CLAUDE_BOT_TOKEN</code>{' '}
<code className="bg-bg-tertiary px-1 rounded">settings.json</code> .
(rules, skills, agents) <code className="bg-bg-tertiary px-1 rounded">/push</code> .
</p>
<ul className="space-y-2 text-text-secondary">
<li className="flex items-start gap-2">
<span className="text-accent mt-0.5"></span>
<span>
<strong>GITEA_TOKEN</strong> <strong> </strong>
&quot;Gitea API &quot;
</span>
</li>
<li className="flex items-start gap-2">
<span className="text-accent mt-0.5"></span>
<span>
<strong>Claude Code </strong> <code className="bg-bg-tertiary px-1 rounded">npm install -g @anthropic-ai/claude-code</code>
</span>
</li>
<li className="flex items-start gap-2">
<span className="text-accent mt-0.5"></span>
<span>
<strong> </strong> <code className="bg-bg-tertiary px-1 rounded">/init-project</code>
</span>
</li>
</ul>
<Alert type="info">
<code className="bg-bg-tertiary px-1 rounded">GITEA_TOKEN</code>{' '}
<code className="bg-bg-tertiary px-1 rounded">settings.json</code>{' '}
<code className="bg-bg-tertiary px-1 rounded">env</code> .
settings.json .
</Alert>
</div>
);
}

파일 보기

@ -195,51 +195,107 @@ claude --version`}
<h3 className="text-lg font-bold text-text-primary mt-8 mb-4">
Gitea API
<span className="ml-2 px-2 py-0.5 bg-danger/10 text-danger rounded text-xs font-medium align-middle"></span>
</h3>
<p className="text-text-secondary mb-4">
Claude Code (<code className="bg-bg-tertiary px-1 rounded">/push</code>,{' '}
<code className="bg-bg-tertiary px-1 rounded">/mr</code>,{' '}
<code className="bg-bg-tertiary px-1 rounded">/release</code> ) Gitea API .
<code className="bg-bg-tertiary px-1 rounded">/release</code> )Git push에 .
</p>
<StepGuide
steps={[
{
title: 'Gitea에서 토큰 생성',
title: '토큰 생성 페이지 접속',
content: (
<p>
Gitea <strong></strong> <strong></strong>
&quot; &quot; <strong> </strong> .
<a href="https://gitea.gc-si.dev/user/settings/applications" target="_blank" rel="noopener noreferrer" className="text-accent hover:underline">
gitea.gc-si.dev/user/settings/applications
</a>
{' '} &quot;Manage Access Tokens&quot; <strong>&quot;Generate New Token&quot;</strong>
</p>
),
},
{
title: '토큰 정보 입력',
content: (
<>
<p className="mb-3">
<strong>Token Name:</strong> <code className="bg-bg-tertiary px-1 rounded">claude-code</code> ( )<br />
<strong>Repository and Organization Access:</strong> <em>All (public, private, and limited)</em>
</p>
<p className="mb-2 font-medium text-text-primary text-sm">Select permissions ( 4 , No Access ):</p>
<div className="overflow-x-auto">
<table className="w-full bg-bg-tertiary rounded-lg overflow-hidden text-sm">
<thead>
<tr className="bg-surface">
<th className="text-left px-3 py-2 font-semibold text-text-primary"></th>
<th className="text-left px-3 py-2 font-semibold text-text-primary"></th>
<th className="text-left px-3 py-2 font-semibold text-text-primary"></th>
</tr>
</thead>
<tbody className="divide-y divide-border-subtle">
<tr><td className="px-3 py-2 font-mono text-xs">issue</td><td className="px-3 py-2">Read and Write</td><td className="px-3 py-2 text-text-muted">/fix-issue /</td></tr>
<tr><td className="px-3 py-2 font-mono text-xs">organization</td><td className="px-3 py-2">Read</td><td className="px-3 py-2 text-text-muted">gc </td></tr>
<tr><td className="px-3 py-2 font-mono text-xs">repository</td><td className="px-3 py-2">Read and Write</td><td className="px-3 py-2 text-text-muted">/push, /mr, /release API </td></tr>
<tr><td className="px-3 py-2 font-mono text-xs">user</td><td className="px-3 py-2">Read</td><td className="px-3 py-2 text-text-muted">API </td></tr>
</tbody>
</table>
</div>
</>
),
},
{
title: '토큰 복사',
content: (
<Alert type="warning">
<strong> </strong>. .
<strong>&quot;Generate Token&quot;</strong> <strong> </strong>. .
</Alert>
),
},
{
title: '환경변수 등록',
title: '토큰 등록',
content: (
<>
<CodeBlock
language="bash"
filename="~/.zshrc"
code={`# Gitea API 토큰 (Claude Code 스킬 실행에 필요)
export GITEA_TOKEN="생성된_토큰_붙여넣기"`}
/>
<CodeBlock language="bash" code="source ~/.zshrc" />
<p className="text-text-secondary text-sm mb-3"> .</p>
<div className="space-y-3">
<div className="bg-bg-tertiary rounded-lg p-3">
<p className="text-xs font-semibold text-accent mb-1"> A: settings.local.json ( Claude Code )</p>
<p className="text-xs text-text-muted mb-2">
<code className="bg-surface px-1 rounded">/init-project</code> . .
</p>
<CodeBlock
language="json"
filename=".claude/settings.local.json"
code={`{
"env": {
"GITEA_TOKEN": "생성된_토큰_붙여넣기"
}
}`}
/>
<p className="text-xs text-text-muted mt-1"> .gitignore에 .</p>
</div>
<div className="bg-bg-tertiary rounded-lg p-3">
<p className="text-xs font-semibold text-text-secondary mb-1"> B: 환경변수 (~/.zshrc)</p>
<CodeBlock
language="bash"
filename="~/.zshrc"
code={`export GITEA_TOKEN="생성된_토큰_붙여넣기"`}
/>
</div>
</div>
</>
),
},
]}
/>
<Alert type="info">
<code className="bg-bg-tertiary px-1 rounded">CLAUDE_BOT_TOKEN</code> {' '}
<code className="bg-bg-tertiary px-1 rounded">settings.json</code> .
</Alert>
<div className="bg-accent-soft border border-accent/20 rounded-xl p-4 mt-4">
<h4 className="font-semibold text-accent text-sm mb-2">GITEA_TOKEN vs CLAUDE_BOT_TOKEN</h4>
<ul className="text-xs text-text-secondary space-y-1">
<li><strong>GITEA_TOKEN</strong> () . <code className="bg-bg-tertiary px-1 rounded">/push</code>, <code className="bg-bg-tertiary px-1 rounded">/mr</code>, <code className="bg-bg-tertiary px-1 rounded">/release</code> Git API </li>
<li><strong>CLAUDE_BOT_TOKEN</strong> ( ) <code className="bg-bg-tertiary px-1 rounded">settings.json</code> . PR . </li>
</ul>
</div>
</div>
);
}

파일 보기

@ -81,9 +81,7 @@ export default function StartingProject() {
content: (
<p>
Gitea <strong>gc</strong> <strong> </strong> .
<strong> &quot;릿 &quot;</strong> 릿(<code className="bg-bg-tertiary px-1 rounded">template-java-maven</code>,{' '}
<code className="bg-bg-tertiary px-1 rounded">template-java-gradle</code>,{' '}
<code className="bg-bg-tertiary px-1 rounded">template-react-ts</code>) .
<strong> &quot;릿 &quot;</strong> 릿 .
</p>
),
},
@ -98,55 +96,45 @@ cd 새-프로젝트명`}
),
},
{
title: 'Claude Code로 초기화 (Claude Code 사용 시)',
title: '/init-project 실행',
content: (
<>
<p className="mb-2">
Claude Code를 .
</p>
<CodeBlock
language="bash"
code={`claude
# :
# Claude Code :
/init-project`}
/>
<div className="mt-3 bg-bg-tertiary rounded-lg p-3">
<p className="text-xs text-text-secondary mb-1">
<strong className="text-text-primary">/init-project</strong> :
</p>
<p className="text-xs font-semibold text-text-primary mb-2">/init-project가 :</p>
<ul className="text-xs text-text-muted space-y-0.5 list-disc list-inside">
<li>Git hooks (<code>.githooks/</code> hooks로 )</li>
<li> </li>
<li>CLAUDE.md </li>
<li>memory ( )</li>
<li>hook (<code>.claude/scripts/</code>)</li>
<li>lint + </li>
<li> ( , , lint )</li>
<li>CLAUDE.md </li>
<li>settings.json </li>
<li><strong>GITEA_TOKEN </strong> ( settings.local.json )</li>
<li>Git hooks + pre-commit </li>
<li>.gitignore에 </li>
<li>memory </li>
<li><strong> </strong> ( rules, skills, agents, scripts )</li>
</ul>
</div>
<p className="mt-2 text-text-muted text-xs">
Claude Code를 Git hooks는 ,{' '}
<Alert type="info">
Claude Code를 :{' '}
<code className="bg-bg-tertiary px-1 rounded">git config core.hooksPath .githooks</code>
.
</p>
Git hooks만 .
</Alert>
</>
),
},
{
title: 'develop 브랜치 생성',
title: 'develop 브랜치 생성 + 첫 feature 시작',
content: (
<CodeBlock
language="bash"
code={`git checkout -b develop
git push -u origin develop`}
/>
),
},
{
title: '첫 feature 브랜치 시작',
content: (
<CodeBlock
language="bash"
code={`git checkout -b feature/ISSUE-1-project-setup
git push -u origin develop
git checkout -b feature/ISSUE-1-project-setup
# !`}
/>
),
@ -154,39 +142,48 @@ git push -u origin develop`}
]}
/>
{/* 템플릿 공통 파일 구조 */}
<h2 className="text-xl font-bold text-text-primary mt-10 mb-4">릿 </h2>
{/* 프로젝트 파일 구조 */}
<h2 className="text-xl font-bold text-text-primary mt-10 mb-4"> </h2>
<p className="text-text-secondary mb-4">
릿 . Git에 .
<strong> </strong>{' '}
<strong> </strong> . .gitignore에 ,{' '}
<code className="bg-bg-tertiary px-1 rounded">/sync-team-workflow</code> .
</p>
<div className="bg-surface border border-border-default rounded-xl p-5">
<div className="font-mono text-sm space-y-1.5 text-text-secondary">
<div><span className="text-accent">.claude/</span></div>
<div className="pl-4"><span className="text-accent">rules/</span> (code-style, git-workflow, naming, testing, team-policy, release-notes-guide, subagent-policy)</div>
<div className="pl-4"><span className="text-accent">skills/</span> Claude (push, mr, release, version, create-mr, fix-issue, init-project, sync-team-workflow)</div>
<div className="pl-4"><span className="text-accent">agents/</span> (explorer, implementer, reviewer)</div>
<div className="pl-4"><span className="text-accent">scripts/</span> hook (on-pre-compact, on-post-compact, on-commit)</div>
<div className="pl-4"><span className="text-accent">settings.json</span> Claude + env (GITEA_TOKEN )</div>
<div className="pl-4 text-text-muted italic">settings.local.json (.gitignore에 , )</div>
<div className="mt-2"><span className="text-accent">.githooks/</span></div>
<div className="pl-4"><span className="text-accent">commit-msg</span> Conventional Commits </div>
<div className="pl-4"><span className="text-accent">post-checkout</span> </div>
<div className="mt-2"><span className="text-accent">docs/</span></div>
<div className="pl-4"><span className="text-accent">RELEASE-NOTES.md</span> (keepachangelog, /mr )</div>
<div className="pl-4 text-text-muted italic">VERSION-HISTORY.md (SemVer, /version )</div>
<div className="mt-2"><span className="text-accent">.editorconfig</span> </div>
<div><span className="text-accent">.gitignore</span> Git </div>
<div><span className="text-accent">CLAUDE.md</span> </div>
<div><span className="text-accent">workflow-version.json</span> </div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="bg-surface border border-border-default rounded-xl p-5">
<h4 className="font-semibold text-accent text-sm mb-3"> ()</h4>
<div className="font-mono text-xs space-y-1.5 text-text-secondary">
<div><span className="text-accent">.claude/settings.json</span> + env</div>
<div><span className="text-accent">.claude/workflow-version.json</span> </div>
<div><span className="text-accent">.claude/skills/init-project/</span></div>
<div><span className="text-accent">.claude/skills/sync-team-workflow/</span></div>
<div><span className="text-accent">.githooks/</span> commit-msg, post-checkout, pre-commit</div>
<div><span className="text-accent">CLAUDE.md</span> </div>
<div><span className="text-accent">.editorconfig</span>, <span className="text-accent">.gitignore</span></div>
</div>
</div>
<div className="bg-surface border border-border-default rounded-xl p-5">
<h4 className="font-semibold text-info text-sm mb-3"> (.gitignore, sync )</h4>
<div className="font-mono text-xs space-y-1.5 text-text-secondary">
<div><span className="text-info">.claude/rules/</span> 7</div>
<div><span className="text-info">.claude/agents/</span> 3</div>
<div><span className="text-info">.claude/skills/push, mr, release...</span> 6</div>
<div><span className="text-info">.claude/scripts/</span> hook </div>
<div className="mt-2 text-text-muted italic">.claude/settings.local.json (GITEA_TOKEN )</div>
<div className="mt-2"><span className="text-info">docs/RELEASE-NOTES.md</span> /mr에서 </div>
<div className="text-text-muted italic">docs/VERSION-HISTORY.md /version으로 </div>
</div>
</div>
</div>
<div className="bg-accent-soft border border-accent/20 rounded-xl p-4 mt-4 mb-6">
<h4 className="font-semibold text-accent text-sm mb-2">settings.json vs settings.local.json</h4>
<ul className="text-xs text-text-secondary space-y-1">
<li><code className="bg-bg-tertiary px-1 rounded">.claude/settings.json</code> (Git에 ). .</li>
<li><code className="bg-bg-tertiary px-1 rounded">.claude/settings.local.json</code> (.gitignore). . .</li>
</ul>
<h4 className="font-semibold text-accent text-sm mb-2"> (v1.6.1)</h4>
<p className="text-xs text-text-secondary">
<code className="bg-bg-tertiary px-1 rounded">/push</code>, <code className="bg-bg-tertiary px-1 rounded">/mr</code>,{' '}
<code className="bg-bg-tertiary px-1 rounded">/release</code> SHA256 .
.
, .
</p>
</div>
{/* 템플릿별 추가 파일 */}
@ -216,9 +213,11 @@ git push -u origin develop`}
</div>
</div>
<Alert type="info" title="워크플로우 업데이트">
Claude Code .
<code className="bg-bg-tertiary px-1 rounded ml-1">/sync-team-workflow</code> .
<Alert type="info" title="워크플로우 자동 동기화">
<code className="bg-bg-tertiary px-1 rounded">/push</code>,{' '}
<code className="bg-bg-tertiary px-1 rounded">/mr</code>,{' '}
<code className="bg-bg-tertiary px-1 rounded">/release</code> .
<code className="bg-bg-tertiary px-1 rounded ml-1">/sync-team-workflow</code> .
</Alert>
{/* 프로젝트 구조 권장안 */}