3. RSS 기술 소개 #4 - ATOM 1.0 소개

Posted at 2007. 1. 21. 23:56 // in 기술정리 // by 김윤수



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

RSS에 대해 연재식으로 글을 쓰고 있고 이번에는 3.4. ATOM 1.0 소개 차례입니다.

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 발전 방향

지난 3.3. RSS 2.0 소개라는 글에서 RSS 2.0의 형식에 대해 알아 보았고, 이번에는 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 문서를 참고하기 바랍니다.

음... 여기까지 제가 처음에 목표로 했던 부분에 근접해 온 것 같긴 한데... RSS에 대해 알아보면 알아볼 수록 더 많은 세계가 기다리고 있네요. 다음글 4.1. Podcast 소개: Podcast 란 무엇인가? 을 통해 podcast에 대해 알아 보겠습니다.

아뭏든 다음 글도 기대해 주세요.