GYMCODING

Claude Code 폴더 설정 가이드: CLAUDE.md·Skills·Agents·Hooks 실전 예시

Claude Code 설정을 처음 시작하는 분을 위한 실전 가이드입니다. CLAUDE.md, Skills, Agents, Hooks 폴더 구조와 복붙 예시를 단계별로 정리합니다.

이런 분을 위한 글입니다

  • Claude Code에서 같은 설명을 반복하고 있는 분
  • CLAUDE.md·Skills·Agents·Hooks를 실제 프로젝트에 적용하고 싶은 분

읽고 나면 이렇게 달라집니다

  • 최소 폴더 구조와 파일을 복사해 바로 적용한다
  • 프로젝트 지침·반복 업무·전문 역할·자동 검사를 정확히 구분한다

Claude Code를 열 때마다 프로젝트 목적, 작업 규칙, 금지사항을 다시 설명하고 있나요? 프롬프트를 더 길게 쓰기 전에 Claude가 일할 환경부터 만들어보세요.

이 글에서는 복잡한 설정을 모두 다루지 않습니다. 체감이 큰 CLAUDE.md, Skills, Agents, Hooks 네 가지만 직접 만들어봅니다.

3줄 요약

  • CLAUDE.md에는 Claude가 항상 알아야 할 프로젝트 정보를 적습니다.
  • Skills와 Agents에는 반복 절차와 전문 역할을 분리합니다.
  • Hooks에는 특정 순간 반드시 실행할 검사를 연결합니다.

완성하면 무엇이 달라질까요?

  • 프로젝트를 매번 처음부터 설명하지 않습니다.
  • 반복 프롬프트를 Skill로 재사용합니다.
  • 리뷰와 조사를 전문 Agent에게 맡깁니다.
  • 파일 수정 후 포맷팅 같은 검사를 자동화합니다.

1. 네 가지 설정부터 구분하세요

설정쉽게 말하면사용 시점
CLAUDE.md프로젝트 업무 지시서Claude가 항상 알아야 할 정보가 있을 때
Skills반복 업무 매뉴얼같은 절차를 여러 번 사용할 때
Agents역할별 AI 팀원리뷰·조사 등 독립적인 역할이 필요할 때
Hooks자동 안전장치특정 순간 검사나 명령을 실행해야 할 때

가장 흔한 실수는 모든 내용을 CLAUDE.md에 넣는 것입니다. 항상 필요한 원칙만 남기고, 필요할 때 실행할 절차는 Skill로 분리하세요.

이 글에서 말하는 Agent는 Claude Code 공식 문서의 custom subagent를 뜻합니다. 프로젝트별 정의 파일은 .claude/agents/에 둡니다.

2. 최소 폴더 구조 만들기

프로젝트 루트에서 아래 구조를 만듭니다.

your-project/
├── CLAUDE.md
├── CLAUDE.local.md
├── .gitignore
└── .claude/
    ├── settings.json
    ├── settings.local.json
    ├── agents/
    │   └── code-reviewer.md
    └── skills/
        └── project-check/
            └── SKILL.md
  • .claude/settings.json: 팀과 공유할 프로젝트 설정
  • .claude/settings.local.json: 내 컴퓨터에서만 사용할 프로젝트 설정
  • CLAUDE.local.md: 개인 작업 방식처럼 공유하지 않을 지침

Hooks는 반드시 .claude/hooks/ 폴더에 넣는 기능이 아닙니다. Hook 연결은 .claude/settings.json에서 설정합니다. 별도 스크립트가 필요할 때만 원하는 위치에 스크립트 파일을 둡니다.

3. 실습 ① CLAUDE.md 만들기

프로젝트 루트에 CLAUDE.md를 만들고 아래 템플릿을 복사합니다.

# Project Guide

## 프로젝트 개요

이 프로젝트는 [프로젝트 목적]을 위한 프로젝트입니다.
주요 사용자는 [사용자 유형]이며,
핵심 목표는 [사용자가 얻어야 할 결과]입니다.

## 기술 스택

- Frontend: [예: Next.js]
- Styling: [예: Tailwind CSS]
- Database: [예: Supabase]
- Deploy: [예: Vercel]

## 주요 폴더

- `/app`: 페이지와 라우팅
- `/components`: 재사용 컴포넌트
- `/lib`: 유틸리티와 외부 서비스 연결
- `/public`: 이미지와 정적 파일

## 작업 원칙

