 |
|
RSS 개요
본 절은 RSS 포맷에 대해 설명하고 샘플 피드를 제공하는 것으로 시작한다. 또한 RSS 피드의 모든 요소를 설명하고 RSS를 데이터 저장소로 사용하는 것에 대해 설명한다.
RSS란 무엇인가?
RSS는 웹 사이트와 내용을 배급하거나 발행하는 데 널리 채택된 포맷이다. 사이트에서 보이는 HTML과는 다르게 RSS는 웹 사이트를 몇 가지 아이템이 들어 있는 XML 채널로 요약한다. 즉, RSS는 XML의 특정 문법이다. RSS는 기본 요소와 간단한 스키마를 사용하여 채널 요소 내에서 아이템 요소를 캡슐화할 수 있다. 여기서 아이템은 블로그 엔트리처럼 일반 정보일 수 있지만 이 맥락에서 아이템은 이미지, URL, 클립, 텍스트 데이터 등 원하는 무엇이든 될 수 있다. 채널은 피드 소스로, 포함하는 아이템의 집합체 역할을 하고 모든 아이템에 공통의 메타데이터를 제공한다. 객체 지향 관점에서는 채널 객체에는 0 또는 그 이상의 아이템 객체의 배열이 들어있다고 말할 수 있다.
뉴욕 타임즈 같은 온라인 뉴스 사이트부터 벼룩시장(Craig's List) 같은 온라인 게시판이나 연재만화(Dilbert, XKCD) 등까지 많은 사이트에서 현재 RSS 피드를 제공한다. 모든 브라우저에서 RSS를 지원하고(파이어폭스, 오페라, 사파리, 인터넷 익스플로러 7에 이르기까지 널리 채택됐다), 맥OS X과 비스타 모두 위젯과 가젯을 통해 RSS를 사용자 데스크톱과 통합하려는 노력을 하고 있다.
XML 폼에서 임의의 내용을 요약함으로써 더 많은 가능성이 열린다. 이 중 현재 가장 중요한 가능성은 특화된 애플리케이션(RSS 취합자라 부르는)이 내용을 더 쉽게 자동으로 처리할 수 있다는 것이다. 효율성에 문제가 있는 HTML 파싱 대신 RSS 포맷은 기계에서 처리하기 편리한 XML을 제공한다. XML은 메타 데이터 태그 덕에 더 쉽게 처리 과정을 자동화한다. 이를 통해 취합자(aggregator)는 개별 내용 아이템에 집중할 수 있고 키워드 분류로 독자의 구미에 맞는 내용을 추측할 수 있다.
샘플 RSS 피드
하지만 RSS 피드를 더 강력하게 만드는 것은 우아하면서도 간단한 스키마뿐 아니라 어떤 채널 아이템 폼이든 넣어 쉽게 확장할 수 있다는 사실에 있다. RSS 요소에 추가 XML 이름공간을 넣어 확장할 수 있다. 최고의 예제는 야후의 날씨 피드로 Listing 1에서 주석과 함께 볼 수 있다.
Listing 1. 샘플 RSS 피드—우편번호 02139 지역의 야후 일기 예보
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<rss version="2.0"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0"
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<channel>
<title>Yahoo! Weather - Cambridge, MA</title>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/
Cambridge__MA/*http://weather.yahoo.com/forecast/USMA0066_f.html</link>
<description>Yahoo! Weather for Cambridge, MA</description>
<language>en-us</language>
<lastBuildDate>Wed, 28 Nov 2007 2:54 pm EST</lastBuildDate>
<ttl>60</ttl>
<yweather:location city="Cambridge" region="MA" country="US" />
<yweather:units temperature="F" distance="mi" pressure="in" speed="mph" />
<yweather:wind chill="38" direction="350" speed="9" />
<yweather:atmosphere humidity="43" visibility="1609"
pressure="30.38" rising="1" />
<yweather:astronomy sunrise="6:50 am" sunset="4:14 pm" />
<image>
<title>Yahoo! Weather</title>
<width>142</width>
<height>18</height>
<link>http://weather.yahoo.com/</link>
<url>http://l.yimg.com/us.yimg.com/i/us/nws/th/main_142b.gif</url>
</image>
<item>
<title>Conditions for Cambridge, MA at 2:54 pm EST</title>
<geo:lat>42.38</geo:lat>
<geo:long>-71.12</geo:long>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/
Cambridge__MA/*http://weather.yahoo.com/forecast/USMA0066_f.html</link>
<pubDate>Wed, 28 Nov 2007 2:54 pm EST</pubDate>
<yweather:condition text="Mostly Cloudy" code="28" temp="43"
date="Wed, 28 Nov 2007 2:54 pm EST" />
<description><![CDATA[
<img src="http://l.yimg.com/us.yimg.com/i/us/we/52/28.gif" /><br />
<b>Current Conditions:</b><br />
Mostly Cloudy, 43 F<BR /><BR />
<b>Forecast:</b><BR />
Wed - Sunny. High: 45 Low: 31<br />
Thu - PM Showers. High: 48 Low: 29<br />
<br />
<a href="http://.........html">Full Forecast at
Yahoo! Weather</a><BR/>
(provided by The Weather Channel)<br/>
]]></description>
<yweather:forecast day="Wed" date="28 Nov 2007" low="31" high="45"
text="Sunny" code="32" />
<yweather:forecast day="Thu" date="29 Nov 2007" low="29" high="48"
text="PM Showers" code="39" />
<guid isPermaLink="false">USMA0066_2007_11_28_14_54_EST</guid>
</item>
</channel>
</rss><!-- p4.weather.sp1.yahoo.com compressed
Wed Nov 28 12:03:12 PST 2007 -->
|
이 경우 날씨 발견 요소를 내장한 RSS 인식 애플리케이션은 설명을 보여주거나(코드에 딸려오는 HTML 조각임을 알 수 있다) 원하는 아이템만 보여준다(예를 들어 day="Thu"에 yweather:forecast). 더 많은 문법이 발행되고 더 많은 의미(semantic)정보가 추가될수록 내용 배포 플랫폼으로 RSS 사용은 오늘날 HTML만큼이나 독보적인 존재가 될 것이다.
RSS의 유연성 덕에 RSS를 일반적인 데이터 저장 포맷으로 사용하려고 한다. 하지만 먼저 RSS가 제공하는 정보가 무엇인지 살펴보자.
RSS 피드 내의 요소
표 1은 RSS 피드에서 발견할 수 있는 중요한 요소를 요약한다. 굵은 글씨의 요소는 선택적이지만 다른 요소들은 필수다. 대다수의 요소는 <channel> 컨텍스트나 <item> 컨텍스트에서 사용돼 피드 발행자가 채널 기본을 설정하면서 필요한 경우 아이템 당 기준으로 겹쳐쓸 수 있다.
표 1. RSS 피드의 주요 요소
| 요소 | 뜻 |
|---|
| 설명 | 채널을 설명하는 하나 또는 두 문장의 설명으로 커서가 채널 이름 위에 있을 때 RSS 리더의 툴팁으로 사용된다. | | 링크 | 채널의 URL(HTML 내용) | | 제목 | RSS 채널의 제목을 보여주고 채널 이름으로 사용된다. | |
이미지
| 선택적 이미지 자식 요소. 이미지는 다음과 같이 렌더되는 높이, 넓이, 제목, 링크, URL 자식을 가지고 있다.
<A href="link">
<IMG src="url" title="title" height="height" width="width" />
</A>
|
| |
pubDate
| RFC822 시간으로 내용이 발행될 때 지정된다. | |
ttl
| 채널 내용을 캐싱하기 위한 초 단위로 제안되는 시간. | |
카테고리
| 특정 채널이나 아이템 분류 | |
전역 고유 식별자
| 전역 고유 식별자. URL 또는 다른 식별자로 유일해야 하기 때문에 질문의 아이템에 정확하고 유일한 레퍼런스를 제공한다. |
선택적 요소는 특히 RSS에 강력한 기능을 추가한다. pubDate와 ttl(Time to Live-유효 시간)은 내용이 언제 유효한지, 유효한지 그렇지 않은지를 나타내 리더(reader)에서 한 편으로는 내용을 캐시하고 다른 한 편으로는 유효 기간이 지난 내용을 피할 수 있도록 한다. guid는 전역 고유 식별자로 본 애플리케이션에서 사용할 수 있도록 할 것이다. 이 글에서 대다수의 애플리케이션은 URL을 사용한다. 이 때 URL은 컨텍스트 내 어딘가에서 인용되지 않는 아이템이라면 실제 URL일 필요는 없다. 카테고리 요소는 내용의 의미 맥락(semantic context)을 추론하는 주요 요소다. Flickr나 Digg 등 태그를 사용하는 사이트들 봤다면 카테고리가 작동하는 것을 봤을 것이다.
표 1에는 필요한 목록만 간략히 있다. RSS 명세서에서 요소의 전체 목록을 찾을 수 있다(참고자료의 링크를 보자). 또한 RSS 컨테이너 컨텍스트에서 요소의 이름공간만 선언해준다면 어떤 요소든 추가할 수 있다.
RSS를 데이터 저장소로 사용하기
지금까지 새로운 것은 없었다. RSS는 여느 스펙과 다를 바 없다. 개인적인 취합자나 특화된 리더 또는 브라우저에 내장된 RSS 지원을 사용하여 로 RSS 피드를 이미 사용했을 확률이 높다. 하지만 RSS를 실제 데이터 저장소 포맷으로 사용할 수 있다는 사실은 몰랐을 것이다.
데이터베이스의 전통적인 모델에서 데이터는 테이블에 저장됐다. 테이블은 하나 또는 그 이상의 키로 색인되며 아이템은 테이블에 레코드 형태로 저장된다. 구조화된 질의 언어(대체로 SQL)를 사용하여 특정 테이블에서 레코드나 필드를 찾아올 수 있고 이를 다른 테이블의 데이터로 링크(또는 JOIN)할 수 있다. 본 튜토리얼에서 보여주는 모델은 더 결합적이며 인간 뇌의 사고 과정을 따라했다. 시작하기 전에 결합이 어떻게 작동하는지 이해해보자.
인간의 두뇌는 세포들(또는 신경)의 복잡한 덩어리이며 축색돌기로 각각 연결돼 있다. 어떻게 작동하는지에 대한 자세한 설명은 본 튜토리얼의 범위 밖이지만(또한 이 글을 쓰는 지금 실제로 존재하지도 않는다) 각 신경이 실제 RSS 아이템이라는 단순화한 모델을 생각해보자. 이 아이템은 제목, 가능한 설명, 그리고 제일 중요하게 guid에 유일한 표현을 가지고 있다. 선택적으로 아이템과 관련된 모든 종류의 특정 데이터를 가지고 있을 수도 있지만, 일단 여기서는 차치하자. 이제 이 아이템이 링크가 되는 축색돌기로 다른 아이템과 연결될 수 있다. 여기서 무엇을 갖겠는가? 아이템과 링크의 토폴로지가 생겨나고 그래서 결합된 네트워크라고 불린다.
왜 이 이야기를 언급하는가? 그 이유는 본 튜토리얼에서 마치 신경이 축색돌기를 통해 각각 연결되듯 각기 다른 데이터(사람, 장소, 약속)가 RSS 데이터를 통해 서로 연결되는 애플리케이션을 만들 것이기 때문이다.
이제 데이터베이스를 만들어보자.
|