본문 바로가기
프로그램 (PHP,Python)

RSS 기술 소개 및 활용

by 날으는물고기 2009. 4. 24.

RSS 기술 소개 및 활용

요즘 웹2.0의 기술 중 하나인 RSS가 여러모로 관심을 받고 있는 것 같습니다. 그래서 나름대로 정리해 볼 생각으로 글을 쓰게 됐습니다.

앞으로 다음 순서로 RSS에 대해 연재해 볼 생각입니다.

1. RSS 란 무엇인가 ?
2. RSS 활용
3. RSS 기술 소개
    3.1. RSS 역사
    3.2. RSS 1.0 소개
    3.3. RSS 2.0 소개
    3.4. ATOM 1.0 소개
4. RSS의 확장
    4.1. Podcast 소개: Podcast 란 무엇인가?
    4.2. OPML 소개
    4.3. MediaRSS 소개
5. RSS 발전 방향


1. RSS 란 무엇인가 ?


RSS에서 대해 알아보려면 우선 RSS가 뭔지부터 알아 봐야 되겠죠 ?

Wikipedia 백과 사전에 가서 RSS 하고 쳤더니 제일 처음에는 다음과 같이 나오네요.

RSS is a family of web feed formats used to publish frequently updated pages, such as blogs or news feeds. Consumers of RSS content use special browsers called aggregators to watch for new content in dozens or even hundreds of web feeds. The initials "RSS" are variously used to refer to the following standards:

  • Really Simple Syndication (RSS 2.0)
  • Rich Site Summary (RSS 0.91, RSS 1.0)
  • RDF Site Summary (RSS 0.9 and 1.0)

대충 해석을 해 보자면 뉴스  Site 나 블로그처럼 자주 갱신되는 Site의 내용을 feed 받을 수 있도록 해주는 파일 형식이다. 이 feed 를 받으려면 aggregator 라고 하는 전용 브라우저를 써야 한다. 이런 정도로 얘기할 수 있을 것 같습니다.

RSS가 처음에 나왔을 때는 RDF Site Summary 또는 Rich Site Summary 로 불리다가 요즘은 Really Simple Syndication 이라고 불리나 봅니다.

Syndication 이라고 이름을 붙인 건 현실 세계에서 신문/잡지와 같은 컨텐트를 배급하는 회사를 syndication이라고 하는 것처럼 RSS 도 웹 상에서 블로그의 article 이나 뉴스의 기사들을 배급해 주는 파일 형식이기 때문인 것이겠죠.

현실 세계의 배급과 비교한다면 RSS 는 거의 0에 가까운 비용-초고속 인터넷의 활성화로 인해-으로 컨텐트를 배급할 수 있다는 것이 큰 차이점이라고 볼 수 있고, 이런 특성 때문에 최근 여러 Site 에서 RSS를 지원하는 것으로 보입니다. 심지어 조선일보는 아예 기사 전문을 RSS 를 통해 서비스를 해주고 있네요. 그 배포력에 있어서 큰 차이가 있기 때문에 기존 미디어들도 RSS를 통해 컨텐트를 배급하고 독자의 관심을 끌어서 광고에 연결시키려는 게 아닌가라는 생각이 듭니다.
2,3년 전부터 1인 미디어라는 것이 인구에 회자되기 시작한 배경에 이 RSS도 한 몫을 톡톡히 한 것 같습니다. RSS를 통해 이렇게 제로에 가까운 비용으로 배급이 가능하기 때문에 전에는 아무리 컨텐트를 생성할 수 있는 능력이 있어도 배급채널이 없어서 미디어로서의 역할을 꿈에도 꾸지 못했던 일반 개인들이 1인 미디어로서 활동할 수 있게 됐기 때문입니다.

뭐 아무리 RSS 가 아무리 좋다고 하더라도 우리가 직접 쓸 수가 없으면 무용지물이겠죠 ? 1인 미디어니 배포력이니 하는 것들은 그쪽을 잘 아시는 분들이 얘기하도록 놔 두구요. 우리는 우리 필요부터 채워야 겠습니다.

이 RSS를 실생활에서 어떻게 써먹을 수 있을까요 ? 요즘 많은 분들이 신문을 직접 구독하기 보다는 잠시 짬을 내서 신문사 홈페이지나 다음 미디어등 각종 소식을 다루는 다양한 싸이트에 여기 저기 돌아다니시면서 새로운 소식을 접하실 겁니다. 그런 분들에게는 이 RSS가 딱입니다.


2. RSS 활용

지난 1. RSS 란 무엇인가 ? 라는 글에서 아주 아주 간략하게 RSS 가 뭔지에 대해서 얘기해 봤습니다.

이 전 글에서 말씀드렸다시피 RSS feed 라는 걸 구독하기 위해서는 RSS reader-aggregator라고도 합니다-가 필요합니다. 그럼 RSS reader 는 어디서 구할 수 있지 ? 그리고 어떤 걸 쓰는 게 좋을까요 ? 요즘은 질문할 게 생기면 바로 가는 데가 있으실 겁니다. 어디요 ? 예~ 네이버요. 아 다른 분은 구글신에게 가신다는 군요.

아무래도 구글신은 영어 쪽을 잘 찾아주니 네이버로 가서 우리나라 RSS reader 를 찾으면 더 좋을 것 같습니다. 네이버에서 RSS reader 를 찾으면 당장 이것 저것 찾아서 보여줍니다. 물론 스폰서 링크부터 보여줍니다. :-< 죽 검색 결과를 훑어 봤는데 저에게는 블로그 검색 결과로 나온 "RSS reader 종류는 그리고 어떤 것을 쓸까?" 글이 눈에 띄더군요.

우리 나라에서는 다음 두 가지의 RSS reader 가 많이 쓰이는 것 같습니다.

연모          프로그램을 따로 설치해야 합니다. http://www.yeonmo.co.kr/ 
HanRSS    웹 상에서 쓰는 RSS리더입니다. http://www.hanrss.com/ 

연모는 위 싸이트에 직접 들러서 설치하셔도 되고, 귀찮으신 분은 여기 에서 바로 다운로드 받으실 수 있습니다. 무료니까 걱정하지 마시고, 다운로드해서 쓰시기 바랍니다. spyware 나 그런 거 설치하지도 않습니다.

다음은 연모를 실행한 화면입니다. 화면 중간에서 보듯이 RSS 디렉토리 목록이 있기 때문에 그 중에 관심이 있으신 것들을 "연모에 추가" 버튼을 눌러서 등록해서 쓰시면 됩니다. RSS 를 등록하면 왼쪽에 트리 같은 곳에 목록이 쭉 나오게 됩니다. 그 다음부터는 원하는 기사를 그냥 클릭해서 보시면 됩니다.

사용자 삽입 이미지

<이미지를 클릭하면 크게 보실 수 있습니다>

연모는 직접 프로그램을 설치해서 써야하는 거라 귀찮은 분들이 있으실 것 같은데요... 특히나 컴퓨터에 프로그램을 설치한다 뭐 그런 걸 별로 안해 보신 분은 더 그럴 것 같습니다. 그런 분에게는 웹 상에서 바로 쓰는 HanRSS 리더가 추천할 만 합니다.

다음 화면은 HanRSS Reader 싸이트에 접속한 후에 서비스 둘러보기로 들어간 것입니다.

사용자 삽입 이미지

<이미지를 클릭하면 크게 보실 수 있습니다>

HanRSS도 프로그램 설치 없이 웹 상에서 바로 쓸 수 있다는 점을 빼면 거의 비슷한 방식이라는 걸 느끼실 수 있을 것입니다. HanRSS는 자신의 RSS 목록을 웹 상에서 등록해서 사용하기 때문에 사용자 등록을 하셔야 합니다. 다른 싸이트 사용자 등록과 달리 이메일만 등록하면 되기 때문에 등록 과정이 매우-정말 매우입니다-간단합니다. 이메일/암호 등록하고, 자기 이메일로 온 인증 링크를 한 번 클릭하면 사용자 등록 끝입니다.

