2006년 10월 8일 일요일

microformat - hCalendar편

microformat에 대한 간단한 설명은 hCard편에서 다뤘으니 생략하고,

역시 마찬가지로, hCalendar를 위해서는 iCalendar에 대해 먼저 공부해야겠습니다. (실은 hCalendar보다 iCalendar에 관한 내용이 거의 전부입니다. ^^;)

그 전에, vCalendar는 “일정”과 관련된 정보를 기술하기 위한 포맷으로 IMC(Internet Mail Consortium)에서 정했었습니다만, iCalendar라는 새 표준(RFC 2445)으로 대체되었습니다. 실제적으로는 vCalendar 2.0이 iCalendar에 해당합니다.
따라서 이미 사용되지 않는 vCalendar에 대한 스펙은 넘어가고, iCalendar를 중심으로 살펴보겠습니다.

iCalendar는 iCal이라고도 불리우며, 이 이름 자체가 맥의 “iCal”이라는 일정관리 프로그램을 언급하기도 합니다. 실제로 iCalendar의 기능을 가장 풍부하게 활용하고 있는 것은 맥의 iCal입니다.

iCalendar에서 다룰 수 있는 것들은, EVENT, TODO, JOURNAL, FREEBUSY, TIMEZONE, ALARM등의 데이터입니다. 각각의 데이터 포맷에 대해서는 RFC 2445를 참조하시면 됩니다.

다음은 이렇게 만들어진 iCalendar 데이터의 샘플입니다.


BEGIN:VCALENDAR
PRODID:-//RDU Software//NONSGML HandCal//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:US-Eastern
BEGIN:STANDARD
DTSTART:19981025T020000
RDATE:19981025T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19990404T020000
RDATE:19990404T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:19980309T231000Z
UID:guid-1.host1.com
ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com
ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:
MAILTO:employee-A@host.com
DESCRIPTION:Project XYZ Review Meeting
CATEGORIES:MEETING
CLASS:PUBLIC
CREATED:19980309T130000Z
SUMMARY:XYZ Project Review
DTSTART;TZID=US-Eastern:19980312T083000
DTEND;TZID=US-Eastern:19980312T093000
LOCATION:1CP Conference Room 4350
END:VEVENT
END:VCALENDAR

여기까지만 보면, iCalendar의 역할은 일정관리 프로그램의 데이터저장포맷인가? 하는 생각이 드실 겁니다. 물론 그러한 용도도 있습니다만, 단지 스탠드얼론 어플리케이션에서의 데이터저장포맷을 굳이 표준으로 만들 이유는 없겠죠. iCalendar의 진정한 용도는 교환과 구독, 확장에 있습니다.

Weather Underground 라는 사이트가 있습니다. 전세계의 기상관측소의 데이터를 모아 그 정보를 알려주는 사이트입니다.
서울의 기상정보는 다음 주소에서 알 수 있습니다.
http://www.wunderground.com/cgi-bin/findweather/getForecast?query=seoul
편리한 사이트입니다만, 매번 날씨를 알기 위해 이 페이지에 접속하는 것은 당연하다면 당연하지만 개선의 여지가 있을 듯 합니다.
이럴 때 iCalendar 포맷이 이용됩니다.

