Blog

RSS 2.0 스펙

March 27, 2014

RSS 2.0 스펙

RSS 2.0 명세

이 글은 http://cyber.law.harvard.edu/rss/rss.html 를 번역한 글입니다.
사실 걍 이 블로그에 RSS 피드 기능 만들어 달려고 찾은 내용을 대충 번역한 것입니다.
별 이유는 없지만 음슴체로 갑니다.

RSS 는 무엇인가?

RSS라는 이름은 Really Simple Syndication 의 두문자어로, 웹 컨텐츠의 배포 규약임.

RSS 는 XML 의 한 형태로, 모든 RSS 파일은 W3C 사이트에서 발표한 XML 1.0 명세를 지켜야 함.

RSS 버전 히스토리 요약

RSS 문서의 최상위 레벨인 엘리먼트는 필수적으로 해당 문서가 지원하고 있는 RSS 버전을 version 속성에 명시해야 함. 이 명세를 따르고 있다면 해당 속성의 버전은 2.0임.

엘리먼트의 하위 속성은 하나의 엘리먼트이며, 이 엘리먼트 속에 모든 제반 사항과 내용이 들어있음.

예제 파일

샘플 파일 링크 : RSS 0.91, 0.92, 2.0

샘플 파일들이 혹시 더이상 사용 가능하지 않을 수 있음. 0.91 샘플은 0.91 문서를 쓸 때 만들어졌음. 샘플들을 계속 유지해 나가는 것도 좋을 것 같음.

이 문서에 관해서

이 문서는 2002년 가을에 다시 제안된 것으로, 버전은 2.0.1임

이는 RSS 0.91(2000년 6월)의 기본 스펙에서부터 추가되거나 변경된 사항들을 통합하고 있음. RSS 0.92(2000년 12월), RSS 0.94(2002년 8월)에서 새롭게 추가된 새 기능들도 함께 포함함.

변경 내역은 여기 에서 확인 가능.

먼저 엘리먼트의 필수/선택적 하위 요소들에 대해 설명하고, 그 뒤에는 의 하위 요소들을 설명할 예정임. 마지막 단락에서는 자주 묻는 질문들에 대한 해답과, 향후 나아갈 방향 및 RSS 를 확장하기 위한 가이드라인을 제시할 예정임.

필수 채널 요소들

아래에 채널 엘리먼트의 필수 하위 요소들을 간략한 설명과 예제와 함께 써 둠. 더 완벽한 설명이 있는 경우 그 쪽으로의 링크도 함께 표시해둠.

Element Description Example
title 채널의 이름. 사람들이 당신의 서비스를 어떻게 가리키는지를 나타냄. 만약 HTML 로 이루어진 웹사이트를 RSS 파일로 나타낸거라면, 채널의 title 은 웹사이트의 title 과 같아야 함. GoUpstate.com News Headlines
link 채널과 일치하는 웹사이트의 URL 주소. http://www.goupstate.com/
description 채널을 설명하는 표어나 문장. GoUpstate.com 의 최신 뉴스. 스테인버그 헤럴드 저널 사이트.

선택적 채널 하위 요소들