HanRSS도 화면 오른쪽에 보듯이 RSS 디렉토리, 인기 RSS, 추천 RSS 등이 있기 때문에 그 중에 맘에 드는 것을 골라 클릭하면 RSS 등록 페이지가 나오고, 각 RSS 항목에 "내 RSS에 추가" 링크가 있는 걸 보실 수 있습니다. 그걸 클릭하시면 위 그림의 왼쪽에 있는 RSS 목록에 들어가게 됩니다. HanRSS는 연모에 비해서 podcast, videocast 도 비교적 쉽게 사용할 수 있도록 잘 지원해주는 것 같습니다.


HanRSS는 웹 기반이므로 등록해 두면 어디를 가더라도 인터넷만 된다면 그곳에서 HanRSS에 접속하면 자신이 관심있는 것들을 볼 수 있다는 점에서 좋을 것 같습니다. 연모도 PC에 설치해서 쓰는 프로그램이긴 하지만 연모 싸이트에 로그인을 하면 씽크가 된다고 하네요.

저는 개인적으로 연모나 HanRSS를 쓰지 않고, 최근 릴리즈된 Firefox 2.0의 Live Bookmark 기능을 이용해서 RSS를 구독하고 있습니다. 예를 들어 Firefox 2.0 으로 www.zdnet.co.kr 에 가면 다음 화면에서 주소창에 동그라미로 표시한 것처럼 RSS 아이콘이 활성화됩니다.

사용자 삽입 이미지
<이미지를 클릭하면 크게 보실 수 있습니다>
 
RSS 아이콘을 누르게 되면 또 다음 그림 처럼 RSS feed 를 등록할 수 있는 화면이 나오게 됩니다. 그리고 나서 등록하기 버튼을 누르면 Live bookmark 로 등록이 됩니다.
 
사용자 삽입 이미지
 
<이미지를 클릭하면 크게 보실 수 있습니다>
 
이렇게 등록을 하고 나면 Live bookmark 가 해당 RSS 를 읽어 들여서 항상 최신 글 목록이 유지도록 해줍니다. 다음은 조선일보의 기사 목록을 Live bookmark로 보여주는 화면입니다.
 
사용자 삽입 이미지
 
<이미지를 클릭하면 크게 보실 수 있습니다>
 
Firefox는 RSS를 Live Bookmark로만 등록하는 게 아니라 다른 RSS reader를 이용할 수 있는 방법도 제공합니다. 예를 들어, HanRSS에 추가하고 싶으면 RSS 구독 방법으로 HanRSS를 선택하시면 됩니다.
 
사용자 삽입 이미지
 
<이미지를 클릭하면 크게 보실 수 있습니다>
 
MS의 Internet Explorer 7.0에도 Firefox 2.0의 Live bookmark와 비슷한 기능이 있으니 그걸 사용하셔도 좋을 것입니다.
 
그리고, 마지막으로 Outlook을 거의 계속 띄워 놓고 있다시피한 분을 위해서는 Newsgator를 추천해 드리고 싶네요. Newsgator는 여기에서 구하실 수 있습니다. 단지 좀 돈을 주고 사야한다는 점이 걸리긴 하네요. 더 자세한 설명은 유명한 블로거 중에 한 분이신 likejazz 님RSS Reader : NewsGator 1.3(Outlook add-in) 글을 보시면 됩니다.

조금 오래된 글이긴 하지만 이 자신의 RSS 구독 통계를 중심으로 우리나라의 RSS reader 기 시장을 분석한 글이 있습니다. 재미삼아 읽어 보시는 것도 좋을 것 같습니다.

태우님의 한국 RSS 리더 시장 분석

이제 여러분은 RSS 이용할 준비는 다 되셨네요. 그렇다면 뭐 더 주저할 필요 있나요. 지금이라도 아무 RSS reader기를 이용해서 RSS의 세계로 빠져드는 것도 재밌지 않을까요 ?


3.1 RSS 역사

RSS 기술 소개를 할 때는 항상 그냥 넘어갈 수 없는 부분이 있습니다. RSS의 역사입니다. RSS의 역사에 대해서는 다양한 글(Wikipedia RSS history section)에서 다루고 있기 때문에 굳이 여기에서 자세히 다룰 필요는 없을 것 같고, 여기에서는 여러 버전간의 발전 스텝을 간략히 소개하는 것으로 대신해야 할 것 같습니다.

- 97년 Apple의 Advanced Technology Group 소속의 Ramanathan이 Meta Content Framework 라는 기술을 개발함. MCF는 web site 와 다른 데이터에 대해 metadata 정보를 구조화하는 규격이었음.

- 97년 그 이후 연구 과제가 취소되어 Ramanathan 이 Apple 에서 Netscape 로 이적함. Ramanathan은 Netscape에서 MCF가 XML 기술을 사용하도록 변경하여 RDF 초기 버전을 정의함.

- 97년 Dave Winer 는 Scripting News weblog에서 사용하기 위해 나름의 XML syndication 포맷을 정의함

- 99년 Netscape의 Dan Libby가 My Netscape portal에서 사용하기 위해 RDF Site Summary 라는 이름으로 RSS 0.9 버전을 만듦. 그 후, 몇 가지 comment와 제안을 받아서 Scripting News의 특징을 추가한 RSS 0.91 을 만들어 냄. 이 쯤에서 RSS-DEV working group과 mailing list가 생김. 한편 Winer 는 또 다른 버전의 RSS 0.91을 만듦. 이 때부터 소위 RSS fork가 생기기 시작하면서 버전이 갈리게 됨.

- 00년 RSS-DEV group은 RDF에 기반을 둔 RSS 1.0을 릴리즈

- 02년 한편 Winer 는 RSS 0.92, RSS 0.93, 0.94를 거쳐 최종적으로 "Really Simple Syndication" 이라는 이름으로 RSS 2.0을 릴리즈

- 02년 The New York Times 가 RSS 서비스를 시작함
결국 정리하자면,

MCF --+--> RSS 0.9 --+--+--> RSS 0.91(N) --> RSS 1.0
      |              |  |
XML --+              |  +--> RSS 0.91(D) --> RSS 0.92,0.93,0.94 ---> RSS 2.0
                     |
scripting news ------+


이렇게 됩니다. 그래서 지금도 RSS 1.0, RSS 2.0과 같이 이름은 같지만 서로 다른 형식을 가진 syndication 형식이 사용되고 있습니다. RSS 1.0 --> RSS 2.0 이런 발전 관계가 없기 때문에 RSS 1.0과 RSS 2.0 사이에는 통상 표준이 갖는 하위 호환성이 전혀 없습니다.

이런 호환성 문제에다가 RSS 2.0은 frozen 됐다고 하면서 더 이상 발전이 안되고 있기 때문에 몇 몇 뜻이 맞는 사람들이 새로운 syndication format 으로 ATOM이라는 걸 정의해서 현재 IETF 표준으로 지정되기에 이르렀습니다.

그래서 결론적으로 말씀드리면 현재 web feed syndication format 으로는 RSS 1.0, RSS 2.0, ATOM 1.0(또는 0.3) 등이 사용되고 있습니다. 네이버 블로그를 보면 이런 웃지 못할 일이 벌어지고 있습니다.
사용자 삽입 이미지

네이버에서는 총 3가지의 syndication format을 지원하고 있네요. zdnet 에서는 한 술 더 떠서 네 가지를 지원하고 있습니다.

사용자 삽입 이미지

(OPML은 syndication format이 아니라서 제외) 표준화가 제대로 안 되면 어떻게 되는지 단적으로 보여 주는 사례라고 생각합니다. 그러니 혹시 표준화에 참여하시는 분들 웬만하면 성질 죽이고 하나로 통일해서 만듭시다.

헉! 전혀 의도한 바는 아니었는데, 간략하게 발전 스텝을 알아 본다는 것이 여기까지 와 버렸네요.



3.2 RSS 1.0 소개

RSS는 별로 복잡하지 않은 형식이라서 XML을 조금이라도 아시는 분은 한 번 보면 대충 이해하실 수 있습니다. 복잡한 Spec. 을 일일이 설명하기 보다는 예제로 설명드리도록 하겠습니다. 아래 예제의 파란색에 주목을 하세요.

3.2.1. RSS 1.0 예제

<?xml version="1.0"?>