- 작업 전 관련 파일과 기존 구조를 먼저 확인한다.
- 현재 디자인과 코드 스타일을 유지한다.
- 불필요한 라이브러리를 추가하지 않는다.
- 요청과 관계없는 리팩터링은 하지 않는다.

## 금지사항

- 환경변수와 비밀키를 출력하지 않는다.
- 승인 없이 배포하지 않는다.
- 데이터베이스 구조를 임의로 변경하지 않는다.
- 기존 사용자 작업을 임의로 삭제하지 않는다.

## 작업 후 확인

- 관련 테스트를 실행한다.
- 린트와 빌드 오류를 확인한다.
- 수정한 파일과 이유를 요약한다.
- 확인하지 못한 항목은 명확하게 밝힌다.

## 응답 방식

- 결론을 먼저 말한다.
- 변경한 파일과 변경 이유를 설명한다.
- 위험하거나 되돌리기 어려운 작업은 먼저 확인한다.

가장 빠른 시작: /init 사용하기

새 프로젝트 폴더에서 Claude Code를 실행한 뒤 /init을 입력합니다.

cd my-project
claude
/init

생성된 CLAUDE.md를 그대로 끝내지 말고 아래 프롬프트로 보완하세요.

/init으로 만든 CLAUDE.md를 확인하고 아래 내용을 보완해줘.

1. 이 프로젝트의 목적
2. 주요 폴더의 역할
3. 작업할 때 지켜야 할 규칙
4. 절대 수정하면 안 되는 파일
5. 작업 후 실행할 테스트와 빌드 명령

잘 쓰는 기준

  • 회사 소개나 긴 기획 문서는 docs/에 두고 링크만 연결합니다.
  • “잘 만들어줘” 대신 “수정 후 npm run build를 실행한다”처럼 확인 가능한 규칙을 씁니다.
  • 자주 바뀌는 정보는 고정 지침에 넣지 않습니다.
  • 반복 절차가 길어지면 Skill로 옮깁니다.

4. 실습 ② Skill 만들기

매번 “작업이 제대로 끝났는지 확인해줘”라고 입력한다면 완료 점검 Skill부터 만들어보세요.

파일 위치:

.claude/skills/project-check/SKILL.md

파일 내용:

---
name: project-check
description: 변경 작업을 완료하기 전에 프로젝트 규칙, 오류, 테스트 여부를 점검합니다.
---

# Project Check

변경사항을 완료하기 전에 다음 순서로 확인합니다.

1. 요청한 기능이 실제로 반영되었는지 확인합니다.
2. 관련 테스트를 실행합니다.
3. 린트와 빌드 오류를 확인합니다.
4. 보안 또는 개인정보 노출 위험을 확인합니다.
5. 확인한 내용과 남은 위험을 요약합니다.

검증하지 않은 항목을 완료했다고 말하지 않습니다.

프로젝트 전용 Skill과 공통 Skill 구분하기

# 이 프로젝트에서만 사용
my-project/
└── .claude/
    └── skills/
        └── landing-copy/
            └── SKILL.md

# 모든 프로젝트에서 사용
~/.claude/
└── skills/
    └── writing-check/
        └── SKILL.md
  • 특정 브랜드나 프로젝트에서만 쓰는 업무 → .claude/skills/
  • 모든 프로젝트에서 반복하는 업무 → ~/.claude/skills/

Skill은 Claude가 설명을 보고 필요할 때 사용할 수 있고 /project-check처럼 직접 호출할 수도 있습니다.

직군별 Skill 예시

  • 1인 사업자: 상품 설명 검수, 고객 문의 답변 작성
  • 마케터: 블로그 SEO 점검, 캐러셀 구성, 랜딩페이지 CTA 검토
  • 개발자: 테스트 실행, 배포 전 점검, PR 리뷰

5. 실습 ③ Agent 만들기

Agent에는 멋진 직함보다 검토 기준과 출력 방식이 필요합니다.

파일 위치:

.claude/agents/code-reviewer.md

파일 내용:

---
name: code-reviewer
description: 코드 변경사항을 기능, 보안, 복잡성, 테스트 관점에서 검토합니다.
tools: Read, Grep, Glob, Bash
model: inherit
---

# Code Reviewer

직접 코드를 수정하지 않고 변경사항을 검토합니다.

## 검토 기준

1. 요청한 기능과 구현이 일치하는가
2. 기존 구조와 스타일을 따르는가
3. 불필요한 복잡성이나 중복이 있는가
4. 비밀키, 개인정보, 권한 관련 위험이 있는가
5. 테스트가 핵심 동작을 검증하는가