예를 들어 맥 사용자라면, iCal에서 해당 iCalendar주소(이 예시에서는 http://www.wunderground.com/auto/ical/global/stations/47117.ics?units=both가 되겠지요.)를 “구독”할 수 있습니다. iCal에서 해당 주소를 feed로 등록시켜 놓으면 자동으로 매번 갱신되는 정보가 해당날짜에 데이터로 들어가 있게됩니다. “일정관리”프로그램 안에서 날씨정보를 한번에 보게 되는 것이지요. 다음 주 휴가기간 동안 서울의 날씨정보를 같이 볼 수 있다면 얼마나 편리할까요?

iCalendar 교환을 위한 사이트도 있습니다.
http://www.icalshare.com/
이곳에 오면 학사일정부터 메이저리그 경기일정까지 (물론 미국기준 -_-a) 다양한 일정을 공유할 수 있습니다.

RSS와도 비슷하지요? iCalendar역시 syndication을 위한 포맷이기 때문입니다.
RSS와 iCalendar의 가장 큰 차이점이라면, RSS는 대개 “최근의 컨텐트 보기”를 위한 구독/배포 포맷인 반면, iCalendar는 “날짜”를 중심으로 동작한다는 점이겠지요.

불행히도, 아직까지 iCalendar 구독이 가능한 어플리케이션은 많지 않습니다. 맥에서 사용되는 iCal이 거의 유일합니다. 물론 대부분의 일정관리 어플리케이션에서 iCalendar포맷으로 내보내기/불러오기는 가능합니다만, feed로 구독하기 기능은 없지요. google Calendar에서도 iCalendar포맷의 feed로 내보내기 기능은 있습니다만 구독하기 기능은 아직 구현되어있지 않습니다.
그래도 덕분에, 회사에서의 공용일정은 google Calendar로 관리하고 그 feed를 받아 집에 있는 iMac에서는 iCal을 이용하여 동기화시키기(비록 일방통행이긴 하지만)같은 작업이 가능해지는 것이지요. (이런 것이 진정 웹 2.0스러운 모습이라 이겁니다. AJAX를 쓴다고 웹 2.0이라는 게 아니라.)

많은 일정관리 프로그램들이 있습니다만, 사용자의 전환비용을 감당하지 못해서 사용자 수를 늘리는 것이 어렵지요. iCalendar Feeding 기능이 있다면 별다른 전환비용없이 새로운 일정관리 프로그램을 이용하기 쉬울텐데 왜들 안하는지 알다가도 모를 일입니다. 다행히 Outlook, Lotus Notes등을 비롯한 많은 일정관리 프로그램들이 점진적으로 iCalendar Feeding기능을 채택할 것이라니 조금 더 기다려야겠지요.
(바꾸어 말하자면, iCalendar Feeding 기능을 제공하는 서비스들이 나중에는 경쟁력을 갖추게 된다는 소리입니다. 아이디어들 챙겨가세요. :))

iCalendar Feeding이 활발해질 가까운 미래의 활용법들을 예상해볼까요?
인터넷서점에 내가 좋아하는 SF작가를 등록해두고, 그 작가의 신작이 발표될 때마다 자동으로 내 일정관리 프로그램에 신간SF의 발매일을 표시해줍니다. 매번 사이트 들락거릴 필요가 없지요. 트래픽 손해가 아니냐구요? 실구매만 일어나면 장땡인게지요. :) 동창회 홈페이지의 이벤트 게시판에 자식놈 돌잔치 일정을 올려놓습니다. 동창회 홈페이지 자주 들락거리지 않아도 개인 일정관리 프로그램에 자동으로 해당 일정이 들어갈테니 홈페이지 못봐서 못갔다는 핑계는 힘들겠지요.
대학생들의 학사관리 일정을 feeding하면 어떨까요? 아침에 일어나서 일정관리 프로그램을 보면 오늘 3교시 미적분 시간이 교수님 사정으로 휴강되었음을 자동으로 알려줍니다. 이런 게 저 학교다닐 때 있었어야 했어요. 적절한 계산프로그램이 있다면 학생들의 feed를 모아, 공통으로 비는 시간에 세미나일정 맞추기 같은 골치아픈 일도 쉽게 가능하겠지요.
여행사이트에서 여행스케줄을 세우고 그것을 내 일정관리 프로그램으로 구독합니다. 해당 여행지의 당일,해당시의 이벤트 정보가 자동으로 업데이트 됩니다. PDA로 싱크해서 여행갈 때 들고 다니면 가이드가 따로 필요없지요. 덤으로 교통시간표(이것도 “일정”데이터니까요.)까지 스케줄에 맞추어 자동으로 뽑아주니 금상첨화.
극장시간표가 feeding된다면 핸드폰의 LBS서비스와 연동되어, “현재 내가 있는 곳에서 가장 가까운 극장에서 상영하고 있는 영화”같은 것을 모바일 서비스해줄 수도 있겠지요. 데이트할 때 가장 골치아픈 문제가 그것 아닙니까. :)
물론 위에서 든 예들은 굳이 iCalendar가 아니더라도 데이터 제공업체와 제휴해서 비즈니스 모델로 만들 수도 있겠지요. 굳이 RSS를 제공안하더라도 “최근 게시물데이터”를 스크린 스크래핑할 수는 있는 거잖아요? :) 그러나 Content 교환을 위해 RSS가 활성화되고 편리하다는 것을 아는 것처럼, Event 교환을 위해 iCalendar는 권장되고 더 널리 쓰여야 합니다.

