RFC 0001: SKU.md의 선언형 발견, 구조화된 식별자, 참고 가격
사양 노트
호스팅형 쇼핑몰이 /sku.md 밖에서 카탈로그를 선언하고, GTIN, MPN, 브랜드, SKU를 해석 가능한 형태로 쓰며, 결코 판매 조건이 아닌 날짜 붙은 참고 가격을 추가하도록 하는 초안입니다.
SKU.md 1.0.0-beta는 의도적으로 작게 설계되었습니다. /sku.md의 루트 카탈로그, 선택적 상품 지식 문서, 그리고 모든 사실에 붙는 Source 링크가 전부입니다. 이 작은 크기 덕분에 검증은 쉽지만, AI 대화형 쇼핑에서 독립 쇼핑몰에 중요한 세 가지 빈틈도 남습니다. RFC 0001은 이를 메우기 위한 초안입니다.
이 RFC는 현재 사양의 일부가 아닙니다. 어떤 검사기, 생성기, CLI, MCP 도구, Agent Skill도 아직 구현하지 않았고, 채택되더라도 모든 1.0.0-beta 문서는 그대로 유효합니다. 전문은 RFC 0001에 있습니다.
첫 번째 빈틈: 호스팅형 쇼핑몰은 루트 경로를 쓸 수 없다
사양은 카탈로그 경로가 정확히 /sku.md일 것을 요구합니다. 프로젝트의 Shopify 가이드에는 이 플랫폼이 쇼핑몰 루트를 관리하고 App Proxy 접두어를 제한한다는 점이 기록되어 있습니다. 다른 플랫폼의 파일 라이브러리 호스팅은 보통 최종 경로를 바꾸는 리디렉션에 기댑니다. 이런 판매자는 같은 Markdown을 다른 동일 출처 경로에서 제공할 수 있는 경우가 많지만, 지금은 그것이 적합하지 않습니다.
RFC는 읽는 쪽이 가장 먼저 확인하는 위치로 /sku.md를 유지합니다. 그곳에 없을 때 쇼핑몰은 다음 다섯 가지 힌트 중 하나로 다른 동일 출처 카탈로그 URL을 선언할 수 있고, 읽는 쪽은 정해진 순서로 확인합니다.
- 예약 경로
/.well-known/sku.md. 먼저 IANA 등록이 필요합니다. - 홈페이지 응답의 HTTP
Link헤더.rel="alternate",type="text/markdown",title="SKU.md"를 갖습니다. - 같은 관계를 나타내는 홈페이지의 HTML
link요소. llms.txt의Product knowledge섹션에 있는, 레이블이SKU.md catalog인 링크.agents.md에서SKU.md catalog:로 시작하는 줄.
마지막 두 가지는 발견 참조 가이드가 지금 권장하는 참조와 같습니다. 지금 추가해 두면 선언도 이미 갖춰지는 셈입니다.
모든 힌트는 동일 출처여야 하며, 선언된 파일은 루트 카탈로그와 똑같이 검증됩니다. 서로 어긋나는 두 힌트는 충돌로 보고됩니다. RFC는 또한 플랫폼이 다시 생성할 수 있는 파일의 힌트보다 홈페이지 제어가 필요한 힌트를 우선하도록 요구합니다. 경로 규칙을 느슨하게 하면 판매자가 통제하지 않는 콘텐츠를 카탈로그로 선언할 위험이 커지기 때문입니다.
두 번째 빈틈: 식별자가 자유 텍스트다
쇼핑 시스템은 GTIN, MPN, 브랜드, 판매자 SKU로 두 언급이 같은 상품인지 판단합니다. 1.0.0-beta에서는 이들을 Identifiers 섹션에 쓸 수 있지만 자유 텍스트로만 가능합니다. RFC는 파서가 추측 없이 읽을 수 있는 구조화된 표기를 추가합니다.
## Identifiers
- GTIN: 00012345678905 [Source](https://www.example-outdoor.com/products/tent)
- MPN: UL2P-24 [Source](https://www.example-outdoor.com/products/tent)
- Brand: Example Outdoor Gear [Source](https://www.example-outdoor.com/pages/about)
- SKU: TENT-UL2P-GRN [Source](https://www.example-outdoor.com/products/tent)
GTIN, MPN, Brand, SKU, ISBN은 예약 레이블입니다. GTIN은 GS1 체크 디지트를 통과해야 하며, 예약 레이블로 시작하지만 규칙을 어긴 항목은 평범한 문장으로 조용히 처리되지 않고 무효가 됩니다. 옵션별로 식별자가 다르면 값 뒤에 for와 옵션 이름을 붙일 수 있습니다. 구조화된 GTIN이 Product JSON-LD나 피드와 충돌하면, 읽는 쪽은 한쪽 값을 고르지 말고 충돌을 보고한 뒤 쇼핑객을 실시간 페이지로 안내해야 합니다.
세 번째 빈틈: 가격을 둘 곳이 전혀 없다
대화형 쇼핑에서 가격은 첫 번째 필터인 경우가 많습니다. 1.0.0-beta는 정적 파일에 실시간 가격을 넣지 않으며, RFC도 이 규칙을 유지합니다. 추가하는 것은 날짜와 출처가 있는 선택 섹션 Reference price입니다.
## Reference price
- USD 349.00 as of 2026-08-11 [Source](https://www.example-outdoor.com/products/tent)
- USD 299.00 to 349.00 as of 2026-08-11 for all variants [Source](https://www.example-outdoor.com/products/tent)
통화는 ISO 4217 코드이고, 금액은 소수점을 쓰며 천 단위 구분 기호를 쓰지 않고, as of 날짜는 문서의 Updated 날짜보다 늦을 수 없습니다. 이 섹션에는 할인가, 쿠폰, 회원가, 배송비, 세금, 재고를 쓸 수 없습니다. 값을 쓰는 쪽은 이를 날짜가 붙은 참고값으로 제시해야 하고, 장바구니나 결제에 써서는 안 되며, 90일보다 오래된 날짜는 오래된 값으로 취급해야 합니다.
초안에서 가장 논쟁적인 부분입니다. 예산으로 거르는 어시스턴트는 가격 단서가 전혀 없는 상품을 건너뛰지만, 날짜와 출처가 분명한 참고 가격이 있으면 쇼핑객을 실시간 페이지로 보내 확인하게 할 수 있다는 것이 근거입니다.
RFC가 다루지 않는 것
같은 검토에서 나온 몇 가지 아이디어는 이후 제안으로 미뤘습니다. 판매 지역, 언어, 통화를 나타내는 루트 Markets 섹션, 루트 카탈로그의 선택적 Brand와 Categories 섹션, 31개 문서라는 그래프 한도를 사양에서 분리하는 일, 읽는 쪽을 위한 관대한 해석 프로필, 그리고 Markdown 리소스와 Sitemap 및 대표 페이지의 관계에 대한 지침입니다. RFC가 이들을 나열하는 것은 이번 초안에 대한 논의를 집중시키기 위해서입니다.
열린 질문과 의견 보내는 법
초안은 네 가지 질문을 직접 던집니다. well-known 등록을 지금 신청할지, 두 번째 독립 구현이 나올 때까지 기다릴지. 플랫폼이 덮어쓸 수 있는 llms.txt와 agents.md 힌트를 유지할지. 가격 변동이 빠른 카테고리에 90일 기준이 맞는지. 루트 카탈로그에도 Brand를 허용할지.
의견은 프로젝트 저장소에서 받습니다. 도입 계획은 어떤 릴리스가 채택하기 전에 검사기의 미리보기 플래그, 새 문제 코드마다의 적합성 픽스처, 선언된 URL로 게시하는 호스팅형 플랫폼 판매자 최소 한 곳, 이를 읽는 독립적인 읽는 쪽 하나를 요구합니다. 그때까지는 현재 사양을 따라 구현하세요.