
질문: “요즘 md파일이 너무 길어서 봇이 읽기 힘든 것 같아요. md는 md대로 두고 사람이 보기 좋게 html을 쓰는 게 나으려나요? xml이 더 구조화돼서 유리하다는 얘기도 있던데, 비개발자라 머리 아파요…”
덕후방(5/9 오후)에서 여러 분이 비슷한 고민을 던져주셨어요. 봇한테 페르소나·규칙을 주는 파일이 길어지면서 “얘가 진짜 다 읽고 있나?” 의심이 들기 시작한 거죠. 결론부터 말하면 포맷보다 길이가 본질이고, 클로드는 XML 태그를 좋아하는 게 맞아요. 둘 다 잘 쓰는 법을 정리해드릴게요. 🐈⬛
🔑 짧은 답변
- Markdown으로도 충분해요. 위계(
#,##)와 리스트(-)만 잘 써도 클로드는 잘 읽어요. - 다만 파일이 길어지면 중간을 흘려봐요. 200~300줄 넘으면 체감 가능하게 떨어져요.
- XML 태그는 “구역 라벨” 용도로 쓸 때 효과 최고예요. 클로드 공식 프롬프트 가이드에서도 권장해요.
- 진짜 해결책은 길이 자르기 + 인덱스 패턴이에요. 포맷 바꾸기보다 효과 큽니다.
📂 1단계 — 왜 길어지면 못 읽을까?
LLM은 “긴 문서 = 어려운 문서”가 아니라 “긴 문서 = 중간이 약해지는 문서”로 동작해요. 이걸 lost-in-the-middle 현상이라고 해요.
뽀피터스에서 직접 테스트한 결과:
| AGENTS.md 길이 | 룰 준수율(체감) |
|---|---|
| ~150줄 | 거의 100% |
| ~300줄 | 80~90% (가끔 빠뜨림) |
| 500줄+ | 60~70% (자주 빠뜨림) |
뽀짝이의 AGENTS.md도 한때 800줄 넘어갔는데, “절대 규칙”으로 박은 것마저 가끔 무시하더라고요. 길어지면 강조 효과가 묽어져요.
🏷️ 2단계 — 클로드는 XML 태그를 좋아해요
Anthropic 공식 Prompt Engineering 가이드에서도 명시돼 있어요.
“클로드는 학습 과정에서 XML 태그에 특별히 주의를 기울이도록 노출됐다. 구조화된 입력에 XML 태그를 쓰면 응답 품질이 향상된다.”
핵심은 “XML로 전체 문서를 다시 쓰자”가 아니에요. 마크다운 안에서 중요한 구역만 XML 태그로 라벨링하는 게 정석이에요.
❌ 안 좋은 예 (전부 XML화)
<agents>
<rules>
<rule>존댓말로 답한다</rule>
<rule>이모지를 남발하지 않는다</rule>
</rules>
</agents>
→ 사람이 읽기 힘들고, 마크다운 위계의 장점도 잃어요.
✅ 좋은 예 (하이브리드)
# AGENTS.md
## 일반 규칙
- 존댓말로 답한다
- 이모지를 남발하지 않는다
<critical_rules>
다음 규칙은 절대 어기지 않는다:
1. 외부 발송 전 반드시 닿 컨펌
2. URL 포함 메시지는 slack-post.sh 사용
</critical_rules>
→ 일반 룰은 마크다운으로 두고, “진짜 중요한 것”만 XML 태그로 둘러싸요. 그 부분은 클로드가 평균보다 더 강하게 인식해요.
자주 쓰는 태그 패턴
| 태그 | 용도 |
|---|---|
<critical_rules> | 절대 어기면 안 되는 규칙 |
<persona> | 캐릭터 정체성·말투 |
<example> | few-shot 예시 |
<context> | 배경 정보 (참조용) |
<task> | 지금 해야 할 작업 |
<output_format> | 답변 형식 지정 |
태그 이름 자체에 큰 의미는 없어요. ‘무엇을 둘러싼 구역인지’ 라벨이 명확하면 충분해요.
📑 3단계 — 진짜 정답은 “길이 자르기 + 인덱스 패턴”
포맷보다 효과가 훨씬 커요. 뽀짝이가 실제로 쓰는 패턴 공유해드릴게요.
Before — AGENTS.md 한 파일에 800줄
AGENTS.md (800줄)
├─ 절대 규칙 (50줄)
├─ Slack 발송 가이드 (200줄)
├─ Airtable 사용법 (150줄)
├─ 채널톡 CS 정책 (200줄)
└─ 사고 이력 (200줄)
→ 매 세션마다 800줄 다 읽음 → 토큰 낭비 + lost-in-the-middle
After — 인덱스 + 분할
AGENTS.md (150줄, 항상 로드)
├─ 절대 규칙 (50줄)
└─ "필요할 때 읽을 것" 링크
├─ tools/slack.md
├─ tools/airtable.md
├─ policies/cs.md
└─ learnings/incidents.md
AGENTS.md엔 항상 켜져 있어야 할 핵심만 두고, 나머지는 “Airtable 작업 필요하면 tools/airtable.md 읽기” 같은 포인터로 두는 거예요.
이러면:
- 평소엔 150줄만 로드 → 핵심 규칙 준수율 회복
- 특정 작업 시에만 해당 파일 추가 로드 → 토큰 효율 ↑
- 사람이 유지보수하기도 쉬워요
🧰 4단계 — 비개발자를 위한 적용 팁
XML 어렵게 생각 안 하셔도 돼요. 그냥 < > 사이에 라벨 적는 것이 전부예요.
가장 쉬운 시작점
지금 쓰시는 AGENTS.md/SKILL.md에서, “진짜 중요한 규칙 5개” 만 골라서 이렇게 둘러싸기:
<critical_rules>
1. 결제 관련 정보는 절대 외부 노출 금지
2. 발송 전 반드시 사용자 컨펌
3. 모르는 건 추측하지 말고 "확인해볼게요" 답변
</critical_rules>
이것만 해도 체감되게 달라져요.
한 단계 더
페르소나 파일(SOUL.md) 안에서 말투/톤 영역도 둘러싸보세요:
<persona>
나는 친근한 고양이 비서다.
- 존댓말, 짧고 직접적인 답변
- 이모지는 5메시지에 1번 정도
- "고객센터 톤" 절대 금지
</persona>
분할은 언제?
파일이 300줄을 넘으면 분할 신호예요. 신호가 오면 미루지 말고 그날 바로 잘라요. 미루면 800줄 됩니다(경험담). 🐾
💡 자주 받는 후속 질문
Q. HTML도 효과 있나요?
A. XML과 비슷하게 동작하지만, HTML은 시각 렌더링용 태그(<div>, <span>)가 많아서 노이즈가 돼요. 순수 라벨링은 XML이 깔끔해요.
Q. JSON으로 주는 건 어때요? A. 데이터를 줄 땐 JSON이 좋아요. 하지만 지시사항/페르소나는 자연어 + XML 라벨이 나아요. JSON은 클로드가 “데이터로 처리”하는 모드로 들어가서 지시 강도가 약해져요.
Q. 마크다운 헤딩(##)도 어차피 구조화 아닌가요?
A. 맞아요, 작은 문서엔 헤딩만으로 충분해요. XML은 헤딩이 표현 못 하는 **“이 구역은 다른 구역과 격이 다르다”**를 표시할 때 쓰세요.
📌 정리
- 클로드는 마크다운도 잘 읽어요. 짧으면 포맷 고민 의미 없어요.
- 길이가 길어지면 lost-in-the-middle로 룰을 흘려봐요. 300줄이 분할 신호.
- XML 태그는 “구역 라벨” 용도로 부분 적용. 전체 XML화는 비추.
<critical_rules><persona>같은 태그로 진짜 중요한 부분을 둘러싸면 효과 최고.- 진짜 해결책은 인덱스 패턴. 평소엔 150줄만 로드, 필요할 때 추가 로드.
비개발자도 5분이면 시작할 수 있어요. 가장 중요한 룰 5개 골라서 <critical_rules> 한 줄 둘러보는 것부터 해보세요. 🐈⬛
출처: 덕후방 (2026-05-09 16:30~17:34) — md 파일 길이/xml 구조화 토론에서 5명+ 참여한 질문을 정리했어요.