Element Description Example
language 채널이 씌여진 언어. 이 항목은 예를 들면 모든 이탈리아어 사이트를 그룹으로 묶어서 관리할 수 있게 해줌. 이 요소에 사용 가능한 목록은 Netscape 에서 제공하는 이것 과 W3C에서 제공하는 이것 을 참조 바람 en-us
copyright 채널 내의 컨텐츠에 대한 저작권 고지 Copyright 2002, Spartanburg Herald-Journal
ManagingEditor 컨텐츠 편집 책임자의 이메일 주소 [email protected] (George Matesky)
webMaster 채널과 관련된 기술적 문제에 대한 책임자의 이메일 주소 [email protected] (Betty Guernsey)
pubDate 채널 내의 컨텐츠가 발행된 날짜. 예를 들어, 뉴욕타임즈는 일간지이기 때문에 발행일시는 매 24시간마다 한 번씩 변경됨. 그 시간이 채널의 pubDate 임. RSS 에 사용되는 모든 날짜/시간 형식은 RFC 822에 정의된 명세를 따라야 함. 연도에 대해서는 2자리, 혹은 4자리를 선택적으로 적용하는 예외를 허용함. (기본적으로는 네 자리) Sat, 07 Sep 2002 00:00:01 GMT
lastBuildDate 채널의 내용이 마지막으로 변경된 시간 Sat, 07 Sep 2002 09:42:31 GMT
category 채널이 속해있는 하나, 혹은 그 이상의 카테고리. 엘리먼트의 카테고리와 동일. Newspapers
generator 채널을 만드는 데 사용된 프로그램 이름 MightyInHouse Content System v2.3
docs RSS 파일에 사용된 형식에 대한 문서를 가리키는 URL. 보통은 이 문서를 가리킴. 이건 예를 들어 한 25년쯤 후에 RSS 파일이 뭔지 알지도 못하고 혼돈에 빠질 웹서버를 위한 배려임. http://blogs.law.harvard.edu/tech/rss
cloud 채널의 업데이트 정보를 받을 수 있는 클라우드에 대한 정보. RSS 에 대한 간소한 발행-구독 프로토콜을 구현해야 함.
ttl Time to live. 채널의 데이터가 얼마동안 캐싱될 수 있는지에 대한 정보를 분단위로 기입 60
image 채널에 대한 이미지. JPEG, GIF, PNG 형식.
rating 채널에 대한 PICS 평점.
textInput 채널에 함께 표시될 수 있는 텍스트 입력칸에 대한 정보.
skipHours 수집하는 쪽에 이 채널에 대한 정보를 몇시간 동안 건너뛸 수 있는지 알려주는 항목.
skipDays 수집하는 쪽에 이 채널에 대한 정보 수집을 몇일 동안 건너뛸 수 있는지 알려주는 항목.

<channel> 의 <image> 하위요소에 관하여

<image> 는 <channel>의 선택적 하위 요소이며, 세 개의 필수 하위 요소와 세 개의 선택적 하위 요소가 있음.

<url> 은 채널을 나타내는 이미지 파일의 주소임. (gif, jpeg, png 이미지)

<title> 은 이미지에 대한 설명임. 채널이 HTML 페이지로 렌더링 될 때 ALT 속성에 들어가는 내용.

<link> 는 채널이 나타내는 사이트에 대한 URL. 채널이 HTML 로 렌더링되는 경우 해당 이미지는 이 주소로 링크가 걸리게 됨. (실질적으로 이미지의 <title> 과 <link> 는 채널의 <title> 과 <link>와 같은 값을 가져야 함).

선택적 요소는 ≶width>와 <height>가 있음. 이미지의 가로와 세로를 픽셀단위의 숫자로 표현. <description>는 이미지 주변을 감싸는 링크 요소의 title 속성에 사용될 문자열임.

width 는 최대 144이며, 지정하지 않으면 기본으로 88임.

height 는 최대 400, 기본 31이 됨.

채널의 <cloud> 하위요소

<cloud> 는 <channel>의 선택적 하위 요소임.

이 항목은 HTTP-POST, XML-RPC, SOAP 1.1 등을 통해 rssCloude 인터페이스를 지원하는 웹 서비스를 가리킴.

이 서비스들은 채널이 업데이트 될 때 간략한 발행-구독 프로토콜을 통해 업데이트 알림을 주는 서비스에 등록할 수 있도록 해줌.

<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />

위 예제의 경우 채널 변경 알림을 요청하기 위해 XML-RPC 를 통해 rpc.sys.com 서버의 80 번 포트로 /RPC2 경로에 대한 요청을 보내게 됨. 처리 루틴은 myCloud.rssPleaseNotify 메소드를 호출하게 됨.

이 요소에 대한 전체 설명과 rssCloud 인터페이스에 대한 내용은 여기서 볼 수 있음.

<channel>의 <ttl> 하위요소

<ttl> 은 <channel> 의 선택적 하위 요소임.

ttl 은 time to live 의 약자로, 채널의 원본을 얼마나 캐싱할 수 있는지 나타내는 분단위의 숫자임. 이 항목은 RSS 원본을 Gnutella 와 같은 파일 공유 네트워크를 통해 관리할 수 있도록 해줌.

<ttl>60</ttl>

<channel>의 <textInput> 하위 요소.

