Delivering Content with RSS for Web Developers on Mac OS X
OSXDEV
목차 |
[편집] Mac OS X 상에서 RSS로 컨텐츠 전송 방법
신디케이션(연동)이라는 새로운 기술이 나오면서 부터 웹컨텐츠를 전송하는 방법이 획기적으로 발전되었다. 신디케이션을 위한 가장 보편적인 포맷은 XML(eXtensible Markup Language)로 정의된 RSS(Really Simple Syndication)이라 불리우는 것으로, 컨텐츠 흐름 - 피드라 불리우는-을 시간단위로 조율한다. 즉, RSS는 시간이 흐름에 따라 바뀌는 컨텐츠를 전송 할 수 있다는 뜻이다. RSS는 또한, 이메일에서 첨부를 통해 파일을 전송하듯, <enclosure>태그를 통해서 다른 데이타를 첨부할 수 있다.
Mac OS X Tiger에서는 사파리브라우저, iTunes, iWeb등과 갈은 프로그램에서의 RSS지원 기능이 대폭 추가되었다. iTunes와 iWeb에서 사용되는 포드캐스트는 RSS 파일첨부(enclosure)의 형태로 제공되는 것이다. 사파리는 RSS컨텐츠를 지원하는 최고의 브라우저라 할 수 있다. RSS 동인식 기능을 통해, 사파리 브라우저는 웹페이지 내에 RSS 피드가 있을 경우 주소창에 RSS뱃지를 표시해 사용자에게 알려주고, 사용자는 그것을 구독할 수도 있다. 또한, 개발자나 컨텐츠 생산자가 RSS 피드를 만들어내고, 검증하는데 필요한 많은 수많은 도구가 포함되어 있다. 이 문서에는 각각의 내용에 대해서 살펴볼 것이다.
RSS가 무엇의 약자인지에 대해서는 논란이 조금 있다. "Really Simple Syndication" (정말 단순한 신디케이션) 이라는 주장도 있고, 다른 것 중에는 "RDF Site Summary" (RDF 사이트 요약정보) 라는 주장도 있다. RDF는 "Resource Description Framework" (자원 기술 규격)의 약자이다.
RSS 피드의 가장 기본적인 구조는 리스트 1에 나와 있다. 가장 바깥쪽의 태그는 <rss> 태그이고, 그 안쪽으로 <channel> 태그가 있다. 채널은 그 피드의 속성을 지정해 주는 태그를 포함하고 있다. 이메일에서 헤드필드에 이메일 속성에 대한 정보가 포함되어 있는 것과 비슷하다. 채널속성 아래에는 실제 피드의 내용을 구성하는 item 태그가 있다. 각각의 아이템은 하나의 엔트리를 구성하고, RSS 피드는 이 엔트리들로 구성이 되는 것이다. <item>으로 제목, 이미지, 오디오 파일에 관한 내용을 정의할 수 있다. 이들 item 태그 아래로 닫는 태그인 </channel> 과 </rss>가 온다. (유효한 XML 파일이 되기 위해서는 닫는 태그가 반드시 있어야 한다.) 이 예제에 나와 있는 모든 태그가 반드시 필요한 것은 아니다. 이 문서의 맨 아래에 나와 있는 참조문서를 보면 더 많은 예제 RSS를 찾아 볼 수 있다.
리스트 1 RSS 피드 구조
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<!-- channel metadata -->
<title>ADC Feed</title>
<link>http://developer.apple.com/feed.rss</link>
<description>ADC headlines, new sample code, and docs.</description>
<!-- channel content -->
<item>
<!-- item content -->
<title>Intro To RSS</title>
<description>This article provides an overview of RSS. The enclosure references the podcast.</description>
<enclosure url=""http://developer.apple.com/rss.mp3" length="123456" type="audio/mpeg" />
</item>
</channel>
</rss>
개발자 혹은 웹컨텐츠 제공자 모두에게 있어, 현재의 추세는 시간 단위로 정보를 제공하는 것이다. "시간 단위 전송"이란, 정보의 개념으로
- 특정 기간동안 의미 있는 내용을 담고 있으며,
- 전달이 되어 소비가 되는 형태. 더 자세한 내용은 위키피디어에서 "전송 매체"의 정의를 참고한다.
그렇다면, RSS는 이 시간단위 전송과 무슨 관계가 있을까? 블로그 작성 기법이 좋은 예이다. RSS를 사용하지 않는 정적인 형태에서는, 웹서버에 블로그 내용을 새로 갱신을 한 내용을 주단위 혹은 매일 올리고, 관심있는 사용자들은 브라우저 또는 블로그 전용 소프트웨어를 통해 사이트에 들어와서 세상에 관한 예리한 분석에 관한 글을 읽는 다던지, 프로그래밍 비법을 확인하거나 한다. 그러나 이런 식으로 일일이 확인하는 것은 시간이 걸리고, 매번 직접 사이트에 들어와서 확인을 해야 한다.
좀 더 효율적인 방법은 RSS 피드를 통해서 블로그를 갱신하고, 블로그 구독자(대부분의 블로그 프로그램에서 구독하는 방법을 제공한다)에게 자동으로 새로운 내용을 확인하고 다운로드를 해 주는 방법이 있다. 이러한 작업은 사파리와 같은 브라우저에서 제공하기도 하고, 특화된 피드 구독 프로그램을 통해서도 사용할 수도 있고, 이런 기능을 제공하는 Bloglines, My Yahoo! 와 같은 사이트도 있다. 이러한 피드와 구독이 가능하게 하는 핵심이 바로 RSS이다.
[편집] 첨부
RSS의 정의방법은 고정된 형태는 아니다. 시장에서 필요가 있으면, 다른 형태로 변형되기도 한다. RSS 정의형태중 "첨부"와 관련된 것이 있다. RSS에서 첨부는 다른 내용과 함께 추가적인 내용을 전달할 수 있는데, 이메일에서 첨부문서와 같은 개념으로 보면 된다. enclosure 는 item 태그 내에 오는 태그이다. 파일과 파일의 크기, MIME정보에 관한 내용을 기술한다. (리스트 2 참조) 포드캐스트가 대표적인 enclosure 사용예이다. enclosure 태그내에 전달될 오디오나 비디오 정보가 들어가는 것이다. 물론 사진이나 다른 문서에 대한 정보가 올 수도 있다.
리스트 2 Enclosure 항목
<enclosure url=""http://developer.apple.com/rss.mp3" length="123456" type="audio/mpeg" />
애플은 최근 <itunes:> RSS 명칭공간(namespace)의 확장형태를 발표하였다. (XML 명칭공간은 비슷한 이름에 서로 다른 역할을 하는 태그가 있을 경우 서로 혼동되지 않도록 해주는 역할을 한다) 이 확장형은 포드캐스트 발행자가 iTunes 사용자 혹은 호환가능한 비슷한 프로그램 사용자에게 좀더 나은 정보를 제공할 수 있도록 한다.예를들면, <itunes:category> 항목은 카테고리별 구분을 하는데 도움을 주고, <itunes:keywords>는 키워드 단위로 검색이 가능하도록 해 준다. "포드캐스트와 아이튠즈 : 기술명세서"를 보면 더 자세한 iTunes 태그를 알 수 있다.
[편집] RSS와 Atom
현재 피드와 관련된 여러가지 정의형태가 존재하지만, 아직은 RSS 2.0과 Atom 1.0 이 대세다. 하지만, 새로운 추세가 나타나고, 과거의 형태가 저무는 것을 주시할 필요가 있다. 좋은 소식이라면, 사파리는 현재 사용중인 대부분의 형태를 다 알아먹는다는 것이다. 대부분의 RSS 구독 프로그램 또한 RSS와 Atom 모두 지원한다.
[편집] 발행자와 개발자를 위한 도구들
피드 발행자는 "성성기" 프로그램을 통해서 피드를 구성하는 RSS 태그를 자동으로 구성할 수 있다. FeedForAll의 경우 마법사를 통해서 RSS 피드 생성을 할 수 있고, 일반 RSS 피드, 포드캐스트, iTunes 지원 포드캐스트 형태로 만들어 낼 수 있다.
만들고 나면, RSS 지원 브라우저나, NetNewsWire같은 프로그램으로 확인을 해 봐야 한다. 문제가 없는지 확인을 항상 해야겠다. FEED Validator 같은 검증 프로그램으로 오류검증도 해 정확안 문법(well-formed)인지 확인해 보아야 한다. 여러 종류의 검증 프로그램이 온라인 상에 있다. 이 문서 하단부에 있는 MacTech 기사를 보면, 여러 생성기와 구독 프로그램 목록을 확인할 수 있다.
[편집] 시간 단위 컨텐츠에서 시간을 정확히 인식하기
피드의 날짜는 <pubDate>와 <lastBuildDate>의 채널 항목에 표시된다. 리스트 3에서, 첫 예제에 이 두가지 항목을 추가해 보았다. <pubDate>는 피드가 발행된 시간을 표시해 주고, <lastBuildDate>는 마지막으로 피드가 갱신된 시간을 표시해 준다. 피드 구독 프로그램은 내부적으로 저장해 놓은 시간과 이 태그에 기록된 시간을 비교해서 만일 더 나중의 시간이라면 최신 내용이라 인식을 한다. 태그의 형식은 RFC 2822를 따르도록 한다. RFC는 조금 딱딱한 형태로 써있다. 위키피디어에 잘 정리가 되어 있다. 시간은 24시 형태로 쓰고 (AM PM은 사용하지 않는다) 시간대 표시를 반드시 해 준다. "포드캐스트와 아이튠즈 : 기술 상세" 문서에 더 자세한 내용이 있다.
리스트3 Date 채널 항목
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<!-- channel metadata -->
<title>ADC Feed</title>
<link>http://developer.apple.com/feed.rss</link>
<description>ADC headlines, new sample code, and docs.</description>
<pubDate>Mon, 3 Apr 2006 15:00:00 -0800</pubDate>
<lastBuildDate>Mon, 3 Apr 2006 09:00:00 -0800</lastBuildDate>
<!-- snip -->
중요 : <pubDate>는 item 단위에도 적용이 된다. 채널내에서 각 아이템별로 발행 날짜를 보여줄때에도 쓸 수 있다.
알림 : 부정확한 시간/날짜 형태가 문제의 소지가 되는 경우가 많다. 항상 RFC 2822에 맞도록 하는 것이 중요하다.
날짜와 관련한 태그가 몇가지 더 있다. <skipDays>와 <skipHours> 태그이다. 갱신이 되지 않은 주중의 요일 혹은 하루중 시간이 나타나 있다. 이 정보를 바탕으로 구독 프로그램 혹은 수집기는 이 시간에 맞추어서 다음 새롭게 확인할 스케줄을 정한다. 만일 다음 업데이트 해야 할 시간이 위 태그의 시간과 같다면, 피드는 갱신되지 않았다고 가정을 해 버리면 된다. 몇몇 브라우저나 프로그램은 이 태그를 정확히 지키지 않는 것도 있다.
또, <ttl> 즉, 생존시간 태그의 경우, 앞으로 갱신되지 않을 시간을 분단위로 알려준다. 이것은 구독 프로그램 혹은 수집기가 이 피드를 저장하고 있어야 할 시간을 알려준다. 필수적인 사항은 아니지만, 너무 자주 확인을 해서 발생하는 서버부담을 줄이기 위해 꼭 지켜주면 좋은 정보이다.
피드 발행자로서 이 모든 태그가 모든 브라우저나 프로그램에서 지원 될 것으로 판단해서는 안된다. 그렇다면? Etags 를 지원하고, 수정날짜 정보를 정확히 알려주고, HTTP GET 명령을 선택적 수행이 가능한 웹 서버에서 이 피드를 제공하는 것이 서버 부담을 줄일수 있는 가장 좋은 방법이다. HTTP/1.1 헤더 필디 정의 문서를 보면 Etags에 대한 구체적인 내용이 있다.
[편집] 자동 인식
피드가 있다는 것을 알려주는 것은 쉽지 않은 일이지만, 쉽게 알려줄 수 있는 방법이 있다. RSS 피드가 있다는 것을 알려주려면, 간단히, <head>태그안에 <link>태그만 추가시키기만 하면 된다. 그리고 <link>태그 내에는 해당 피드의 URL이 있으면 된다. 브라우저는 해당 사이트에 피드가 있다는 것을 알려줄 것이다. 사파리의 경우에는 주소창에 RSS 버튼이 표시가 된다.
리스트 4를 보면, RSS와 Atom 을 위한 <link> 문법이 나와 있다. Mark Pilgrim 블로그에 보면 <link>형태와 제목 속성에 대해 상세한 내용을 참조할 수 있다.
리스트 4 Link 태그를 통한 자동인식 지원
<link rel="alternate" type="application/rss+xml" title="RSS"
  href="http://developer.apple.com/rss/adcheadlines.rss">