## 출력 형식

- 먼저 배포를 막아야 할 문제를 제시합니다.
- 각 문제에 파일 위치, 영향, 수정 방향을 적습니다.
- 문제가 없다면 확인한 범위와 남은 위험을 적습니다.

비개발자용 SEO Agent 예시

파일 위치:

.claude/agents/seo-checker.md

파일 내용:

---
name: seo-checker
description: 블로그 글을 검색 의도, 제목, 구조, 내부 링크 관점에서 검토합니다.
tools: Read, Grep, Glob
model: inherit
---

# SEO Checker

글을 직접 수정하지 않고 아래 항목을 검토합니다.

## 검토 기준

1. 제목에 핵심 검색어가 자연스럽게 포함되어 있는가
2. 첫 문단에서 검색 질문에 바로 답하는가
3. H2 제목만 읽어도 글의 흐름이 이해되는가
4. 예시와 근거가 충분한가
5. 관련 글로 연결할 내부 링크가 있는가

## 출력 형식

- 가장 먼저 고쳐야 할 문제 3개
- 각 문제의 영향
- 수정 문장 예시
- 발행 전 체크리스트

비개발자라면 같은 구조로 copy-reviewer, seo-checker, researcher를 만들 수 있습니다.

6. 실습 ④ Hook 연결하기

Hook은 Claude Code의 특정 시점에 명령을 자동 실행합니다. 처음에는 파일 수정 후 포맷터를 실행하는 정도로 시작하세요.

.claude/settings.json 예시:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npm run format"
          }
        ]
      }
    ]
  }
}

복사하기 전에 확인하세요

  1. 프로젝트의 package.jsonformat 명령이 실제로 있는지 확인합니다.
  2. 없다면 프로젝트에서 사용하는 포맷 명령으로 바꿉니다.
  3. Hook이 너무 자주 실행되면 matcher 범위를 좁힙니다.
  4. 데이터 삭제나 배포처럼 위험한 명령은 단순 복사하지 않습니다.

현재 Claude Code는 PreToolUse, PostToolUse, SessionStart, Stop, Notification 외에도 여러 Hook 이벤트를 지원합니다. 처음부터 전부 외울 필요는 없습니다. 공식 Hooks 가이드의 현재 형식을 기준으로 필요한 이벤트만 추가하세요.

7. 로컬 설정과 민감 정보 보호하기

.gitignore에 다음 항목을 추가합니다.

.env
.env.local
.env.production

CLAUDE.local.md
.claude/settings.local.json

node_modules/
.next/
.DS_Store

CLAUDE.local.md 예시

# Local Notes

## 내 로컬 환경

- 개발 서버: http://localhost:3000
- 로컬 DB 포트: 54321
- 테스트 브라우저: Chrome

## 개인 작업 방식

- 디자인 수정 전 `/components` 폴더부터 확인한다.
- 실제 배포는 내가 직접 진행한다.
- 데이터베이스 변경이 필요하면 먼저 나에게 확인한다.

아래 두 파일은 Git에 올리지 않습니다.

CLAUDE.local.md
.claude/settings.local.json

CLAUDE.local.md에도 실제 비밀번호나 API 키를 적지 마세요. Claude가 읽지 못해야 하는 파일은 .claude/settings.json의 권한 규칙으로 제한할 수 있습니다.

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ]
  }
}

8. 내 상황에 맞는 최소 조합

1인 사업자·비개발자

  • CLAUDE.md: 브랜드, 상품, 고객, 금지 표현
  • Skill: 콘텐츠 발행 전 체크
  • Agent: 카피 또는 자료 조사 검토
  • Hook: 익숙해진 뒤 필요한 자동화부터 추가

마케터·초중급 사용자

  • CLAUDE.md: 브랜드 보이스와 채널별 원칙
  • Skill: SEO, 캐러셀, 랜딩페이지 검수
  • Agent: 조사, 카피, 전환 흐름 검토
  • Hook: 결과 포맷 검사 또는 알림

개발자

  • CLAUDE.md: 아키텍처, 코딩 규칙, 검증 명령
  • Skill: 테스트, 배포, PR 검토
  • Agent: 코드 리뷰, 보안, 디버깅
  • Hook: 포맷팅, 위험 명령 차단, 세션 컨텍스트 주입

실전 예시: 마케팅 랜딩페이지 프로젝트