채널은 선택적으로 <textInput> 하위 요소를 포함할 수 있으며, 각각의 textInput 요소는 네 개의 필수적인 하위 요소를 가짐.

  • <title> — 텍스트 입력 요소의 전송 버튼의 문자열

  • <description> — 텍스트 입력 요소에 대한 설명

  • <name> — 텍스트 입력 요소의 문자열 부분의 이름(name 속성)

  • <link> — 입력된 값을 처리하는 CGI 프로그램의 URL.

이 요소의 목적은 사실 미스테리임. 검색엔진용 입력칸을 만들거나, 피드백을 받는 등의 용도로 사용할 수 있을 것 같음. 보통 rss 수집기는 이 항목을 아마 무시할거임.

<item> 의 요소들

채널은 여러개의 <item> 요소를 가지르 수 있음. 각각의 아이템은 하나의 “스토리”를 담고 있음. 잡지나 신문의 기사와 비슷한 개념. 따라서 보통 description 은 해당 이야기의 요약과 전체 이야기에 대한 링크로 이루어짐. 물론 item 요소 내에서 이야기가 완전히 다 표현될 수도 있느넫, 그럴 경우 description 은 해당 이야기의 내용(엔티티 인코딩 된 HTML 을 지원함. 예제 참조)을 담고, 링크와 제목은 생략이 가능함. item 의 모든 하위요소는 선택적임. 다만 최소한 title 이나 description 둘 중에 하나는 있어야 함.

Element Description Example
title 아이템 제목 Venice Film Festival Tries to Quit Sinking
link 아이템의 URL http://nytimes.com/2004/12/07FEST.html
description 아이템 요약. Some of the most heated chatter at the Venice Film Festival this week was about the way that the arrival of the stars at the Palazzo del Cinema was being staged.
author 아이템 작성자의 이메일 주소. oprah\@oxygen.net
category 하나, 혹은 그 이상의 카테고리
comments 아이템에 관한 댓글의 주소 http://www.myblog.org/cgi-local/mt/mt-comments.cgi?entry_id=290
enclosure 아이템에 첨부된 미디어 객체
guid 아이템을 식별할 수 있는 고유 문자열 http://inessential.com/2002/09/01.php#a2
pubDate 아이템이 발행된 날짜 Sun, 19 May 2002 15:21:36 GMT
source 아이템이 속한 RSS 채널

<item>의 <soure> 하위 요소

<source> 는 <item>의 선택적 하위 요소임.

이 요소의 내용은 아이템이 발행된 RSS 채널의 <title>요소에서 나온 것으로, 해당 채널의 이름을 나타냄. 이 요소는 url 이라는 속성을 필수로 가지고 있어야 함. 해당 속성은 XML형태로 된 원본을 가리킴.

<source url="http://www.tomalak.org/links2.xml">Tomalak's Realm</source>

이 요소는 아이템의 소스를 홍보하기 위해 링크를 전달하는 것이 목적임. RSS 수집기는 이 값을 Post 명령에 사용할 수 있음. 이 요소의 내용은 수집기를 통해 블로그 저작툴에 해당 아이템을 전달할 때 자동으로 생성되어야 함.

<item> 의 <enclosure> 하위 요소

<enclosure> 는 <item> 의 선택적 하위 요소임.

이 요소는 세 개의 필수적인 속성을 요구함. url 은 해당 미디어가 어디에 있는지를 나타내고, length 는 byte 단위의 크기, type 은 해당 요소의 MIME 타입을 나타냄.

url 속성의 값은 반드시 http 여야 함.

<enclosure url="http://www.scripting.com/mp3s/weatherReportSuite.mp3" length="12216320" type="audio/mpeg" />

이 요소의 활용 예제는 여기에서 확인 가능

<item>의 <category> 하위 요소

<category> 는 <item>의 선택적 하위 요소임.

이 요소는 domain 이라는 선택적인 속성을 가질 수 있음. 이 속성의 값은 분류를 위한 구분자임.

요소의 값은 슬래시로 구분된 문자열로, 계층 구조의 분류를 표현할 수 있음. 처리기들은 각 분류를 위한 규칙을 정할 수 있음. 아래에 두 개의 예시가 있음.

<category>Grateful Dead</category>

<category domain="http://www.fool.com/cusips">MSFT</category>

