본문으로 건너뛰기
H
Harness 101
학습 경로/Act 2 — 성장/08. Rules
Knowledge·중급·45분

350줄 괴물

“불필요한 Knowledge로 Context를 오염시키지 않는다”

Rules — CLAUDE.md를 해체하다

이전 이야기에서: 지민은 Background Tasks로 빌드와 코딩을 동시에 처리하게 됐다. 프로젝트가 빠르게 성장했다. 파일 50개에서 100개로. 그리고 CLAUDE.md도 함께 자라고 있었다...

Harness = Tools + Knowledge + Context + Permissions

Rules는 비대해진 Knowledge를 주제별로 해체한다. "불필요한 Knowledge로 Context를 오염시키지 않는다"


탄생 배경: "350줄 괴물"

CLAUDE.md는 완벽한 해결책처럼 보였다. 프로젝트 규칙을 한 곳에 모아서 Claude에게 주입.

3개월이 지나자 지민은 CLAUDE.md를 열어보고 당황했다:

# My Project

## About This Project (10줄)
## Tech Stack (15줄)
## Coding Style
  - 불변성 규칙 (8줄)
  - 파일 크기 제한 (5줄)
  - 에러 핸들링 (10줄)
  - 네이밍 컨벤션 (12줄)
## Testing Standards
  - TDD 규칙 (15줄)
  - 커버리지 기준 (8줄)
  - E2E 테스트 (10줄)
## Security Guidelines
  - 시크릿 관리 (10줄)
  - 입력 검증 (8줄)
  - OWASP 체크리스트 (20줄)
## Git Workflow
  - 커밋 형식 (10줄)
  - PR 프로세스 (15줄)
  - 브랜치 전략 (12줄)
## Agent Orchestration
  - 언제 planner를 쓸지 (10줄)
  - 언제 code-reviewer를 쓸지 (8줄)
## Performance
  - 모델 선택 기준 (10줄)
  - 컨텍스트 관리 (8줄)
...

총 350줄. 이런 CLAUDE.md가 도처에 퍼졌다.

문제가 여러 개였다:

문제 1: 찾기 힘들다 "보안 규칙이 어디 있었지?" → Ctrl+F로 찾아야 함

문제 2: 유지보수가 힘들다 보안 규칙만 업데이트하려 해도 350줄 파일을 열어야 함

문제 3: 컨텍스트 낭비 planner는 보안 규칙이 필요 없다. 근데 전부 읽는다. Claude의 컨텍스트 윈도우를 불필요한 정보로 채운다.

문제 4: 언어/프레임워크별 차이 TypeScript 프로젝트와 Python 프로젝트는 규칙이 다른데, 한 파일에 다 넣으면 충돌이 생긴다.

"규칙을 주제별로 나누고, Claude가 필요한 것만 읽게 하면 어떨까?"


해결책의 탄생: "규칙 파일을 분리하자"

Harness Knowledge 레이어를 다시 보면:

Knowledge 레이어의 진화:
  1단계: CLAUDE.md — 항상 활성화 (무조건 읽힘)
  2단계: Skills    — 명시적 요청 시 활성화 (/commit 같은 명령)
  3단계: Rules     — 맥락 기반 활성화 (Claude가 필요하다고 판단할 때)

.claude/rules/ 폴더에 파일을 나눠서 넣으면, Claude가 맥락에 따라 필요한 파일만 선택적으로 로드한다.

.claude/rules/
  coding-style.md       ← 불변성, 파일 크기, 네이밍
  testing.md            ← TDD, 커버리지 기준
  security.md           ← 시크릿 관리, OWASP 체크
  git-workflow.md       ← 커밋 형식, PR 프로세스
  agents.md             ← 에이전트 오케스트레이션 규칙
  development-workflow.md ← 전체 개발 프로세스
  performance.md        ← 모델 선택, 컨텍스트 관리

이제 CLAUDE.md는 가볍다:

# My Project
Next.js + TypeScript 프로젝트.
규칙은 .claude/rules/ 참조.