일기 slecs

사이트별 개발자 지침을 계층화해 중복 제거

목차

모든 claude 호출마다 CLAUDE.md가 로드되는 구조에서, 여러 사이트가 공통 지침을 반복으로 담고 있었다. 이번에 계층화된 cascade 방식을 도입해 토큰 낭비를 줄이고 유지보수를 개선했다.

왜 계층화가 필요했나

우리는 여러 사이트와 환경을 운영하면서 각각이 고유한 CLAUDE.md를 가지고 있었다. 예를 들어:
- 전역 공통 룰 (모든 봇이 따라야 할 기본)
- button 사이트별 특수 지침 (특정 사이트에만 적용)
- 하위 프로젝트별 상세 설정

문제는 이 정보들이 각 파일에 분산되어 있으면서도 중복되었다는 점이다. 예를 들어 "출력은 요청된 형식만 낸다"는 규칙이 여러 CLAUDE.md에 써 있었다. 그러면 매 호출마다 더 많은 토큰을 소비할 뿐 아니라, 한 곳을 수정해도 다른 곳이 동기화되지 않아 불일치가 발생했다.

특히 모든 claude 호출이 이 파일들을 읽어야 하기 때문에, 불필요한 내용이 하나 있어도 전체 토큰 비용에 영향을 준다. 토큰 비용의 누적 효과는 생각보다 크다.

계층 구조 도입

이번 변경으로 다음과 같은 우선순위 체계를 만들었다:

레벨 범위 역할 예시
전역 (Global) 모든 봇 공통 룰만 출력 형식, 날짜 기준
사이트별 button 그룹의 각 사이트 사이트 특화 설정 인증 방식, API 엔드포인트
프로젝트별 개별 레포 가장 구체적인 룰 언어, 패턴, 팀 프로세스

더 구체적인 레벨이 상위 레벨을 override한다. 예를 들어 전역에서 "모든 출력은 마크다운"이라 했어도, 특정 프로젝트 CLAUDE.md에서 "이 프로젝트는 JSON 만 출력"이라 하면 그쪽을 따른다.

전역 CLAUDE.md (ops/docs/server-global-CLAUDE.md)
  └─ 사이트별 CLAUDE.md (/opt/button-site-1/.claude/CLAUDE.md)
       └─ 프로젝트 CLAUDE.md (/opt/button-site-1/myrepo/.claude/CLAUDE.md)

이 구조로 각 레벨은 자신에게만 필요한 것만 담고, 나머지는 위에 위임한다.

서버검증과 유지보수

이 변경을 서버에서 직접 검증했다. 실제로 여러 사이트의 봇 호출을 모니터링하면서:
- 각 사이트가 자신의 CLAUDE.md만 필요한 내용으로 줄어들었나
- 전역 변경이 제대로 cascade되었나
- 충돌이나 우선순위 역전은 없었나

이런 점들을 확인했다. 특히 중요한 건, 앞으로 공통 룰을 수정하면 한 군데만 손대도 모든 사이트에 반영된다는 것. 이전처럼 여러 곳을 일일이 찾아다닐 필요가 없다.

일반적인 교훈

이런 계층화 패턴은 문서나 설정 관리에서 자주 나타난다. CI/CD 파이프라인의 base config + env-specific config, terraform의 modules + tfvars, kubernetes의 CRDs + namespace overrides 등. 핵심은:

  • 단일 진실(single source of truth): 공통 부분은 한 곳에만
  • 명확한 우선순위: 어느 것이 어느 것을 덮을지 명시
  • 검증: 계층이 복잡할수록 실제 동작을 확인하는 게 중요

우리의 경우 토큰 비용이 바로 "감지 가능한" 메트릭이었기 때문에, 이 정책이 실제로 얼마나 효율적인지도 측정할 수 있었다. 중복이 줄면 파일 크기가 줄고, 그만큼 토큰 사용량도 감소한다.

button 사이트들 외에 다른 프로젝트도 같은 패턴으로 정리하면 될 것 같다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.