필요한 만큼 여러개의 카테고리 요소를 포함시키는 것도 가능함. 각각은 다른 도메인을 가질 수 있고, 같은 도메인의 각기 다른 카테고리를 나타낼 수도 있음.

<item> 의 <pubDate> 하위 요소

<pubDate>는 <item>의 선택적 하위 요소임.

이 요소의 값은 아이템이 발행된 날짜를 나타냄. 만일 미래의 날짜를 지정한다면, RSS 수집기는 해당 날짜가 올 때까지 이 아이템을 표시하지 않을 수 있음.

<pubDate&gt;Sun, 19 May 2002 15:21:36 GMT&lt;/pubDate&gt;

<item> 의 <guid> 하위 요소

<guid> 는 <item>의 선택적 하위 요소임.

guid 는 전세계에서 유일한 문자열로 아이템을 구분할 수 있는 값이어야 함. 이 값이 제공되는 경우, RSS 수집기는 이 값을 기준으로 이 아이템이 새 아이템인지 아닌지를 판별하게 됨.

<guid>http://some.server.com/weblogItem3207</guid>

guid 의 값에는 정해진 형식이 따로 없음. RSS 수집기는 이 값을 단순한 문자열로 표시해야 함. 이 값은 전적으로 피드를 만드는 측에서 정의하기 나름임.

만일 guid 요소가 “isPermaLink”라는 속성에 true 라는 값을 지정하고 있을 경우, RSS 리더는 이 값을 해당 아이템에 대한 바로가기로 간주할 수 있음. 이 경우 바로가기는 웹브라우저를 통해 아이템 전체에 접근할 수 있는 경로를 의미함. 예를 들면 이렇게.

<guid isPermaLink="true">http://inessential.com/2002/09/01.php#a2</guid>

isPermaLink는 선택적 속성이며, 기본값은 true임. 만약 해당 속성이 false 로 지정되어 있다면 guid 는 url 이 아니거나 해당 아이템이 아닌 다른 어떤 url 일수도 있음.

<item> 의 <comments> 하위 요소

<comments> 는 <item>의 선택적 하위 요소임.

이 요소가 있는 경우, 이 요소의 값은 해당 아이템에 관한 댓글들을 볼 수 있는 페이지의 url 임.

<comments>http://ekzemplo.com/entry/4403/comments</comments>

comments에 대한 더 자세한 내용은 여기를 참조하면 됨

<item> 의 <author> 하위 요소

<author> 는 <item>의 선택적 하위 요소임.

해당 아이템 작성자의 이메일 주소를 나타냄. 예를 들어 잡지나 신문의 RSS 라면, author 는 해당 기사를 쓴 사람이 됨. 어떤 합작 블로그의 RSS 인 경우에는 author 는 편집자나 관리자와는 다른 사람이 될 수 있음. 단순히 한 사람이 운영하는 블로그의 RSS 인 경우, item 의 author 요소를 생략하는 게 더 좋을 수 있음.

<author>[email protected] (Lawyer Boyer)</author>

덧붙여서

RSS 스펙은 linkurl 요소의 공백을 제외한 첫 문자에 대해 제한을 두고 있음. 이 요소들의 값은 반드시 IANA-registered URI scheme에 정의된 방식대로 시작해야 함. 예를 들면 http://, https://, news://, mailto:, ftp:// 등이 있음. RSS 2.0 이전의 명세에서는 http:// 와 ftp:// 만을 허용했었음. 컨텐츠 제작자는 RSS 수집기에서 지원하는 다른 형식을 사용할 수도 있음. 보통 수집기들은 각각 지원하는 URI 형식에 대한 제한이 있게 마련임. 컨텐츠 제작자는 모든 수집기가 모든 URI 명세를 지원할거라고 생각하지 않는 편이 좋음.

RSS 0.91의 경우 대부분의 요소의 길이가 500 혹은 100 개의 문자로 제한되었음. 또, item 요소도 채널당 15개 이상 가질수 없게 되어있었음. RSS 0.92 버전 이상에서는 문자열 길이에 대한 제한은 없음. 처리기들은 자신들만의 제약을 가지고 있을 수 있고, 피드 생성기들도 채널당 아이템 갯수에 대한 제한 설정이나 전체 피드 길이에 대한 제한 설정을 제공할 수 있음.