<rdf:RDF

  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

  xmlns="http://purl.org/rss/1.0/">


  <channel rdf:about="http://www.xml.com/xml/news.rss">

    <title>XML.com</title>

    <link>http://xml.com/pub</link>

    <description>

      XML.com features a rich mix of information and services

      for the XML community.

    </description>

    <image rdf:resource="http://xml.com/universal/images/xml_tiny.gif" />

    <items>

      <rdf:Seq>

        <rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt.html" />

        <rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/index.html" />

      </rdf:Seq>

    </items>

    <textinput rdf:resource="http://search.xml.com" />

  </channel>


  <image>rdf:about="http://xml.com/universal/images/xml_tiny.gif">

    <title>XML.com</title>

    <url>http://xml.com/universal/images/xml_tiny.gif</url>

    <link>http://www.xml.com</link>

 

</image>

  <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">

    <title>Processing Inclusions with XSLT</title>

    <link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>

    <description>

     Processing document inclusions with general XML tools can be

     problematic. This article proposes a way of preserving inclusion

     information through SAX-based processing.

    </description>

  </item>


  <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">

    <title>Putting RDF to Work</title>

    <link>http://xml.com/pub/2000/08/09/rdfdb/index.html</link>

    <description>

     Tool and API support for the Resource Description Framework

     is slowly coming of age. Edd Dumbill takes a look at RDFDB,

     one of the most exciting new RDF toolkits.

    </description>

  </item>


  <textinput rdf:about="http://search.xml.com">

    <title>Search XML.com</title>

    <description>Search XML.com's XML collection</description>

    <name>s</name>

    <link>http://search.xml.com</link>

  </textinput>


</rdf:RDF>

3.2.2. 최상위 요소들

RSS 1.0 문서의 가장 최상위에 있는 요소는 위에서 보듯이 rdf:RDF 입니다. RDF 앞에 붙은 rdf: 은 RDF 라는 tag의 namespace를 나타내는 것으로 RSS 0.9 버전과의 호환성을 위해서는 rdf: 로 써야 합니다-원래 XML namespace rule 에 따르면 이렇지 않습니다.

rdf:RDF 아래에 channel, image, item, textinput 등의 요소가 따라와야 합니다. 여기서 image 와 textinput 은 없어도 되구요, channel 은 한 개만, item 은 한 개 이상 올 수가 있습니다.

그도 그럴 것이 channel 은 RSS feed(또는 channel) 자체에 대한 설명이므로 꼭 하나만 있어야 될테구요, item 은 기사 항목 하나하나를 뜻 하므로 하나 이상 있어야 할 것입니다. 그리고, image 는 RSS channel 에 대한 image 또는 icon 으로 생각하시면 되는데, 언뜻 생각하기에도 없다고 해서 반드시 문제될 요소는 아닐 것입니다. 마지막으로 textinput 은 search 기능과 연결하기 위해 search 키워드를 입력할 수 있도록 하기 위해 사용됩니다. 없어도 괜찮을 것 같죠 ?

여기까지가 가장 최상위 요소들에 대한 설명입니다. 최상위 요소들은 보기 쉽게 파란색으로 나타냈습니다. 그러니까, 최상위 요소들만 나타내다면 이렇게 되겠네요.

<?xml version="1.0"?>

<rdf:RDF>

  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

  xmlns="http://purl.org/rss/1.0/">

  <channel rdf:about="http://www.xml.com/xml/news.rss">

  </channel>

  <image rdf:about="http://xml.com/universal/images/xml_tiny.gif">

  </image>

  <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">

  </item>

  <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">

  </item>

  <textinput rdf:about="http://search.xml.com">

  </textinput>

</rdf:RDF>


3.2.3. channel 요소


다음은 channel 요소에 대해 알아보겠습니다.


  <channel rdf:about="http://www.xml.com/xml/news.rss">

    <title>XML.com</title>

    <link>http://xml.com/pub</link>

    <description>

      XML.com features a rich mix of information and services

      for the XML community.

    </description>

    <image rdf:resource="http://xml.com/universal/images/xml_tiny.gif" />

    <items>

      <rdf:Seq>

        <rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt.html" />

        <rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/index.html" />

      </rdf:Seq>

    </items>

    <textinput rdf:resource="http://search.xml.com" />

  </channel>


위에서 보시다 시피 channel 안에는 title, link, description, image, items, textinput 이 차례로 와야 합니다. 이 중에 image 와 textinput 을 제외하고는 모두 필수입니다. channel 요소에는 rdf:about 이라는 속성이 있는데, 이 속성에는 channel을 hosting 하는 홈페이지 주소나 RSS 파일자체의 URL이 옵니다.


channel 아래에 title 요소는 당연히 channel 의 제목이라고 생각하시면 되고, link는 보통은 RSS를 제공하는 홈페이지주소를 나타내고, description 은 channel 에 대한 간략한 설명이 나옵니다. image는 channel를 대표해줄 수 있는 icon의 url이 나옵니다. 이 url 은 앞에서 설명한 최상위 요소중 하나인 image 요소-rdf:RDF 요소 아래의 image 요소의 rdf:about 속성과 일치해야 합니다.


items 는 보통 문서의 TOC(Table Of Contents)라고 생각하시면 됩니다. RSS feed 의 content 목록을 나타내는 부분으로 rdf:li 요소 하나 하나가 개별 content를 나타내고, rdf:li의 resource속성의 값은 아래 3.2.5 에서 설명하는 item 요소의 rdf:about 속성의 값과 일치해야 합니다.


3.2.4. image 요소


다음은 image 요소에 대해 알아보겠습니다.


  <image rdf:about="http://xml.com/universal/images/xml_tiny.gif">

    <title>XML.com</title>

    <url>http://xml.com/universal/images/xml_tiny.gif</url>

    <link>

http://www.xml.com</link>

  </image>


image 요소는 전체적으로 보면 RSS feed 를 icon 으로는 어떻게 나타낼 것인가에 대한 정보를 가지고 있습니다. 당연히 가장 중요한 정보는 그 icon의 url이 될테구요. title 은 image 대신 나타낼 text를 나타냅니다. 그리고, url 은 image의 url 이구요, link 는 이미지를 클릭했을 때 가게될 site 주소를 나타냅니다. link 는 대부분 channel 의 홈 페이지이겠죠 ?


3.2.5. item 요소


다음은 item 요소에 대해 알아보겠습니다.


  <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">

    <title>Processing Inclusions with XSLT</title>

    <link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>

    <description>

     Processing document inclusions with general XML tools can be

     problematic. This article proposes a way of preserving inclusion

     information through SAX-based processing.

    </description>

  </item>


item 은 RSS feed의 기사 또는 content 하나 하나를 나타냅니다. link는 해당 item 을 클릭했을 때 가게될 보통은 기사 내용 전문을 볼 수 있는 URL을 뜻합니다. 때로는 이 description 안에 기사 내용 전문이 들어가게 되는 경우도 있습니다. 보통은 text 만 들어가기 때문에 기사 안에 이미지나 오디오, 동영상 등이 있을 경우에는 보이지 않을 수도 있습니다.


RSS 1.0 전체 요소 중 가장 중요한 요소라고도 할 수 있겠습니다.


3.2.6. texinput 요소


이 요소는 실제적으로는 거의 쓰이지 않는 요소라서 별로 설명드려야할 필요성을 못 느끼겠네요. 그냥 search box 를 추가하는 정도라고 생각하시면 될 듯합니다. 제가 여기 저기 RSS feed에 가입해 봤지만 아직까지 search box 를 쓰는 곳은 본 적이 없습니다.


여기까 지 설명 드린 것은 RSS 1.0의 기본 요소들이구요. 이 기본 요소들 외에 XML namespace를 이용하여 필요한 metadata를 확장할 수 있습니다-이걸 module 이라고 합니다. 현재 정의된 표준 module 들은 다음 네 가지 정도가 있습니다.

Dublin Core 는 content 자체에 대한 다양한 metadata를 나타내고, Syndication 은 배급 주기, 갱신 횟수, 갱신 기준 시각 등과 같이 배급에 관련된 정보를 나타냅니다. Content 는 content 자체의 encoding 형식을 나타내고, Taxonomy는 글의 카테고리에 대한 정보를 나타내는 데 주로 사용됩니다.

3.2.7. module 활용 예제