landing-page/
├── CLAUDE.md
├── CLAUDE.local.md
└── .claude/
    ├── settings.json
    ├── agents/
    │   ├── copy-reviewer.md
    │   └── seo-checker.md
    └── skills/
        ├── landing-copy/
        │   └── SKILL.md
        └── publish-check/
            └── SKILL.md
CLAUDE.md
→ 브랜드, 상품, 고객, 금지 표현

landing-copy Skill
→ 헤드라인과 CTA 작성 절차

copy-reviewer Agent
→ 작성된 카피를 독립적으로 검토

seo-checker Agent
→ 제목, H태그, 검색 의도 점검

publish-check Skill
→ 링크, 오탈자, 모바일 화면 확인

PostToolUse Hook
→ 파일 수정 후 포맷터 자동 실행

9. 자주 하는 실수 8가지

  1. CLAUDE.md를 긴 회사 소개서처럼 작성합니다.
  2. 모든 반복 절차를 CLAUDE.md에 넣습니다.
  3. Agent에 역할만 주고 검토 기준을 적지 않습니다.
  4. Hook 스크립트만 만들고 설정에 연결하지 않습니다.
  5. 존재하지 않는 명령을 예제 그대로 복사합니다.
  6. Hook을 너무 넓게 연결해 작업이 느려집니다.
  7. 로컬 설정과 민감 정보를 Git에 올립니다.
  8. 사용하지 않을 폴더까지 처음부터 모두 만듭니다.

Claude에게 처음 시킬 프롬프트

이 프로젝트에서 Claude Code를 반복적으로 사용하려고 해.

현재 파일과 폴더를 먼저 확인하고 다음 설정을 제안해줘.

1. CLAUDE.md에 항상 넣어야 할 프로젝트 정보
2. Skill로 분리하면 좋은 반복 업무
3. Agent로 만들면 좋은 전문 역할
4. Hook으로 자동화하면 좋은 검사

바로 파일을 만들지 말고, 최소 설정안과 이유를 먼저 보여줘.
이 프로젝트의 CLAUDE.md와 .claude 폴더를 확인해줘.

다음 기준으로 현재 설정을 진단해줘.

1. 오래되거나 충돌하는 지침
2. CLAUDE.md에서 Skill로 옮겨야 할 반복 절차
3. 역할을 분리하면 좋은 Agent
4. 자동으로 실행하면 좋은 검사
5. Git에 올라가면 안 되는 로컬 설정

문제, 영향, 수정 예시 순서로 정리해줘.

10. 최종 체크리스트

# Claude Code 최소 세팅 체크리스트

## CLAUDE.md
- [ ] 프로젝트 목적과 주요 사용자가 적혀 있다.
- [ ] 작업 원칙과 금지사항이 구체적이다.
- [ ] 테스트·린트·빌드처럼 확인할 명령이 적혀 있다.

## Skill
- [ ] 자주 반복하는 업무 하나를 Skill로 분리했다.
- [ ] 언제 사용하는 Skill인지 description에 적었다.
- [ ] 실행 순서와 완료 기준이 명확하다.

## Agent
- [ ] Agent가 맡을 역할이 한 가지로 명확하다.
- [ ] 검토 기준과 출력 형식이 적혀 있다.
- [ ] 필요한 도구만 사용할 수 있게 설정했다.

## Hook
- [ ] Hook이 .claude/settings.json에 등록되어 있다.
- [ ] 실행할 명령이 프로젝트에 실제로 존재한다.
- [ ] 위험한 명령이나 과도한 반복 실행이 없는지 확인했다.

## 보안과 최종 확인
- [ ] CLAUDE.local.md와 settings.local.json을 Git에서 제외했다.
- [ ] .env와 비밀키 파일의 읽기 권한을 제한했다.
- [ ] Claude Code를 다시 열어 설정이 동작하는지 확인했다.

처음부터 모든 설정을 만들 필요는 없습니다. 오늘은 CLAUDE.md를 작성하고 가장 자주 반복하는 업무 하나만 Skill로 만들어보세요. 반복 설명 하나를 없애는 것부터가 제대로 된 자동화입니다.

자주 묻는 질문

짐코딩 뉴스레터
AI 개발·클로드 코드 실전 노하우를 이메일로 받아보세요. 도움 되는 글만.

구독하면 마케팅 정보 수신 및 개인정보처리방침에 따른 이메일 수집·이용에 동의하게 됩니다. 언제든 수신거부할 수 있어요.