Accept: text/markdown — AI 에이전트가 HTML 대신 마크다운을 받는 시대

9 min read
CloudflareAI AgentMarkdown웹 표준
Accept: text/markdown — AI 에이전트가 HTML 대신 마크다운을 받는 시대

블로그 글 하나를 읽으려고 한다. 본문은 500단어다. 그런데 이 500단어를 감싸고 있는 <div>, <nav>, <header>, <footer>, <script>, 인라인 스타일, 광고 코드, 트래킹 픽셀을 전부 합치면 수만 토큰이 된다. 사람은 브라우저가 렌더링한 결과만 보니 상관없지만, AI 에이전트는 이 HTML을 날것 그대로 삼켜야 한다. 빈 택배 상자 100개를 배송하면서 배송비를 내는 셈이다.

HTML이라는 비싼 포장지

LLM API는 토큰 단위로 과금된다. HTML 태그는 사람에게는 투명하지만, LLM에게는 처리해야 할 입력의 일부다. 블로그 글 하나에서 실제 유용한 콘텐츠가 차지하는 비율은 대략 20% 수준이다. 나머지 80%는 네비게이션, 사이드바, 스크립트, 메타데이터 같은 노이즈다.

에이전트가 하루에 수천 페이지를 크롤링한다면, 이 80%의 낭비는 곧바로 수백 달러의 비용 차이로 이어진다. 도서관에서 책 한 권을 빌리려는데, 도서관 건물 설계도까지 함께 복사해서 가져가는 격이다.

형식블로그 글 1개의 평균 토큰 수유용한 콘텐츠 비율
Raw HTML~15,000 토큰~20%
Markdown~3,000 토큰~95%
절감률~80%

[💡 잠깐! 이 용어는?] 토큰: LLM이 텍스트를 처리하는 기본 단위다. 영어 기준 대략 4글자, 한국어 기준 1~2글자가 1토큰이다. HTML 태그는 콘텐츠 대비 토큰을 많이 소비하기 때문에 비용 측면에서 비효율적이다.


Cloudflare의 접근 — CDN이 자동으로 변환한다

Cloudflare는 이 문제를 네트워크 인프라 레벨에서 풀었다. 웹사이트 운영자가 코드를 한 줄도 바꿀 필요 없이, Cloudflare CDN을 통과하는 HTML 응답이 자동으로 마크다운으로 변환되는 구조다.

핵심 메커니즘은 HTTP Content Negotiation이다. AI 에이전트가 HTTP 요청의 Accept 헤더에 text/markdown을 포함하면, Cloudflare가 이를 감지하고 HTML 대신 마크다운으로 변환한 콘텐츠를 응답한다.

에이전트-요청.http
GET /blog/post-1 HTTP/2
Host: example.com
Accept: text/markdown, text/html;q=0.9
User-Agent: AI-Agent/1.0
cloudflare-마크다운-응답.http
HTTP/2 200 OK
Content-Type: text/markdown; charset=utf-8
 
# 블로그 포스트 제목
 
본문이 깔끔한 마크다운으로 전달된다.
네비게이션, 푸터, 스크립트는 모두 제거됐다.

일반 브라우저 요청에는 영향이 없다. Accept 헤더에 text/markdown이 포함된 요청에만 마크다운으로 응답하므로, 기존 트래픽과 완벽히 공존한다.

[💡 잠깐! 이 용어는?] Content Negotiation: HTTP 프로토콜에서 클라이언트가 Accept 헤더를 통해 선호하는 콘텐츠 형식을 서버에 알리는 메커니즘이다. 같은 URL이지만 Accept: application/json이면 JSON으로, Accept: text/html이면 HTML로 응답할 수 있다. 1990년대부터 있던 오래된 HTTP 표준이다.


사용 방법 — 대시보드 토글 하나

Cloudflare CDN 뒤에 있는 사이트라면 대시보드에서 토글을 켜는 것만으로 적용된다.

cloudflare-설정-경로.txt
Cloudflare Dashboard
  → 도메인 선택
  → Scrape Shield (또는 AI)
  → Markdown for Agents: ON

직접 테스트하고 싶다면 curl로 확인할 수 있다.

마크다운-응답-테스트.sh
curl -H "Accept: text/markdown" https://example.com/blog/post-1

robots.txt, llms.txt와 어떻게 다른가

웹에서 AI 에이전트와의 상호작용을 정의하려는 시도는 이전에도 있었다. Cloudflare의 접근이 기존 시도와 어떻게 다른지 정리하면 다음과 같다.

robots.txt는 1990년대부터 있던 크롤러 접근 제어 표준이다. "이 경로는 크롤링하지 마라"를 지시할 수 있지만, 콘텐츠 형식에 대한 것은 아니다.

llms.txt는 비교적 최근 제안된 표준으로, 사이트의 핵심 콘텐츠를 LLM이 소비하기 쉬운 형태로 요약한 파일이다. 사이트 운영자가 수동으로 작성해야 한다.