<!-- or -->
<link rel="alternate" type="application/atom+xml" title="RSS"
  href="http://developer.apple.com/rss/adcheadlines.rss">
[편집] 핑 서버들
사용자로 하며금 피드를 찾아내고, 이 피드에 새로운 정보가 있다는 사실을 알려주기 위한 또 다른 방법으로, 핑서버에 XML-RPC 메시지를 보내는 방법이 있다. 일반적으로, 피드를 업데이트 할때, 해당되는 핑서버에 알려줘야 검색엔진이나, 블로그수집기가 웹사이트를 방문해 보지 않아도, 그 내용을 알 수 있게 된다. 일반적으로 가장 많이 알려진 서버는 Technorati 와 blo.gs 가 있고, 다른 것들도 많이 있다. 어떤 서버를 사용할 것인지 얼마나 많은 서버에 알려줘야 할 것인지는 사실 블로그에 따라, 그리고 매번 업데이트 할 때마다 자동으로 알려주는 작업을 얼만큼 할 것인가에 따라 다를것이다.
[편집] 더 많은 정보
여기의 내용 말고도 문서나 책이나 여러 기사들 중 참조가 되는 것들.
- 포드캐스트와 아이튠즈 : 기술 명세서 포드캐스트 등록과 피드백 처리, 범하기 쉬운 오류와 iTunes RSS 태그, 등록할 카테고리 목록과 관련된 정보와 예제들을 볼 수 있다.
- ADC 사이트 내의 SampleRSS.wdgt 예제 코드를 참조하면 자바스크립트를 이용하여 애플사이트의 최신 뉴스 정보의 RSS 피드에서 내용을 추축하는 과정을 알 수 있다. XMLHttpRequest 를 이용하여 피드로 부터 객체를 뽑아내고, 원하는 정보를 담은 XML 요소를 찾아내고 정보를 추출한다. 보통 대부분의 RSS 피드는 정확한 형태의 XML 형식을 잘 지키지 않기 때문에, 이 예제는 Dashboard 개발자에게 더 도움이 될 것이다.
- WWDC 2005 컨퍼런스 세션 135 "웹디자이너를 위한 사파리"에서 사파리에서의 RSS 지원을 이야기 하였다. ADC 온라인 계정으로 사이트에 로그인 해서, WWDC Sessions 메뉴로 이동하면 세션 동영상과 관련된 슬라이드를 다운로드 받을 수 있다.
- Atom 피드 자동인식 상세. RSS 자동인식 관련 문법도 위에서의 설명과 같이 비슷한 형태이다.
- 오라일리에서 출판된 "RSS와 Atom을 이용한 피드 만들기" 책과 "브라우저에서 피드 RSS 피드를 멋지게 보이게 하기"와 "사파리 RSS에 대해 알고 싶었던 모든 것" 기사를 참조한다.
- MacTech 잡지의 2005년 12월 기사 "RSS 2.0 해부". 이 기사에는 RSS 2.0 태그의 정리와 예제가 있다. 그리고 컨텐츠 제공자와 개발자를 위한 관련 프로그램 목록이 있다.
출처 : http://developer.apple.com/internet/deliveringcontentwithrss.html (2006-04-14) 번역 : wangsy (2006-10-05)




