클로드 해커톤 우승자가 알려주는 클로드코드 잘 쓰는 방법
10개월간 매일 사용한 전문가의 완벽한 설정 가이드: Skills, Hooks, Subagents, MCPs까지
Anthropic x Forum Ventures 해커톤에서 우승하고 10개월간 Claude Code를 매일 사용한 @affaanmustafa가 공개한 완벽한 설정 가이드입니다. Skills, Hooks, Subagents, MCPs, Plugins까지 실전에서 정말 작동하는 모든 것을 정리했습니다.
저자 소개
Affaan은 2025년 2월 실험 단계부터 Claude Code를 사용해왔으며, @DRodriguezFX와 함께 Claude Code만으로 PMFProbe를 개발하여 Anthropic x Forum Ventures 해커톤에서 우승했습니다. (상금: $15,000 Anthropic Credits)
1. Skills과 Commands: 워크플로우의 단축키
Skills는 특정 범위와 워크플로우에 제한된 규칙으로 작동합니다. 특정 워크플로우를 실행할 때 프롬프트의 단축키 역할을 합니다.
실전 활용 예시
Opus 4.5와 긴 코딩 세션 후 불필요한 코드와 .md 파일을 정리하고 싶다면?
/refactor-clean실행- 테스트가 필요하면?
/tdd,/e2e,/test-coverage - Skills와 Commands는 한 번에 체이닝 가능합니다
/tdd /refactor-clean /test-coverageCodemap Updater: 컨텍스트 절약의 핵심
체크포인트마다 코드맵을 업데이트하는 스킬을 만들 수 있습니다. Claude가 탐색에 컨텍스트를 소모하지 않고 빠르게 코드베이스를 탐색할 수 있습니다.
~/.claude/skills/codemap-updater.md
Skills vs Commands
둘은 겹치지만 저장 위치가 다릅니다:
- Skills:
~/.claude/skills- 더 넓은 워크플로우 정의 - Commands:
~/.claude/commands- 빠른 실행 가능한 프롬프트
# Skill 구조 예시
~/.claude/skills/
pmx-guidelines.md # 프로젝트별 패턴
coding-standards.md # 언어 베스트 프랙티스
tdd-workflow/ # README.md가 있는 다중 파일 스킬
security-review/ # 체크리스트 기반 스킬2. Hooks: 이벤트 기반 자동화
Hooks는 특정 이벤트에서 실행되는 트리거 기반 자동화입니다. Skills와 달리 도구 호출과 라이프사이클 이벤트에 제한됩니다.
Hook 타입
- PreToolUse: 도구 실행 전 (검증, 리마인더)
- PostToolUse: 도구 완료 후 (포매팅, 피드백 루프)
- UserPromptSubmit: 메시지 전송 시
- Stop: Claude 응답 종료 시
- PreCompact: 컨텍스트 압축 전
- Notification: 권한 요청
실전 Hook 예시: tmux 리마인더
긴 시간이 걸리는 명령어 실행 전 tmux 사용을 제안합니다.
{
"PreToolUse": [
{
"matcher": "tool == \"Bash\" && tool_input.command matches \"(npm|pnpm|yarn|cargo|pytest)\"",
"hooks": [
{
"type": "command",
"command": "if [ -z \"$TMUX\" ]; then echo '[Hook] Consider tmux for session persistence' >&2; fi"
}
]
}
]
}Pro Tip: hookify 플러그인
JSON을 수동으로 작성하는 대신 hookify 플러그인을 사용하여 대화형으로 Hook을 생성할 수 있습니다.
/hookify원하는 것을 설명하면 자동으로 Hook을 생성합니다.
3. Subagents: 작업 위임으로 컨텍스트 절약
Subagent는 메인 Claude(오케스트레이터)가 제한된 범위로 작업을 위임할 수 있는 프로세스입니다. 백그라운드나 포어그라운드에서 실행되어 메인 에이전트의 컨텍스트를 확보합니다.
Subagent와 Skills의 결합
Subagent는 Skills의 하위 집합을 실행할 수 있으며, 특정 도구 권한으로 샌드박스화할 수 있습니다.
# Subagent 구조 예시
~/.claude/agents/
planner.md # 기능 구현 계획
architect.md # 시스템 설계 결정
tdd-guide.md # 테스트 주도 개발
code-reviewer.md # 품질/보안 검토
security-reviewer.md # 취약점 분석
build-error-resolver.md # 빌드 오류 해결
e2e-runner.md # E2E 테스트
refactor-cleaner.md # 불필요한 코드 제거각 Subagent에 허용된 도구, MCP, 권한을 설정하여 적절한 범위를 지정하세요.
4. Rules와 Memory: AI의 나침반
.rules 폴더에는 Claude가 항상 따라야 할 베스트 프랙티스가 담긴 .md 파일이 있습니다.
두 가지 접근법
- 단일 CLAUDE.md: 모든 것을 한 파일에 (사용자 또는 프로젝트 레벨)
- Rules 폴더: 관심사별로 그룹화된 모듈식
.md파일
~/.claude/rules/
security.md # 하드코딩된 비밀 금지, 입력 검증
coding-style.md # 불변성, 파일 구조
testing.md # TDD 워크플로우, 80% 커버리지
git-workflow.md # 커밋 포맷, PR 프로세스
agents.md # Subagent 위임 시점
performance.md # 모델 선택, 컨텍스트 관리Rules 예시
- 코드베이스에 이모지 사용 금지
- 프론트엔드에서 보라색 계열 자제
- 배포 전 항상 코드 테스트
- 메가 파일보다 모듈식 코드 우선
- console.log 절대 커밋 금지
5. MCPs (Model Context Protocol): 외부 서비스 연결
MCP는 Claude를 외부 서비스에 직접 연결합니다. API의 대체가 아니라, 프롬프트 기반 래퍼로 정보 탐색에 더 많은 유연성을 제공합니다.
실전 예시
Supabase MCP: Claude가 SQL을 직접 업스트림에서 실행하고 특정 데이터를 가져올 수 있습니다. 복사-붙여넣기 없이!
Chrome in Claude: Claude가 브라우저를 자율적으로 제어하여 작동 방식을 확인할 수 있는 내장 플러그인 MCP입니다.
중요: 컨텍스트 윈도우 관리
MCP 선택에 신중하세요. 사용하지 않는 모든 것은 비활성화하세요.
- 모든 MCP를 사용자 설정에 보관하되, 사용하지 않는 것은 비활성화
/plugins로 이동하여 스크롤하거나/mcp실행
압축 전 200k 컨텍스트 윈도우가 너무 많은 도구를 활성화하면 70k로 줄어들 수 있습니다. 성능이 크게 저하됩니다.
경험 법칙
- 설정에 20-30개 MCP 보유
- 활성화는 10개 미만 / 활성 도구 80개 미만 유지
6. Plugins: 쉬운 설치를 위한 패키징
플러그인은 지루한 수동 설정 대신 쉬운 설치를 위해 도구를 패키징합니다. 플러그인은 스킬 + MCP 결합이거나 훅/도구 번들일 수 있습니다.
플러그인 설치
# 마켓플레이스 추가
claude plugin marketplace add https://github.com/mixedbread-ai/mgrep
# Claude 열기, /plugins 실행, 새 마켓플레이스 찾기, 설치LSP 플러그인: 편집기 없이도 인텔리센스
에디터 외부에서 Claude Code를 자주 실행한다면 특히 유용합니다. Language Server Protocol은 IDE 없이도 실시간 타입 체킹, go-to-definition, 인텔리전트 완성을 제공합니다.
# 활성화된 플러그인 예시
typescript-lsp@claude-plugins-official # TypeScript 인텔리전스
pyright-lsp@claude-plugins-official # Python 타입 체킹
hookify@claude-plugins-official # 대화형 Hook 생성
mgrep@Mixedbread-Grep # ripgrep보다 나은 검색MCP와 같은 경고: 컨텍스트 윈도우를 주시하세요.
7. Tips & Tricks: 생산성 극대화
키보드 단축키
- Ctrl+U: 전체 라인 삭제 (백스페이스 스팸보다 빠름)
- !: 빠른 bash 명령어 프리픽스
- @: 파일 검색
- /: 슬래시 명령어 시작
- Shift+Enter: 다중 라인 입력
- Tab: 씽킹 디스플레이 토글
- Esc Esc: Claude 중단 / 코드 복원
병렬 워크플로우
/fork: 겹치지 않는 작업을 병렬로 수행하기 위해 대화를 포크합니다. 큐에 메시지를 쌓는 대신!
Git Worktrees: 충돌 없이 병렬 Claude를 위해. 각 worktree는 독립적인 체크아웃입니다.
git worktree add ../feature-branch feature-branch
# 이제 각 worktree에서 별도의 Claude 인스턴스 실행tmux로 장시간 실행 명령어 관리
Claude가 실행하는 로그/bash 프로세스를 스트리밍하고 모니터링합니다.
tmux new -s dev
# Claude가 여기서 명령어 실행, detach/reattach 가능
tmux attach -t dev프론트엔드와 백엔드 서버를 실행하고 tmux 세션에 연결하여 로그를 모니터링할 수 있습니다.
mgrep > grep
mgrep은 ripgrep/grep의 대대적인 개선입니다. 플러그인 마켓플레이스를 통해 설치 후 /mgrep 스킬을 사용하세요. 로컬 검색과 웹 검색 모두 가능합니다.
mgrep "function handleSubmit" # 로컬 검색
mgrep --web "Next.js 15 app router changes" # 웹 검색기타 유용한 명령어
- /rewind: 이전 상태로 돌아가기
- /statusline: 브랜치, 컨텍스트 %, todos로 커스터마이즈
- /checkpoints: 파일 레벨 실행 취소 포인트
- /compact: 수동으로 컨텍스트 압축 트리거
8. GitHub Actions CI/CD
GitHub Actions로 PR에 코드 리뷰를 설정하세요. 설정하면 Claude가 PR을 자동으로 리뷰합니다.
9. Sandboxing
위험한 작업에는 샌드박스 모드를 사용하세요. Claude가 실제 시스템에 영향을 주지 않고 제한된 환경에서 실행됩니다.
반대로: --dangerously-skip-permissions를 사용하면 Claude를 자유롭게 풀어줄 수 있지만, 조심하지 않으면 파괴적일 수 있습니다.
10. 에디터 선택
에디터가 필수는 아니지만 Claude Code 워크플로우에 긍정적 또는 부정적 영향을 줄 수 있습니다. Claude Code는 모든 터미널에서 작동하지만, 유능한 에디터와 페어링하면 실시간 파일 추적, 빠른 탐색, 통합 명령 실행이 가능합니다.
Zed (Affaan의 선택)
Rust 기반 에디터로 가볍고, 빠르고, 고도로 커스터마이징 가능합니다.
Zed가 Claude Code와 잘 맞는 이유:
- Agent Panel 통합: Claude가 편집하는 파일을 실시간으로 추적. 에디터를 떠나지 않고 파일 간 이동
- 성능: Rust로 작성되어 즉시 열리고 대형 코드베이스도 지연 없이 처리
- CMD+Shift+R 명령 팔레트: 커스텀 슬래시 명령어, 디버거, 도구에 검색 가능한 UI로 빠르게 접근
- 최소 리소스 사용: 무거운 작업 중 Claude와 시스템 리소스 경쟁 없음
- Vim 모드: 완전한 vim 키바인딩 지원
- Ctrl + G: Claude가 현재 작업 중인 파일을 Zed에서 빠르게 열기
추천 설정:
- 화면 분할: 한쪽에 Claude Code 터미널, 다른 쪽에 에디터
- 자동 저장: Claude의 파일 읽기가 항상 최신이도록 활성화
- Git 통합: 에디터의 git 기능으로 커밋 전 Claude의 변경사항 검토
- 파일 워처: 대부분의 에디터가 변경된 파일을 자동 리로드, 활성화 확인
VSCode / Cursor
역시 훌륭한 선택입니다. 터미널 포맷으로 사용 가능하며, \ide를 사용하여 LSP 기능으로 에디터와 자동 동기화됩니다 (플러그인으로 어느 정도 중복). 또는 에디터와 더 통합되고 매칭되는 UI가 있는 확장 프로그램을 선택할 수 있습니다.
Affaan의 실제 설정
활성화된 플러그인 (한 번에 4-5개만)
ralph-wiggum@claude-code-plugins # 루프 자동화
frontend-design@claude-code-plugins # UI/UX 패턴
commit-commands@claude-code-plugins # Git 워크플로우
security-guidance@claude-code-plugins # 보안 체크
pr-review-toolkit@claude-code-plugins # PR 자동화
typescript-lsp@claude-plugins-official # TS 인텔리전스
hookify@claude-plugins-official # Hook 생성
code-simplifier@claude-plugins-official
feature-dev@claude-code-plugins
explanatory-output-style@claude-code-plugins
code-review@claude-code-plugins
context7@claude-plugins-official # 라이브 문서
pyright-lsp@claude-plugins-official # Python 타입
mgrep@Mixedbread-Grep # 향상된 검색MCP 서버 (사용자 레벨 설정)
{
"github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"] },
"firecrawl": { "command": "npx", "args": ["-y", "firecrawl-mcp"] },
"supabase": {
"command": "npx",
"args": ["-y", "@supabase/mcp-server-supabase@latest", "--project-ref=YOUR_REF"]
},
"memory": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-memory"] },
"sequential-thinking": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
},
"vercel": { "type": "http", "url": "https://mcp.vercel.com" },
"railway": { "command": "npx", "args": ["-y", "@railway/mcp-server"] },
"cloudflare-docs": { "type": "http", "url": "https://docs.mcp.cloudflare.com/mcp" },
"clickhouse": { "type": "http", "url": "https://mcp.clickhouse.cloud/mcp" },
"magic": { "command": "npx", "args": ["-y", "@magicuidesign/mcp@latest"] }
}핵심: 14개 MCP를 설정했지만 프로젝트당 5-6개만 활성화합니다. 컨텍스트 윈도우 건강 유지!
프로젝트별 비활성화 (컨텍스트 윈도우 관리)
# ~/.claude.json의 projects.[path].disabledMcpServers에
disabledMcpServers: [
"playwright",
"cloudflare-workers-builds",
"cloudflare-workers-bindings",
"cloudflare-observability",
"cloudflare-docs",
"clickhouse",
"AbletonMCP",
"context7",
"magic"
]핵심 Hooks
{
"PreToolUse": [
// 장시간 실행 명령어에 tmux 리마인더
{ "matcher": "npm|pnpm|yarn|cargo|pytest", "hooks": ["tmux reminder"] },
// 불필요한 .md 파일 생성 차단
{ "matcher": "Write && .md file", "hooks": ["block unless README/CLAUDE"] },
// git push 전 검토
{ "matcher": "git push", "hooks": ["open editor for review"] }
],
"PostToolUse": [
// Prettier로 JS/TS 자동 포맷
{ "matcher": "Edit && .ts/.tsx/.js/.jsx", "hooks": ["prettier --write"] },
// 편집 후 TypeScript 체크
{ "matcher": "Edit && .ts/.tsx", "hooks": ["tsc --noEmit"] },
// console.log 경고
{ "matcher": "Edit", "hooks": ["grep console.log warning"] }
],
"Stop": [
// 세션 종료 전 console.log 감사
{ "matcher": "*", "hooks": ["check modified files for console.log"] }
]
}커스텀 상태 표시줄
사용자, 디렉토리, dirty 인디케이터가 있는 git 브랜치, 남은 컨텍스트 %, 모델, 시간, todo 카운트 표시
Rules 구조
~/.claude/rules/
security.md # 필수 보안 체크
coding-style.md # 불변성, 파일 크기 제한
testing.md # TDD, 80% 커버리지
git-workflow.md # Conventional commits
agents.md # Subagent 위임 규칙
patterns.md # API 응답 포맷
performance.md # 모델 선택 (Haiku vs Sonnet vs Opus)
hooks.md # Hook 문서Subagents
~/.claude/agents/
planner.md # 기능 분해
architect.md # 시스템 설계
tdd-guide.md # 테스트 우선 작성
code-reviewer.md # 품질 검토
security-reviewer.md # 취약점 스캔
build-error-resolver.md
e2e-runner.md # Playwright 테스트
refactor-cleaner.md # 불필요한 코드 제거
doc-updater.md # 문서 동기화 유지핵심 교훈
- 과도하게 복잡하게 만들지 마세요 - 설정을 아키텍처가 아닌 파인튜닝처럼 다루세요
- 컨텍스트 윈도우는 소중합니다 - 사용하지 않는 MCP와 플러그인 비활성화
- 병렬 실행 - 대화 포크, git worktrees 사용
- 반복 작업 자동화 - 포매팅, 린팅, 리마인더에 Hooks 사용
- Subagent 범위 지정 - 제한된 도구 = 집중된 실행
참고 자료
- Plugins Reference
- Hooks Documentation
- Checkpointing
- Interactive Mode
- Memory System
- Subagents
- MCP Overview
이 글은 @affaanmustafa의 X 스레드를 바탕으로 작성되었습니다. 더 자세한 내용은 원문을 참고하세요.
Note: 이 가이드는 세부 사항의 일부만 다룹니다. 관심이 있다면 저자가 특정 주제에 대한 추가 포스트를 작성할 수도 있습니다.