llms-txt-예시.txt
# Example.com
 
## 소개
이 사이트는 기술 블로그다.
 
## 주요 콘텐츠
- /blog: 기술 블로그 포스트
- /docs: API 문서
 
## API
- Base URL: https://api.example.com
- 인증: Bearer 토큰 필요

Cloudflare의 접근은 이 둘과 성격이 다르다. 접근을 제어하는 것도 아니고, 별도 파일을 만드는 것도 아니다. 기존 웹 콘텐츠를 그대로 두고, 요청자에 따라 형식만 바꾸는 것이다. HTTP Content Negotiation이라는 이미 검증된 표준 위에 구현됐기 때문에 기술적으로도 자연스럽다.


AI 에이전트 개발자를 위한 실전 코드

에이전트를 개발하고 있다면 활용법은 단순하다. Accept 헤더에 text/markdown을 넣고, 응답의 Content-Type을 확인하면 된다.

마크다운-요청-예시.py
import httpx
 
response = httpx.get(
    "https://example.com/blog/post-1",
    headers={"Accept": "text/markdown"}
)
 
if response.headers.get("content-type", "").startswith("text/markdown"):
    markdown_content = response.text
    # 토큰 효율적인 마크다운을 LLM에 바로 전달
else:
    # 폴백: HTML 파싱 필요
    pass

모든 사이트가 Cloudflare를 쓰는 것은 아니므로, 폴백 로직은 항상 필요하다. 하지만 Cloudflare를 사용하는 사이트가 전체 웹 트래픽의 상당 부분을 점유한다는 점을 고려하면, 이 기능의 커버리지는 무시할 수 없는 수준이다.

[💡 잠깐! 이 용어는?] 폴백(Fallback): 주요 경로가 실패했을 때 대체 경로로 전환하는 패턴이다. 마크다운 응답을 기대했지만 HTML이 돌아왔을 때, BeautifulSoup 같은 파서로 HTML을 처리하는 것이 폴백에 해당한다.


마무리

HTTP Content Negotiation은 원래 언어(ko, en)나 형식(json, xml)을 협상하기 위한 것이었다. 여기에 "AI 에이전트를 위한 형식"이 추가된 것이다. 도서관에 비유하면, 시각장애인을 위해 점자 도서를 별도로 제작하는 대신 자동 점역 기계를 설치한 것과 같다. 원본을 건드리지 않으면서 새로운 소비자에게 적합한 형식을 제공한다. Accept: text/markdownAccept: application/json만큼 자연스러운 세상이 다가오고 있다. 웹은 더 이상 브라우저만을 위한 공간이 아니다.

관심 있을 만한 포스트

Cloudflare Code Mode — 2,500개 API를 1,000 토큰에 담는 MCP의 새로운 패턴

Cloudflare가 공개한 Code Mode는 AI 에이전트에게 수천 개의 API 엔드포인트를 단 2개 도구로 제공하는 MCP 서버 설계 패턴이다.

CloudflareMCP

Native JSON Modules — 번들러 없이 JSON을 import하는 시대

Import Attributes와 함께 표준이 된 native JSON module. 어떻게 동작하고, 기존 번들러 방식과 뭐가 다른지 정리했다.

JavaScriptESM

VS Code 1.110 — 에이전트가 생각하고, 브라우저를 열고, 터미널을 본다

2026년 2월 VS Code 1.110이 AI 에이전트 경험을 한 단계 끌어올린 핵심 기능 6가지를 분석한다.

VS Code1.110

Google WebMCP — 웹사이트가 AI 에이전트에게 '메뉴판'을 건네는 시대

Chrome 146에 탑재된 WebMCP의 Declarative·Imperative API 구조와 웹 개발자가 준비해야 할 변화를 분석한다.

WebMCPAI Agent

VS Code 1.109 — 에디터 하나에서 Claude, Codex, Copilot을 동시에 돌리는 시대

VS Code 1.109가 도입한 멀티 에이전트 개발 환경의 3가지 실행 모드와 MCP Apps 지원을 분석한다.

VS CodeAI Agent

좀비 TV 400만 대의 35초 — 2025년 DDoS 공격은 어떻게 역대 기록을 갈아치웠나

2025년 DDoS 공격이 전년 대비 두 배 이상 증가하고, 역대 최대 31.4 Tbps 공격이 기록된 Cloudflare Q4 리포트 분석.

DDoSCloudflare

Interop 2026 — 브라우저 전쟁이 끝나고 표준 전쟁이 시작됐다

Chrome, Safari, Firefox가 합의한 20개 웹 표준 집중 영역과 프론트엔드 개발자가 주목해야 할 핵심 기능을 정리한다.

InteropCSS

뱀의 탈피에서 배운 서버 재시작 — Rust로 커넥션 제로 로스를 구현하는 ecdysis

Cloudflare가 5년간 프로덕션에서 검증한 Rust 무중단 재시작 라이브러리 ecdysis를 오픈소스로 공개했다.

RustCloudflare