iCalendar 이야기가 너무 길었군요. 이제 microformat의 hCalendar로 돌아갑시다.
iCalendar는 애플리케이션 데이터라서 웹에서 바로 사용하기에는 무리입니다. RSS처럼 별도의 URL로 만들어 제공하는 방법밖에 없지요. 이게 좀 불편한 것 아닌가… 하는 마음에 웹에서 바로 사용할 수 있는 포맷을 만든 것이 hCalendar입니다.
자세한 스펙은 http://microformats.org/wiki/hcalendar를 참조하시고.

예를 들어, iCalendar로 다음과 같은 데이터가 있다고 한다면,

BEGIN:VCALENDAR
BEGIN:VEVENT
UID:guid-1.host1.com
DTSTAMP:19980309T231000Z
DESCRIPTION:Project XYZ Review Meeting
SUMMARY:XYZ Project Review
DTSTART:19980312T133000Z
DTEND:19980312T143000Z
LOCATION:1CP Conference Room 4350
END:VEVENT
END:VCALENDAR

이 데이터는 hCalendar 포맷을 이용하여 다음처럼 웹에 표시할 수 있습니다.
[html]

XYZ Project Review

Project XYZ Review Meeting

To held on 12 March 1998 from 8:30am EST
until 9:30am EST

Location: 1CP Conference Room 4350

Booked by: guid-1.host1.com on 9 Mar 1998 6:00pm

[/html]

굳이 별도의 URL로 iCalendar를 제공하는 대신 웹페이지 안에 hCalendar 포맷을 써서 바로 표시하자… 이지요. 물론 이게 제대로 활용되려면 데이터를 사용하려는 곳(다른 웹서비스, 일정관리 프로그램들)에서 웹페이지를 파싱할 수 있어야겠습니다만.

hCard의 경우와 마찬가지로 사용한 HTML태그는 중요하지 않습니다. 그보다는 class 이름으로 무엇이 사용되었는가가 중요하지요.
혹시나 해서 Google Calendar의 코드를 보았습니다만, hCalendar 포맷을 쓰고 있진 않더라구요. :)
다음은 hCalendar포맷을 사용한 사이트, 서비스들의 예입니다.
http://www.thestreet.org.au/whats_on.htm (상연 정보를 알리는데 쓰네요.)
http://www.markthisdate.com/ (캘린더 포탈입니다. :))
http://www.worldcupkickoff.com/ (월드컵 시간표군요.)

사실, 개인적으로는 hCard보다 vCard나 RDF를 선호하는 것처럼, hCalendar보다는 iCalendar가 더 유용하고 널리 쓰이기를 바랍니다. hCalendar를 사용한 HTML은 파싱하는 게 iCalendar보다는 어렵거든요. iCalendar를 제공한다면 굳이 hCalendar를 쓸 필요는 없겠습니다만… 그래도 일정과 관련된 웹페이지를 만들 때 hCalendar 포맷을 쓴다면, 누군가는 그 데이터를 이용해서 좋은 매쉬업 서비스를 만들어 낼 겁니다. 복잡하게 API를 만들어 오픈하는 것보다, 사용하는 데이터를 표준에 맞게 제공하는 것이 훨씬 쉽고 간단합니다.

댓글 없음:

댓글 쓰기