RSS 2.0에서는 각 채널들을 분류 시스템에 연동하기 위한 규정이 만들어짐. 예를 들어 채널을 Syndic8 로 연결하고 싶다면 channel의 하위에 "Syndic8"이라는 도메인을 갖는 category 요소를 추가하고, 해당 요소의 값으로 이 채널이 Syndic8 데이터베이스에서 할당된 카테고리를 넣으면 됨. 예를 들어서 발췌된 기사들에 대한 카테고리를 다음과 같이 지정할 수 있음. &lt;category domain="Syndic8"&gt;1765&lt;/category&gt;.

guid 에 대해 자주 받게 되는 질문은 link와의 차이점이 무엇이냐는 것임. 둘이 같은 거냐고? ㅇㅇ, 그런 경우도 있음. 근데 아닐 수도 있음. 어떤 곳에서는 link 요소가 블로그 글에 대한 바로가기 링크인 경우가 있지만, 또 어떤 곳에서는 각각의 item 요소는 더 긴 글에 대한 요약만을 나타내고, link는 해당 글에 대한 주소, guid는 블로그 항목에 대한 바로가기인 경우도 있음. 뭐 어찌됐건 모든 경우에 guid 를 가능하면 바로가기로 만드는 것이 권장됨. 이 요소를 제공하면 RSS 수집기는 해당 글이 변경되더라도 글을 중복되지 않게 하나만 표시할 수 있게 됨.

혹시 RSS 2.0 형식에 대한 질문이 있다면 RSS2-Support 메일링 리스트에 질문해주길 바람. (Sjoerd Visscher 제공) 이 리스트는 토론을 위한 곳은 아니지만 RSS 2.0 포맷을 사용하는 사용자, 해당 포맷으로 글을 작성하는 작성자, 혹은 해당 포맷으로 컨텐츠를 제공하는 개발자들을 위한 곳임.

RSS 확장

RSS 는 1999년에 처음 시작된 이래 최대한 이해하기 쉽고 간결하고 현대적인 방식이 되도록 노력하고 있음. RSS 형식이 유명해진 이후로 개발자들은 W3C에서 제정한 네임스페이스에 명시된 모듈을 사용하여 확장하려 했음.

RSS 2.0 에 기능을 추가하는 데는 단순한 규칙이 있음. RSS 피드에는 이 문서에서 지정한 요소 외에는 반드시 네임스페이스에서 정의한 요소만을 포함할 수 있음.

이 문서에서 정의한 요소들은 네임스페이스에 포함되지 않음. 따라서 이전 버전에 대한 호환성을 센스있게 확보할 수 있게 됨. RSS 0.91 이나 0.92 로 작성된 파일은 그냥 2.0 스펙에도 부합함. 만약에 RSS 2.0에서 정의된 요소들이 특정한 네임스페이스에 들어있게 된다면 이러한 하위 호환성은 깨지고 0.9x 버전대의 파일은 2.0 스펙에 맞지 않게 됨.

향후 청사진

RSS 는 완벽한 형식은 아니지만 유명하고 아주 널리 사용되고 있음. 안정된 규격을 가지는 것은 장기적으로 RSS 에 필요한 사항임. 이러한 작업의 목적은 변함없이 개발 관련 시장에서 RSS의 저변을 확대하고 새로운 배포 형식에 대한 길을 닦는 것임. 따라서, RSS 명세는 여러 실용적인 목적에 따라 2.0.1 에서 동결함. 향후에 2.0.2나 2.0.3 등의 버전이 나오는 것은 오직 명세를 더욱 명확히 하기 위한 목적으로만 가능할 것으로 예상하며, 새로운 기능을 추가하는 경우는 없을것임. 이후의 작업들은 네임스페이스를 사용하는 각 모듈을 통하거나, 혹은 완전히 새로운 이름을 가진 새 배포 형식을 통해 이루어지길 바람.

License and authorship

RSS 2.0 is offered by the Berkman Center for Internet & Society at Harvard Law School under the terms of the Attribution/Share Alike Creative Commons license. The author of this document is Dave Winer, founder of UserLand software, and fellow at Berkman Center.

역자 : 번역본에 대한 권리는 귀찮으니까 포기합니다. 번역본에 대한 라이센스도 역시 원 글과 동일하게 유지합니다.