AI읽는 데 4분

CLAUDE.md 공유용 PR 6개를 닫고 심볼릭 링크로 바꿨다

공통 레포 분리, `@` import, RULE.md를 차례로 걸러냈지만 링크된 규칙의 로드는 아직 확인하지 못했다

한 줄로

회사 프로젝트의 여러 레포가 같은 CLAUDE.md를 쓰게 하려고 공통 레포를 만들고 안내문 PR 6개까지 올렸지만, 모두 닫았다. 지금은 새 레포 한 곳의 최상단에 규칙을 두고, 다른 레포에서는 심볼릭 링크로 그 파일을 가리킨다. 다만 새 세션에서 링크된 규칙이 로드되는지는 아직 확인하지 않았다.

개념

  • CLAUDE.md: Claude Code가 읽는 프로젝트 규칙 파일이다.
  • @ import: CLAUDE.md 안에서 다른 파일을 불러오는 문법이다.
  • .claude/rules/: 규칙을 파일로 나눠 두는 폴더다. paths를 지정하지 않은 규칙은 매 세션 로드된다.
  • 심볼릭 링크: 다른 파일을 가리키는 바로가기 파일이다.

실제로 겪은 것

1. 공통 레포로 분리했다

처음 문제는 병합 부담이었다. 규칙을 고칠 때마다 기존 6개 레포에 각각 병합해야 했다. 그래서 규칙을 공통 레포로 분리하고, 6개 레포에 안내문을 넣는 PR을 올렸다.

2. @ import는 쓰지 않았다

불러오기 문법을 쓰지 않고 안내문을 택한 데는 claude -p로 시험한 결과가 있었다.

  • 프로젝트 밖 파일은 승인 없이 읽히지 않았다.
  • 파일이 없어도 오류가 나지 않았다.

3. 새 레포 최상단으로 옮겼다

이후 레포 구조를 새로 만들었다. 아래 이름은 사내 레포 이름 대신 쓴 일반명이다.

작업 폴더/
├── product-a/
│   ├── product-a-user/
│   └── product-a-admin/
└── product-b/
    ├── product-b-user/
    └── product-b-admin/

안쪽 폴더는 바깥 레포의 .gitignore로 제외하고, 커밋과 push는 레포별로 따로 한다. submodule은 쓰지 않는다.

규칙은 이 새 레포 최상단에 넣기로 했다. 그래서 공통 레포를 가리키던 PR #414, #175, #89, #14, #103, #187을 닫았다. 브랜치는 남겨 뒀다.

4. 복사본 2개를 심볼릭 링크로 바꿨다

바깥 레포 두 곳에 복사본을 두는 대신, 한쪽을 링크로 만들었다.

product-b/CLAUDE.md → ../product-a/CLAUDE.md

대신 제약이 하나 생긴다. 두 레포가 나란히 있어야 링크가 동작한다.

규칙 내용에서 정한 것

  • Jira 접근 방식 삭제: MCP/REST 사용 여부와 API 키 변수는 각자의 PC 설정이라 지웠다.
  • RULE.md는 만들지 않음: 공식 문서에 없는 파일이다. paths 없는 .claude/rules/도 어차피 매 세션 로드되므로 옮겨도 이득이 없다.
  • 세션의 알림 방식: 세션이 누군가에게 알릴 때는 프로젝트 개발 채널에 메시지를 보내고, 본문 아래 줄에 참고 또는 cc로 멘션한다.

삭제 후보로 꼽은 [배정]·[검토 중]·[완료] 형식 약 15줄은 아직 그대로다.

권장했지만 넣지 않은 것

cloudId, 전환 ID(11·21·31·41·2), JQL 주의를 넣는 안은 반영하지 않았다. JQL 주의의 내용은 다음과 같다.

  • 한글 이름으로 JQL을 쓰면 오류 없이 틀린 결과가 나온다. 검토 중을 이름으로 조회하면 0건이었고, ID로 조회하면 23건이었다.
  • 타입 작업과 상태 검토 중은 모두 ID 10188이다.

아직 남은 것

  • 새 세션에서 링크된 규칙이 로드되는지 확인하지 않았다.
  • 기존 6개 레포의 dev에는 launchd 설명이 든 예전 전문이 남아 있다.
  • 공통 레포 삭제 요청이 있었지만 실제 삭제 기록은 없다.
  • 기존 제품 폴더의 CLAUDE.md는 요청대로 지웠다. git에 없는 파일이라 원문은 해당 세션 대화에만 있다.

새 경로로 옮기면서 따라오지 않은 것도 있다.

  • 티켓 선행 생성 규칙은 기존 작업 폴더 최상단의 CLAUDE.md에 있어 새 경로에서 로드되지 않는다.
  • install.sh의 복사와 경로→에픽 매핑에 새 경로가 없다.
  • Claude 메모리는 경로별이라 이어지지 않는다.