아래 예제는 module 까지 쓰고 있는 예제로 제 blog 가 RSS 1.0 으로 feeding 되고 있는 예입니다.

<?xml version="1.0" encoding="EUC-KR" ?>
<rdf:RDF
 xmlns="http://purl.org/rss/1.0/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" >
   
 <channel rdf:about="http://blog.rss.naver.com/blogRss.nhn?blogId=yesarangk&amp;rss=1.0">
  <title><![CDATA[S/W 개발에 대한 단상]]></title>
  <link>http://blog.naver.com/yesarangk</link>
  <description><![CDATA[저는 소프트웨어 개발을 업으로 하는 사람입니다.]]></description>
  <items>
   <rdf:Seq>
    <rdf:li resource="0" />
    <rdf:li resource="1" />
    <rdf:li resource="2" />
    ......

   </rdf:Seq>
  </items>
  <dc:date>Sat, 23 Dec 2006 23:17:16 +0900</dc:date>
  <dc:language>ko</dc:language>
  <dc:rights>Copyright(c) NHN Corp. All Rights Reserved.</dc:rights>
 </channel>
 <image rdf:about="http://blogfiles.naver.net/data6/2005/4/10/253/크기변환_DSC03278.jpg">
  <title><![CDATA[S/W 개발에 대한 단상]]></title>
  <url>http://blogfiles.naver.net/data6/2005/4/10/253/크기변환_DSC03278.jpg</url>
  <link>http://blog.naver.com/yesarangk</link>
 </image>
 <item rdf:about="0">
  <category><![CDATA[낙서장]]></category>
  <title><![CDATA[Merry Christmas & Happy New Year]]></title>
  <link>http://blog.naver.com/yesarangk/40032346162</link>
  <description><![CDATA[여기에 오시는 모든 분들 즐거운 성탄과 행복한 새해 맞이하시길 바랍니다. 새해에는 여러 분이 꿈꾸는 일들 모두 이루시길 바라고, 더욱 더 행복해지는 한 ]]></description>
  <dc:date>Thu, 21 Dec 2006 22:41:36 +0900</dc:date>
 </item>
 <item rdf:about="1">
  <category><![CDATA[기술동향]]></category>
  <title><![CDATA[3. RSS 기술 소개 #2 - RSS 1.0 소개]]></title>
  <link>http://blog.naver.com/yesarangk/40032271600</link>
  <description><! [CDATA[요즘 웹2.0의 기술 중 하나인 RSS가 여러모로 관심을 받고 있는 것 같습니다. 그래서 나름대로 정리해 볼 생각으로 글을 쓰게 됐습니다.RSS에 대해 연재식으로 ]]></description>
  <dc:date>Tue, 19 Dec 2006 23:46:55 +0900</dc:date>
 </item>
 <item rdf:about="2">
  <category><![CDATA[기술동향]]></category>
  <title><![CDATA[3. RSS 기술 소개 #1 - RSS 역사]]></title>
  <link>http://blog.naver.com/yesarangk/40032231861</link>
  <description><! [CDATA[요즘 웹2.0의 기술 중 하나인 RSS가 여러모로 관심을 받고 있는 것 같습니다. 그래서 나름대로 정리해 볼 생각으로 글을 쓰게 됐습니다.RSS에 대해 연재식으로 ]]></description>
  <dc:date>Tue, 19 Dec 2006 00:39:21 +0900</dc:date>
 </item>

 ......
</rdf:RDF>

namespace 상에는 여러 module 이 정의되어 있지만 정작 실제로 쓰이고 있는 module 은 Dublin Core module 만 쓰고 있네요. channel 요소의 items 의 rdf:li 요소의 resource 속성 값과 각 item 의 rdf:about 속성값이 서로 일치되어 있는 것에 유의하시기 바랍니다.

그리고, 신기한 건 item 요소 아래에 category 요소가 있다는 게 조금 이상하네요. RSS 1.0 에는 category 라는 요소는 정의되어 있지 않은데 말이죠. 아무래도 naver blog 에서 잘못 처리하고 있는 듯 합니다.

RSS 1.0 규격은 이곳에서 보실 수 있습니다.



3.3 RSS 2.0 소개


RSS 2.0은 Really Simple Syndication의 약자로 RSS 1.0가 RDF Site Summary의 약자인 것과 다릅니다. RSS 2.0도 RSS 1.0 형식과 크게 다르지 않습니다. 이번에도 복잡한 Spec. 을 일일이 설명하기 보다는 예제로 설명드리도록 하겠습니다. 아래 예제의 굵은체에 주목을 하세요.

3.3.1. RSS 2.0 예제

<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Liftoff News</title>
    <link>http://liftoff.msfc.nasa.gov/</link>
    <description>Liftoff to Space Exploration.</description>
    <language>en-us</language>
    <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
    <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Weblog Editor 2.0</generator>
    <managingEditor>editor@example.com</managingEditor>
    <webMaster>webmaster@example.com</webMaster>

    <image>
      <url>http://blogfiles.naver.net/data6/2005/4/10/253/DSC03278.jpg</url>
      <title>Liftoff News</title>
      <link>http://liftoff.msfc.nasa.gov/</link>
    <image>

    <item>
      <title>Star City</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
      <description>How do Americans get ready to work with Russians aboard the
        International Space Station? They take a crash course in culture, language
        and protocol at Russia's Star City.</description>
      <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
    </item>

    <item>
      <title>Space Exploration</title>
      <link>http://liftoff.msfc.nasa.gov/</link>
      <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada
        will experience a partial eclipse of the Sun on Saturday, May 31st.</description>
      <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
    </item>
   
    <item>
      <title>The Engine That Does More</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>
      <description>Before man travels to Mars, NASA hopes to design new engines
        that will let us fly through the Solar System more quickly.  The proposed
        VASIMR engine would do that.</description>
      <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>
    </item>
   
    <item>
      <title>Astronauts' Dirty Laundry</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>
      <description>Compared to earlier spacecraft, the International Space
        Station has many luxuries, but laundry facilities are not one of them.
        Instead, astronauts have other options.</description>
      <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>
    </item>
  </channel>
</rss>

3.3.2. RSS 2.0 최상위 요소

RSS 2.0과 RSS 1.0의 가장 큰 차이점은 <channel> 요소와 <item> 요소의 분리 여부에 있습니다. 즉, RSS 1.0에서는 <channel> 요소 안에 <items>라는 TOC 역활을 하는 부분이 있고, <channel>과 독립적으로 <item> 요소가 존재하는 형식이었지만, RSS 2.0에서는 <channel> 요소 안에 <item> 이 포함되어 있습니다.

개발자 입장에서 본다면 RSS 1.0보다는 RSS 2.0이 더 바람직해 보입니다. 왜냐면 RSS 1.0은 <channel> 아래의 <items>에 기술된 내용과 <item> 각각을 서로 매치시켜야 하기 때문입니다. 굳이 <channel> 요소 안에 있는 <items> 같은 것들이 필요해 보이진 않습니다. RSS 2.0 은 이러한 작업이 필요없게 되었습니다.

RSS 2.0 문서의 가장 최상위에 있는 요소는 위에서 보듯이 <rss> 입니다. RSS 2.0에서 <rss> 요소는 namespace가 정의되어 있지 않습니다. 그리고, <rss> 요소 아래에는 <channel> 이라는 요소 하나만 존재합니다.

그리고, RSS 1.0은 rdf 형식을 따랐기 때문에 rdf:about 이라는 속성이 대부분의 요소에 있었는데요. RSS 2.0에서는 rdf:about 이라는 속성이 사용되지 않습니다. 솔직히 RSS 1.0에서 rdf:about 속성은 별로 쓸모는 없고 값이 잘못되었을 때, 까다로운 문제만 발생시킬 여지가 있는 것이었습니다.

최상위 요소들만 나타내다면 이렇게 되겠네요.

<?xml version="1.0"?>

<rss version="2.0">

  <channel>

    ......

  </channel>

</rss>


RSS 1.0은 다음과 같은 형식이었다는 것을 상기해 보세요.


<?xml version="1.0"?>


<rdf:RDF

  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

  xmlns="http://purl.org/rss/1.0/">

  <channel rdf:about="http://www.xml.com/xml/news.rss">

    ......

    <items>

    ......

    </items>

  </channel>

  ......

  <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">

  </item>

  <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">

  </item>

</rdf:RDF>


3.3.3. channel 요소

다음은 channel 요소에 대해 알아보겠습니다.


  <channel>
    <title>Liftoff News</title>
    <link>http://liftoff.msfc.nasa.gov/</link>
    <description>Liftoff to Space Exploration.</description>
    <language>en-us</language>
    <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
    <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>Weblog Editor 2.0</generator>
    <managingEditor>editor@example.com</managingEditor>
    <webMaster>webmaster@example.com</webMaster>
    <image>......</image>

    <item>.......</item>

  </channel>

 

위 에서 보시다 시피 channel 안에는 title, link, description, language, pubDate, lastBuildDate, docs, generator, managingEditor, webMaster 등 이 차례로 나옵니다. 이 중에 title, link, description 을 제외하고는 모두 선택 요소입니다. title, link, description 의 의미는 RSS 1.0에서의 의미와 동일하니 여기에서는 다루지 않겠습니다.


language는 채널이 쓰여진 언어를 나타냅니다.


pubDate는 채널이 출판된 날짜를 나타냅니다. 예를 들어, 일간 신문 같은 경우 매일 매일 출판되므로, 매 24시간마다 이 날짜가 바뀔 것입니다. 여기 나오는 형식은 모두 RFC 822를 따라야 하지만, 연도는 2글자로 써도 됩니다.


lastBuildDate는 채널이 마지막으로 갱신된 시간을 나타냅니다.


docs는 채널이 따르고 있는 RSS 규격의 URL을 나타냅니다.


generator는 채널 문서를 생성한 S/W를 나타냅니다. 이 값을 통해서 RSS 문서 생성을 위해 사용되는 S/W 종류에 대한 통계를 수집할 수 있을 것입니다.


managingEditor는 컨텐트 편집에 책임이 있는 사람의 e-mail 주소를 뜻합니다. 보통의 개인 블로그에는 큰 의미가 없겠지만 신문같은 미디어에는 의미가 있을 것입니다.


webMaster는 채널의 technical issue 를 책임지는 사람의 e-mail 주소를 뜻합니다. 이것도 보통의 개인 블로그에서는 별 의미가 없을 것입니다.


이 외에도 cloud, ttl, rating, skipDays, skipHours 등이 있으나 자주 쓰이는 필드가 아닌 것 같아서 자세한 설명은 RSS 2.0 규격 Spec 링크를 다는 것으로 대신하겠습니다.


마지막으로 image, item는 중요한 요소라서 아래에 따로 설명드리겠습니다.


3.3.4. image 요소


다음은 image 요소에 대해 알아보겠습니다.


    <image>
      <url>http://blogfiles.naver.net/data6/2005/4/10/253/DSC03278.jpg</url>
      <title>Liftoff News</title>
      <link>http://liftoff.msfc.nasa.gov/</link>
    <image>
 

image 요소는 전체적으로 보면 RSS feed 를 icon 으로는 어떻게 나타낼 것인가에 대한 정보를 가지고 있습니다. 당연히 가장 중요한 정보는 그 icon의 url이 될테구요. title 은 image 대신 나타낼 text를 나타냅니다. 그리고, url 은 image의 url 이구요, link 는 이미지를 클릭했을 때 가게될 site 주소를 나타냅니다. link 는 대부분 channel 의 홈 페이지이겠죠 ?


3.3.5. item 요소


다음은 item 요소에 대해 알아보겠습니다.


    <item>
      <title>Star City</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
      <description>How do Americans get ready to work with Russians aboard the
        International Space Station? They take a crash course in culture, language
        and protocol at Russia's Star City.</description>
      <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
    </item>


item 은 channel의 기사 또는 content 하나 하나를 나타냅니다. link는 해당 item 을 클릭했을 때 가게될, 보통은 기사 내용 전문을 볼 수 있는 URL을 뜻합니다. 때로는 이 description 안에 기사 내용 전문이 들어가게 되는 경우도 있습니다. pubDate는 기사가 출판된-또는 공개된- 시간을 뜻합니다. guid는 기사의 유일한 ID를 뜻합니다. RSS 2.0 문서를 보내는 쪽에서 이 ID가 유일하다는 걸 보장해야 합니다.


이 외에도 author, category, comment, enclosure, source 등이 정의되어 있으니 자세한 설명은  RSS 2.0 규격 Spec 링크를 참고하시기 바랍니다.


RSS 2.0 전체 요소 중 가장 중요한 요소라고도 할 수 있겠습니다.


3.3.6. naver blog 예제


<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
                   xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005"
                   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
                   xmlns:dc="http://purl.org/dc/elements/1.1/"
                   xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
  <channel xmlns:cfi="http://www.microsoft.com/schemas/rss/core/2005/internal" cfi:lastdownloaderror="None">
    <title cf:type="text">S/W 개발에 대한 단상</title>
    <link>http://blog.naver.com/yesarangk</link>
    <image>
      <url>http://blogfiles.naver.net/data6/2005/4/10/253/크기변환_DSC03278.jpg</url>
      <title>S/W 개발에 대한 단상</title>
      <link>http://blog.naver.com/yesarangk</link>
    </image>
    <description cf:type="text">저는 소프트웨어 개발을 업으로 하는 사람입니다.</description>
    <language>ko</language>
    <copyright cf:type="text">Copyright(c) NHN Corp. All Rights Reserved.</copyright>
    <pubDate>Tue, 19 Dec 2006 14:37:58 GMT</pubDate>
    <lastBuildDate>Tue, 19 Dec 2006 14:37:58 GMT</lastBuildDate>
    <atom:updated>2006-12-19T14:37:58Z</atom:updated>

    <item>
      <category>기술동향</category>
      <title xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" cf:type="text">3. RSS 기술 소개 #1 - RSS 역사</title>
      <link>http://blog.naver.com/yesarangk/40032231861</link>
      <description xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" cf:type="html">요즘 웹2.0의 기술 중 하나인 RSS가 여러모로 관심을 받고 있는 것 같습니다. 그래서 나름대로 정리해 볼 생각으로 글을 쓰게 됐습니다.RSS에 대해 연재식으로</description>
      <pubDate>Mon, 18 Dec 2006 15:39:21 GMT</pubDate>
      <atom:published xmlns:atom="http://www.w3.org/2005/Atom">2006-12-18T15:39:21Z</atom:published>
      <atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2006-12-18T15:39:21Z</atom:updated>
      <cfi:id>8</cfi:id>
      <cfi:read>true</cfi:read>
      <cfi:downloadurl>http://blog.rss.naver.com/yesarangk.xml</cfi:downloadurl>
      <cfi:lastdownloadtime>2006-12-19T14:37:59.156Z</cfi:lastdownloadtime>
    </item>

    <item>
      <category>S/W 개발</category>
      <title xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" cf:type="text">Programming Language Syntax 비교</title>
      <link>http://blog.naver.com/yesarangk/40032227962</link>
      <description xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" cf:type="html">정말 대단한 사람들... 그리고, 세상에 이렇게 많은 Programming 언어가 있는 줄 처음 알았음. 그 중에 진짜 내가 아는 건 몇 개 없음. http://merd.sourc</description>
      <pubDate>Mon, 18 Dec 2006 13:36:06 GMT</pubDate>
      <atom:published xmlns:atom="http://www.w3.org/2005/Atom">2006-12-18T13:36:06Z</atom:published>
      <atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2006-12-18T13:36:06Z</atom:updated>
      <cfi:id>7</cfi:id>
      <cfi:read>true</cfi:read>
      <cfi:downloadurl>http://blog.rss.naver.com/yesarangk.xml</cfi:downloadurl>
      <cfi:lastdownloadtime>2006-12-19T14:37:59.156Z</cfi:lastdownloadtime>
    </item>
  </channel>
</rss>


naver 는 RSS 2.0 형식에서 ATOM 과 Microsoft extension을 사용하네요. 특히 item 의 description에 cf:type="html" 이라고 해서 html이 그냥 쓰일 수 있게 한 점이 눈에 띄네요.



3.4 ATOM 1.0 소개

여느 때와 마찬가지로 예제부터 시작하겠습니다.

3.4.1. ATOM 1.0 예제

아래 예는 ZDNet Korea의 ATOM feed의 일부를 보여주는 예제입니다.

<?xml version="1.0" encoding="EUC-KR"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
    <title>ZDNet Korea | All News</title>
    <link rel="alternate" type="text/html" href="http://www.zdnet.co.kr"/>
    <id>http://www.zdnet.co.kr</id>
    <modified>2007-01-06T01:51:33+09:00</modified>
    <generator>CNET Korea. Inc, Sat, 06 Jan 2007 01:51:33 +0900</generator>

    <entry>
        <title>2007년, 그리고 앞으로도「계속되는 전망」</title>
        <link rel="alternate" type="text/html" href="http://www.zdnet.co.kr/itbiz/column/anchor/minupark/0,39035389,39154389,00.htm"/>
        <created>2007-01-06T01:35:49+09:00</created>
        <issued>2007-01-06T01:35:49+09:00</issued>
        <modified>2007-01-06T01:35:49+09:00</modified>
        <id>http://www.zdnet.co.kr/itbiz/column/anchor/minupark/0,39035389,39154389,00.htm</id>
        <author>
            <name>Michael Kanellos</name>
        </author>
        <summary> 기술 산업의 향 후 전망을 예측하기는 쉽다. 우선 매우 일반적인 주장을 내세운다. “미디어와 컴퓨터 사용이 서로 융합 될 것이다”와 같은 예측 말이다. 그리고 유투브(YouTube)가 지난해에 도약했단 사실을 그러한 예측에 대한 근거로 강조했다.</summary>
    </entry>

    <entry>
        <title>「SW 기술자 공인 노임단가」에 대한 단상</title>
        <link rel="alternate" type="text/html" href="http://www.zdnet.co.kr/itbiz/column/anchor/minupark/0,39035389,39154361,00.htm"/>
        <created>2007-01-06T01:30:58+09:00</created>
        <issued>2007-01-06T01:30:58+09:00</issued>
        <modified>2007-01-06T01:30:58+09:00</modified>
        <id>http://www.zdnet.co.kr/itbiz/column/anchor/minupark/0,39035389,39154361,00.htm</id>
        <author>
            <name>박민우(디아이지커뮤니케이션 이사)</name>
        </author>
        <summary>2006 년 12월 28일 한국소프트웨어산업협회는 SW산업진흥법에 따라 SW사업 대가기준으로 활용하는 'SW기술자 공인 노임단가'를 2007에는 2006년에 비해 평균 4.66% 인상토록 한다고 공표했다. 인상된 기준에 따르면 초급개발자는 월 740만원, 중급개발자는 월 930만원, 고급개발자는 월 1,170만원을 받도록 되어 있다.</summary>
    </entry>
</feed>

위 ZDNet 예제는 정확히 말하면 ATOM 1.0 이 아니라 ATOM 0.3 버전입니다. ATOM 1.0 버전은 namespace 가 http://www.w3.org/2005/Atom 입니다. 즉,

<feed version="1.0" xmlns="http://www.w3.org/2005/Atom">

이런 식으로 정의되어야 합니다. 그리고, <modified> 라는 tag 가 <updated>로 바뀌었습니다.

3.4.2. 최상위 요소

ATOM 1.0 도 겉으로 보기에는 RSS 1,0, RSS 2.0 형식과 크게 다르지 않습니다.

ATOM 1.0 문서의 가장 최상위에 있는 요소는 위에서 보듯이 <feed> 입니다. RSS 2.0에서 <rss> 요소 아래에 <channel> 이라는 요소가 있었는데, 최상위 요소인 <rss>가 굳이 필요가 없기 때문에 ATOM 1.0에서는 최상위 요소를 <feed>로 정의한 것 같습니다.

겉으로 보기에는 눈에 띄지 않지만 RSS 2.0 에서 namespace를 쓰지 않은 것은 그렇게 좋은 결정이 아니었습니다. 왜냐면 서로 다른 XML 규격들 간에 tag 이름들이 겹칠 수 있기 때문입니다. 그리고, ATOM 1.0 은 RSS 1.0, RSS 2.0과 달리 XML Schema 에 의해 정의된 형식입니다. 개발자 입장에서 말하면 ATOM 1.0 문서의 validation이 가능하다는 것입니다. 그리고, RSS 2.0 에서는 시간이나 날짜 형식이 모두 RFC 822 를 따라야 하는데, ATOM 1.0 에서는 RFC 3339를 따라야 합니다.

여기에서는 ATOM 1.0의 개념적인 소개를 위한 것이므로 더 자세한 차이점에 대해서는 설명하지 않고 ATOM 1.0과 RSS 2.0을 비교한 링크를 알려드리는 것으로 자세한 설명을 대신하겠습니다.

ATOM 1.0 최상위 요소들만 나타내다면 이렇게 되겠네요.

<?xml version="1.0"?>

<feed version="1.0" xmlns="http://www.w3.org/2005/Atom">

  ......

</feed>


RSS 2.0은 다음과 같은 형식이었다는 것을 상기해 보세요.


<?xml version="1.0"?>


<rss version="2.0">

  <channel>

    ......

  </channel>

</rss>


3.4.3. feed 요소 설명

다음은 feed 요소에 대해 알아보겠습니다.

<feed version="1.0" xmlns="http://www.w3.org/2005/Atom">
    <title>ZDNet Korea | All News</title>
    <link rel="alternate" type="text/html" href="http://www.zdnet.co.kr"/>
    <id>http://www.zdnet.co.kr</id>
    <updated>2007-01-06T01:51:33+09:00</updated>
    <generator>CNET Korea. Inc, Sat, 06 Jan 2007 01:51:33 +0900</generator>

    <entry>...</entry>

</feed>

위에서 보시다 시피 feed 안에는 title, tagline, link, id, updated, generator 등의 요소가 포함되어 있습니다.

title은 피드의 제목을 나타냅니다.

id는 permanent URI를 이용하여 피드의 ID를 나타내는 것으로 feed가 독립된 web 주소를 갖는다면 그 주소를 그냥 써도 됩니다.

updated 는 피드가 마지막으로 갱신된 시간을 나타냅니다.

이 세 가지는 모두 필수 요소입니다. 나머지는 모두 선택적인 요소입니다.

link 는 관련된 link를 나타내는 요소로서 통상적으로 피드의 HTML 페이지 url 을 나타냅니다. link 필드의 다양한 속성을 활용하여 다른 link 들도 표현할 수 있습니다.

generator는 피드를 생성하기 위해 사용된 S/W 를 뜻합니다.

이 외에도 author, category, icon, logo, rights, subtitle 등의 요소도 있으나 이에 대한 자세한 설명은 ATOM 1.0 규격 또는 ATOM 1.0 Introduction 문서를 참고하기 바랍니다.

3.4.4. entry 요소 설명

entry 요소는 RSS 1.0이나 RSS 2.0의 item 과 같이 기사 또는 content 하나를 나타냅니다.

    <entry>
        <title>2007년, 그리고 앞으로도「계속되는 전망」</title>
        <link rel="alternate" type="html" href="http://www.zdnet.co.kr/itbiz/column/anchor/minupark/0,39035389,39154389,00.htm"/>
        <created>2007-01-06T01:35:49+09:00</created>
        <issued>2007-01-06T01:35:49+09:00</issued>
        <updated>2007-01-06T01:35:49+09:00</updated>
        <id>http://www.zdnet.co.kr/itbiz/column/anchor/minupark/0,39035389,39154389,00.htm</id>
        <author>
            <name>Michael Kanellos</name>
        </author>
        <summary> 기술 산업의 향 후 전망을 예측하기는 쉽다. 우선 매우 일반적인 주장을 내세운다. “미디어와 컴퓨터 사용이 서로 융합 될 것이다”와 같은 예측 말이다. 그리고 유투브(YouTube)가 지난해에 도약했단 사실을 그러한 예측에 대한 근거로 강조했다.</summary>
    </entry>

위의 나온 여러 가지 요소 중에 title, id, updated 는 필수 요소입니다. 그 의미는 feed 의 title, id, updated 와 그 의미가 거의 동일합니다.

그 외의 요소들은 다음과 같은 의미를 갖습니다.

link는 실제 content 에 대한 url 을 나타내는 데 주로 사용됩니다. *주로 사용된다*고 표현한 이유는 다른 link를 나타내는 데도 사용할 수 있기 때문입니다. 실제 html content에 대한 link를 나타내고 싶을 때는 rel 속성은 alternate 로 type 속성은 html로 해주면 됩니다.

summary는 RSS 1.0 이나 RSS 2.0 에서 item의 description과 같은 의미를 갖습니다. 조금 달라진 점이 있다면 summary 안에 들어가는 내용의 형식을 지정할 수 있다는 것입니다. 즉, summary 안에 들어가는 내용의 형식이 일반 text 이면 type 이라는 속성의 값을 "text"로 주면 되고, html 이라면 "html" 이라고 주면 되고, xhtml 이라면 "xhtml" 이라고 주면 됩니다. 다음과 같은 형태가 가능하다는 것입니다.

<summary type="text">summary here</summary>
<summary type="html">&lt;b&gt;summary&lt;/b&gt; here</summary>
<summary type="xhtml">
  <div xmlns="http://www.w3.org/1999/xhtml">
    <b>summary</b> here
  </div>
</summary>

이렇게 표현한 것은 이전의 RSS 1.0 이나 RSS 2.0에 비해 진일보한 것이라고 할 수 있습니다. 왜냐면 그 전에 description에서는 어떤 싸이트에서는 text 만 쓰고, 어떤 싸이트에서는 html을 쓰고 해서 상호 연동시에 문제가 됐었습니다. 물론 RSS 2.0 에서는 Microsoft의 extension을 통해 일부 해결하긴 했지만 규격 자체에 내용의 형식을 어떻게 포함할지에 대해 정의하지 않았는데, ATOM 에서는 아예 규격 자체에 이러한 문제를 해결할 수 있도록 관련 규격을 정의해 놓았다는 점이 다릅니다.

위의 예제에 나오진 않았지만 언급할 필요가 있는 것이 한 가지 더 있습니다. <content>라는 요소입니다.

content는 실제 content 내용 전체를 의미합니다. 예를 들어, 신문 기사라면 신문 기사 내용 전문이 여기에 올 수 있습니다. content의 속성으로 type 이라는 속성이 있는데, 이 값이 text, html, xhtml 이면 실제 content 내용 전체가 오게 됩니다. 기존의 RSS 1.0, RSS 2.0 에서는 item의 description 이라는 요소를 통해 편법으로 전체 내용을 포함시켰지만 ATOM 에서는 content 라는 독립적인 요소를 두어 실제 content 내용 전체를 표현할 수 있게 한 점이 다르다고 할 수 있습니다. content 요소는 rel 속성이 alternate 인 link 가 없으면 반드시 있어야 하고(must be provided), summary 가 없으면 포함시켜야 한다고 권고하고 있습니다(should be provided).

이 외에도 entry 요소에는 category, author, source, rights 와 같은 요소가 있으나 자세한 설명은  ATOM 1.0 규격 또는 ATOM 1.0 Introduction 문서를 참고하기 바랍니다.



4.1. Podcast 소개: Podcast 란 무엇인가?

Wikipedia 에서는 Podcast에 대해서 다음과 같이 소개하고 있습니다.

A podcast is a media file that is distributed by subscription (paid or unpaid) over the Internet using syndication feeds, for playback on mobile devices and personal computers.[1] Like 'radio', it can mean both the content and the method of syndication. The latter may also be termed podcasting. The host or author of a podcast is often called a podcaster. The term "podcast" is derived from Apple Inc.'s portable music player, the iPod. However, known synonyms for the word pod are capsule, case, container, hull, husk, shell, and vessel.[2] A pod is obviously a container of some sort and the idea of broadcasting to a container or pod correctly the describes the process of podcasting.[3] More about the name itself can be found in the History of podcasting article.

Though podcasters' web sites may also offer direct download or streaming of their content, a podcast is distinguished from other digital audio formats by its ability to be downloaded automatically, using software capable of reading feed formats such as RSS or Atom.

많은 Podcast 소개 자료에 보면(아래 자료 포함) Podcast가 iPod 와 broadcast의 합성어라고 정의하고 있는데, 여기에서는 그럴 수도 있지만 pod가 iPod를 뜻하는 게 아니라 다른 영어 단어 pod(누에의 고치, 메뚜기의 알주머니)와 broadcast의 합성어일 수도 있다는 새로운 시각을 제시하고 있습니다. 그도 그럴 것이 podcast의 과정을 유심히 뜯어 보면 미디어 파일을 RSS라는 새로운 배포 포맷으로 포장하여 배포하기 때문입니다. 이점에서 RSS와 Podcast의 연결성을 볼 수 있습니다.

관련글:
  보고모님Podcast 란?
  나루터님예전에 작성했던 Podcast(팟캐스트) 자료입니다.

이 Podcast 파일안에 실제 오디오 파일 또는 비디오 파일을 다운로드할 수 있는 위치가 기술되어 있기 때문에 이 Podcast 형식을 이해할 수 있는 프로그램이 자동으로 다운로드 받아서 MP3 플레이어에 전송을 해주면 듣는 사람이 언제라도 들을 수 있게 됩니다. (TODO: 기존 방송 방식과 비교해본 그림 추가)

이렇게 되면 듣는 이가 자신이 원하는 프로그램을 특정 시간대에 꼭 들어야 한다거나, 들을 수 있는 프로그램이 대형 라디오 방송사에 의해 제한된다거나 하는 일이 없어질 것입니다. 그리고, 블로거 입장에서도 본다면 꼭 글로만 자신의 의견을 펼치는 것이 아니라 Podcast를 통해 자신의 목소리를 낼 수가 있을 것입니다. 이런 의미에서 나루터님의 다음 표현은 Podcast의 핵심을 제시하고 있는 말이라고 생각됩니다.

방송을 녹음해서 내 블로그에 올려 놓으면 듣는 이들이 파일을 내려받아 MP3 플레이어로 아무 때나 들을 수 있는 포드캐스팅이 블로그에 입까지 달아준 것이다.
RSS란 형식을 이용하여 방송하고 싶은자(블로거)와 방송을 듣고 싶은자 사이를 거의 무의 비용으로 연결시켜주는 데다가 듣는 이의 입장에서는 자기가 원하는 방송을 원하는 시간에 들을 수 있기 때문에 Podcast의 가능성은 매우 크다고 생각됩니다. 그리고, 이 Podcast가 굳이 오디오 파일에만 국한 되는 것이 아니라 비디오 파일도 배포가 가능하기 때문에 그 가능성은 더 크다고 할 수 있겠습니다. 얼마전에 Macworld 2007 Steve Jobs Key Note Speech 도 이 Podcast를 통해 배포됐었습니다. 블로거의 입장에 있지 않은 국내 대형 방송사들도 듣는 이의 입장에서 Podcast의 유용성을 발견하고 최근 다양한 라디오 프로그램들을 Podcast로 제공하고 있기도 합니다.

가 능성이 높은 Podcast라도 그것을 지원하는 툴이 좋지 않다면 별로 활성화될 수 없을 것입니다. Podcast로 쉽게 저작할 수 있는 툴과 Podcast 를 쉽게 들을 수 있는 툴 둘다가 잘 준비되어야 할 것입니다. 현재 제 판단에는 Podcast를 위한 저작툴은 기본적으로 음악, 음성 녹음, 믹싱 등의 고기능을 필요로 하기 때문에 아직은 발달이 더딘 편으로 생각되지만(사용성 측면에서 말한 것입니다), 듣기 위한 툴은 이미 기술이 성숙되어 있다고 생각합니다. 왜냐하면 기존 Media Player 를 RSS 리더와 연결짓기만 하면 되기 때문입니다.

Podcast는 이 자체로 상당히 방대한 주제이므로 소개는 이정도로 마치고 차후에 Podcast 듣는 방법, Podcasting 하는 방법 등을 알아보도록 하겠습니다.(근데, 실은 저도 아직 Podcasting 안해 봤습니다. 다시 말하면 제가 공부하고, 직접 Podcasting 해 본 후에 알려 드리도록 하겠습니다. 언제쯤 그게 될지는 저도 기약하기가 힘드네요)


4.2. OPML 소개

OPML은 Outline Processor Markup Language 의 약자입니다. 쉽게 풀어쓰자면 개요처리기 표시언어 정도쯤 되지 않을까요 ? 이름에서 대강 짐작할 수 있듯이 OPML은 개요처리기를 위한 파일 형식으로 정의되었던 언어였습니다. 원래는 RSS와는 별도로 정의되었던 언어였는데, RSS가 등장하면서 RSS 피드 목록을 교환하는 용도로 주목을 받게 됐습니다.

이렇게 개념적으로 설명하는 것보다 실제 어떤 용도로 사용되고 있는지를 보시면 그 필요성을 훨씬 잘 이해하시고, 실제 이용하는데에도 도움이 될 것 같습니다.

우 선 여러분이 특정 RSS Reader 로 여러 RSS 피드를 구독하고 있었는데, 지금 쓰는 RSS Reader가 별로라고 느끼던 차에 멋진 RSS Reader를 발견했다고 상상해 보시기 바랍니다. 그럼 여러분은 어떻게 하시겠습니까? 바로 새로운 RSS Reader로 바로 옮길 수 있으시겠습니까? 그렇진 않을 겁니다. 왜냐면 기존에 입력해 두었던 RSS 피드 목록들이 있기 때문입니다. 기존 RSS 피드 목록을 일일이 새로운 RSS Reader 로 옮기려는 *노가다*를 생각하고는 옮기는 걸 포기하실 분들이 많을 것입니다. 이 때, OPML이 등장하게 되는 것입니다.

아까 OPML은 RSS 피드 목록을 교환하는 용도로 주목을 받게 되었다고 말씀드렸습니다. 그러니까, 여러분이 특정 RSS Reader 에 입력해 놓은 RSS 피드들을 OPML을 이용해 서로 다른 RSS Reader 끼리 교환할 수 있게 된 것입니다. 현재 대부분의 RSS Reader 들은 OPML 내보내기/가져오기 기능을 지원하고 있습니다. 제가 이전글 2. RSS 활용에서 언급했던 HanRSS 연모도 이런 기능을 제공합니다. 그럼 그림을 통해 HanRSS 연모의 OPML 내보내기/가져오기 기능을 살펴 보겠습니다.

사용자 삽입 이미지

위 그림에서 보시다 시피 HanRSS RSS 피드 목록 아래 부가기능쪽에 보시면 OPML 가져오기 | 내보내기가 있는 걸 확인하실 수 있습니다. 내보내기를 누르면 아래 그림과 같은 창이 열리면서 OPML로 된 RSS 피드 목록을 다운받을 수 있습니다.

사용자 삽입 이미지

아래 그림은 연모에서 OPML 가져오기 | 내보내기 메뉴를 보인 것입니다.

사용자 삽입 이미지

이렇게 OPML 내보내기, 가져오기 기능을 이용하면 쉽게 RSS Reader를 옮겨 탈 수 있습니다.

OPML은 이 용도 외에도 다른 목적으로 사용되기도 합니다. 예를 들어, 신문사 같은 경우 기사가 몇 가지 카테고리로 나뉘어 있는 경우가 많이 있습니다. 그래서 보통은 전체기사 목록을 RSS 피드로 제공해 주기도 하지만 카테고리별로 RSS 피드를 따로 따로 제공해 주는 경우가 많습니다. 그렇게 하지 않으면 전체 기사 목록 RSS 피드만 받으면 받는 쪽에서 원하는 영역의 기사들을 선택해서 보기가 힘들어지기 때문입니다. 예를 들어 ZDNet Korea 같은 경우 News, IT 비즈니스, 빌더, 리뷰, Web TV, 칼럼, 스팟뉴스, 포스트 와 같은 영역으로 기사들이 나누어져 있습니다. 이 영역별로 따로따로 RSS 피드를 제공하는데, 이 여러 영역의 RSS 피드를 사용자가 일일이 입력하려면 귀찮을 것입니다. 그래서 여러 영역의 RSS 피드를 제공하는 싸이트 같은 경우는 대부분 OPML 파일을 같이 제공합니다. 아래는 ZDNet Korea 에서 OPML 을 제공하는 그림입니다.

사용자 삽입 이미지

위 그림에서 빨갛게 표시한 부분에서 주소복사버튼을 누르면 OPML 파일의 주소가 클립보드에 복사됩니다. 그런 후, 그림과 같이 왼쪽 리스트박스에서 "OPML주소"를 선택하시고, Ctrl+V를 눌러서 주소창으로 OPML주소를 복사해 넣은 후 "가져오기" 버튼을 누르면 HanRSS에서 ZDNet Korea의 모든 RSS 피드를 한꺼번에 가져올 수 있습니다.

사용자 삽입 이미지
다 음은 제 RSS 피드 목록 중 일부를 OPML로 내보낸 파일 예제입니다. 아래에 보듯이 OPML 파일은 그 형식이 참 간단합니다. 별도로 자세히 설명드릴 필요는 없을 것 같고, <outline> 아래에 계속해서 <outline> 요소들이 재귀적으로 올 수 있다는 것만 언급하는 것으로 설명을 대신하겠습니다.

<?xml version="1.0" encoding="utf-8" ?>
<opml version="1.0">
<head>
<title>한RSS - 내 RSS</title>
<dateCreated>Sun, 28 Jan 2007 10:40:43 GMT</dateCreated>
<ownerName></ownerName>
</head>
<body>
<outline title="내 RSS">
  <outline title="유명한 블로거">
    <outline title="Blog of JWC" htmlUrl="http://blog.ofjwc.com/" type="rss" xmlUrl="http://feeds.feedburner.com/JWC" />
    <outline title="Channy&#39;s Blog" htmlUrl="http://channy.creation.net/blog" type="rss" xmlUrl="http://feeds.feedburner.com/channy" />
    <outline title="HyunLOG" htmlUrl="http://www.hyunlog.com/blog/" type="rss" xmlUrl="http://www.hyunlog.com/blog/rss" />
    <outline title="Joel on Software" htmlUrl="http://www.joelonsoftware.com" type="rss" xmlUrl="http://www.joelonsoftware.com/rss.xml" />
    <outline title="likejazz.COM" htmlUrl="http://www.likejazz.com" type="rss" xmlUrl="http://www.likejazz.com/rss.xml" />
    <outline title="pod♥irus" htmlUrl="http://web.mac.com/eugeneduck/iWeb/375AD148-F450-4E59-9096-BA36939C4943/Home/Home.html" type="rss" xmlUrl="http://feeds.feedburner.com/podvirus" />
    <outline title="김중태문화원 블로그" htmlUrl="http://www.dal.co.kr/blog/" type="rss" xmlUrl="http://www.dal.co.kr/blog/index.xml" />
    <outline title="디지털 비즈니스 이야기 By oojoo" htmlUrl="http://oojoo.tistory.com/" type="rss" xmlUrl="http://oojoo.tistory.com/rss" />
    <outline title="류한석의 피플웨어 (peopleware.co.kr)" htmlUrl="http://bobbyryu.blogspot.com/index.html" type="rss" xmlUrl="http://feeds.feedburner.com/bobbyryu" />
    <outline title="서명덕기자의 人터넷세상" htmlUrl="http://itviewpoint.com/tt/index.php" type="rss" xmlUrl="http://itviewpoint.com/tt/index.xml" />
    <outline title="선택이라는 놈의 달콤 쌉싸름함" htmlUrl="http://dons.tistory.com/" type="rss" xmlUrl="http://dons.tistory.com/rss" />
    <outline title="태우&#39;s log - web 2.0 and beyond" htmlUrl="http://twlog.net/wp" type="rss" xmlUrl="http://feeds.feedburner.com/twlog" />
    <outline title="함정호의 경제에지(Edge)" htmlUrl="http://blog.daum.net/hahm5150" type="rss" xmlUrl="http://blog.daum.net/xml/rss/hahm5150" />
  </outline>
</outline>
</body>
</opml>

다음에는 Yahoo에 의해 RSS 확장으로 제안된 MediaRSS에 대해 알아보도록 하겠습니다.


출처 : http://yesarang.tistory.com/
728x90

댓글