IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  웹 개발  >

진정한 웹 2.0: 위키백과 가족

위키미디어 프로젝트 중 아직 덜 알려졌지만 어느 정도 결실을 맺은 프로젝트 결과물로 웹 사이트를 풍성하게 만들자

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

영어원문

영어원문


제안 및 의견
피드백

난이도 : 중급

Uche Ogbuji, 파트너, Zepheira, LLC

원문 게재일 : 2008 년 11 월 04 일
번역 게재일 : 2008 년 12 월 16 일

위키백과(Wikipedia)는 알아도 위키백과만큼 가치 있는 내용을 사용자가 만들어 제공하는 여러 개의 관련 사이트는 잘 모를 것입니다. 위키백과의 보호 아래 있는 여러 관련 사이트는 웹 개발자에게 매우 유용합니다. 위키백과를 넘어선 더 많은 참고자료로 여러분의 정보 공간을 풍성하게 하는 법을 배워봅시다. 또 이 사이트들에서 가져온 자료를 적용하는 위젯 예도 살펴봅시다.

위키백과는 매우 유명하고 잘 알려진 사이트다. 숙제에 도움이 될 자료를 찾는 아이부터 사용자가 만든 내용의 강력함을 활용하려는 웹 개발자들이 가장 먼저 들리는 곳이 위키백과다. 그런데 유용한 정보라는 점에서 보면 위키백과는 더 큰 터를 위한 중심부일 뿐이다. 위키미디어 재단은 위키백과 등을 운영하는 조직이다. 위키미디어 재단 홈페이지를 보면 "인류의 모든 지식을 모든 사람이 자유롭게 공유할 수 있는 세계를 상상해보세요. 바로 그것이 우리의 목표입니다."라고 나와 있다. 이것은 대단한 주장이고 그것을 채워 넣으려면 거대한 백과사전이 여러 권 필요할 것이다. 여러 가지 언어로 된 위키백과가 있음을 알 것이다(내 모어인 이보어로 된 위키백과 기사가 상당히 많은 걸 보고 놀랍고 기뻤다). 여러 언어로 유용한 정보 중에는 영어로 번역되지 않은 것도 있음을 아는가? 위키낱말사전(Wiktionary), 위키뉴스(Wikinews), 위키책(Wikibooks), 위키자료집(Wikisource), 위키버시티(Wikiversity) 등에 대해 들어보았나? 이 방대한 정보를 활용함으로써 웹 프로젝트에 혜택을 얼마나 얻을지 고려해 보았나? 이 글에서 나는 위키미디어에 대해 보여주고 여러분의 사이트에서 사용자들이 "모든 지식을 자유롭게 공유할" 수 있게 돕는 코드를 선보이겠다.

사이트들

잘 알려진 위키백과는 빼고 위키미디어 가족 사이트들을 간단히 여기에 요약해 보겠다.

위키낱말사전

위키낱말사전은 위키백과의 사전 부분이다. 많은 사람이 열린 내용의 백과사전에 대해 회의를 나타냈고 사전처럼 많은 노력이 필요한 작업에는 더 위압감이 느껴질 것으로 보았다. '좋은' 표제어 수에서 보면 프랑스어판이 가장 규모가 크고 그 다음이 영어판인데 영어판은 전체 표제어가 가장 많고 편집도 활발하다. '좋은 표제어'가 최소 10만 개에 이르는 언어가 아홉 개가 있고 그에 근접하는 언어도 많으며 매우 놀라운 작업을 추가하고 있다. 몇몇 언어판은 로봇을 사용해 무료 소스에서 표제어를 들여와 규모가 커지고 있다. 프랑스어 위키낱말사전이 그 예인데 많은 표제어를 자유롭게 사용할 수 있는 오래된 사전(예: Dictionnaire de l'Academie francaise)에서 복사해 왔다. 많은 위키낱말사전 표제어가 다른 언어로 번역된 것이다. 따라서 다른 언어판에 들어가 있는 번역을 통째로 들여오는 요령을 쓰기도 한다. 표제어는 실제 내용이 없는 토막글(이것들은 '좋은' 표제어로 분류되지 않는다)부터 어원, 용례, 발음(음성 기호와 사운드 파일), 상호 참조, 동의어, 반의어, 변형된 문법 형식, 번역, 프로젝트 구텐베르크(Project Gutenberg) 같은 중요한 본문에서 가져온 외형 분석을 포함한 풍부한 표제어까지 다양하다.

위키뉴스

위키뉴스는 뉴스, 시사 등을 다루는 곳이다. 위키뉴스의 아이디어는 사건을 잘 알거나 그 사건에 관여한 사람들이 관련 있는 페이지를 서로 협력해 채워 넣을 수 있다는 것이다. 위키뉴스의 지침은 이야기를 중립적인 관점으로 적어야 한다는 것이다. 위키뉴스에는 이야기, 멀티미디어 보도, 인터뷰 등이 포함된다. 위키미디어 라디오(Wikimedia Radio)도 곧 나올 예정인데 다양한 프로그램과 뉴스의 상시 스트리밍 오디오 방송이 될 것이며 위키뉴스와 기타 위키미디어 프로젝트에서 소스를 가져올 것이다. 자연히, 위키뉴스의 보도 범위는 관심 있는 기여자의 지역이나 주제로 기울어질 것이고 포괄적이지는 않을 것이다. 그 외에도 위키백과의 인기는 기사가 대개 매우 빨리, 뉴스 기사에 적합한 속도로 업데이트됨을 의미한다. 이는 위키뉴스 프로젝트로부터 나오는 불만을 줄이는 데 도움이 될 것이다.

위키책과 위키버시티

백과사전 기사를 확장하면 그 주제에 대한 책이 나오는데 이것이 위키책의 영역이다. 위키책에는 위키주니어(Wikijunior)가 포함된다. 위키주니어는 어린이와 어린이 교육을 위한 글 모음이다. 위키주니어는 곧 완전한 프로젝트가 될지도 모른다. 위키버시티도 한 때 위키책의 일부였다가 완전한 위키미디어 사이트가 됐다. 위키버시티에서는 그룹이나 커뮤니티 단위로 공부하기를 권하며 참여자들은 이해에 도움이 되는 실제 활동과 함께 학습 프로젝트 페이지를 편집하도록 지도한다. 교수단으로 조직되면 교육적인 구성으로 교과서와 결합되는 지원 자원에 모든 초점을 둔다. 위키책에서는 교과서를 제공하고 또 커뮤니티 교과 과정 개발 협력을 지원한다. 이에 따라 위키 페이지 개요를 이용해 단편적인 자료를 완전한 책으로 확대할 수 있게 한다. 책과 교수진은 언어 학습부터 컴퓨터 과학, 유기 화학에서 법까지 범위가 넓다. 생물학 교육자들은 또한 위키스페시스(Wikispecies)에 주목해야 한다. 위키스페시스는 생명체에 대한 분류 디렉터리로 유기체저럼 구조화된 위키백과와 비슷하다.

위키자료집

이러한 2차 정보 사이트로부터 원 문서로 돌아가 작업하는 것은 위키자료집이다. 위키자료집은 자유 도서관(Free Library)으로도 알려져 있는데 원 텍스트, 주석, 번역, 보충 자료를 수집한다. 텍스트는 소설이나 비소설, 역사적 기록, 시민의 문서, 아니면 저작권 제한에서 자유로우면서 가치 있는 어느 것이나 될 수 있다.

위키인용집

위키인용집(Wikiquote)은 역사, 문화 등에서 가져온 여러 언어로 된 인용을 위한 열린 참고자료 사이트다. 최근에 위키인용집에 대한 논란이 있었는데 반박할 만한 내용과 저작권 위반 때문에 위키인용집을 그만 두어야 한다고 주장한 사람들도 있었다. 몇몇 사람은 인용이 위키자료집의 역할에 추가되어야 한다고 생각한다. 그렇지만 위키자료집에서 내용에 관한 문제가 생기면 커뮤니티는 위키가 없어지는 비극적인 단계를 밟기 전에 이 문제를 최소한 먼저 해결해야 한다고 생각하는 사람이 많다. 이런 일이 가까운 시일에 일어나지 않을 것이란 점은 확실하다.

위키미디어 공용

위키미디어 공용(Wikimedia Commons)은 이미지, 비디오, 오디오, 기타 자유로운 미디어 파일을 호스트하는 위키미디어 가족을 위한 동료 사이트다. 위키미디어 공용은 거대한 저장소이며 수백만 개 파일을 담고 있다. 또 그러한 미디어에 관한 문화적 저장소가 되려고 하며 주목할 만한 이미지를 분류하고 인식하는 것도 시도하고 있다.

위키미디어 활용하기

위키미디어 공간에서 벌어지는 활동의 폭과 깊이는 상호 교류와 위키미디어 재단에서 제공하는 것 이상의 유용한 응용을 위한 가능성을 열여준다. 이것이 웹 2.0의 정신이다. 사용자들은 지금 아직 통합되지 않은 공개된 데이터의 흐름을 가지고 원 발행자의 상상이나 포부를 넘어서는 신선한 응용물을 만들어낸다.

구글 맞춤 검색 위젯

다양한 위키미디어 자산을 전부 검색하는 방법은 현재로서는 분명하지 않다. 몇몇 개별 프로젝트에서 그러한 통합 검색을 제공하는데 유용함은 저마다 다르다. 자신만의 검색을 만들지 못할 이유가 없다. 구글의 이니셔티브인 Google Co-op에는 CSE(custom search engine) 도구가 포함되어 있어 자신의 사양에 맞게 검색을 정의하고 만들 수 있다. 나는 '위키미디어 플러스'라는 맞춤 검색을 만들었다. 이 맞춤 검색에는 모든 지원 언어와 기타 흥미로운 관련 사이트가 포함된다. 검색을 위한 주요 기준은 Listing 1과 같다.


Listing 1. 맞춤 검색 기준


*.wikipedia.org/*
*.wiktionary.org/*
*.wikibooks.org/*
*.wikiversity.org/*
*.wikinews.org/*
*.wikimedia.org/*
*.wikiquote.org/*
*.wikisource.org/*
*.wikia.com/*
*.uncyclopedia.org/*

                

CSE의 특징 중 하나인 와일드 카드 형식에 주의하라. 구글은 CSE용 위젯 폼도 제공한다. 사용 예제는 Listing 2를 보라.


Listing 2. "위키미디어 플러스" 검색 엔진 위젯 사용 예제

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>Hello Wikimedia world</title>
</head>
<body>
<p>Use the following gadget to search Wikimedia and selected Wikia sites.</p>
<hr/>
<!-- Remove line breaks in the following script element before using -->
<script src="http://www.gmodules.com/ig/ifr?url=
http://www.google.com/coop/api/016404950850373629424/cse/1bius8lhc7g/gadget
&amp;synd=open&amp;w=320&amp;h=75&amp;title=Wikimedia+plus
&amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;output=js"></script>
</body>
</html>


포맷을 맞추기 위해 구글의 긴 URL을 여러 줄로 나누었다. 코드를 시험하거나 적용하기 전에 script 엘리먼트의 줄바꿈을 지우기만 하면 된다. 그림 1은 결과 페이지의 스냅샷이다. 구글의 자바스크립트가 엘리먼트를 검색 폼을 담은 iframe으로 교체했다. 검색어를 입력하면 결과가 새 창에서 열린다.


그림 1. 구글 위키미디어 플러스 위젯을 사용한 예제 페이지
구글 위키미디어 플러스 위젯을 사용한 예제 페이지

오늘의 낱말 위젯

두 번째 예로 위키낱말사전의 word-of-the-day 피드를 사용해 자신만의 위젯을 만들 수 있음을 보여주겠다. 편집자들은 매일 흥미로운 낱말을 올린다. 이 위젯은 선택된 낱말과 위키미디어 공용(이미지, 사운드 파일, 비디오 등)에서 그 낱말을 찾은 검색 결과를 결합한다. Listing 3(wotd.js)은 위젯 자바스크립트 코드다.


Listing 3 (wotd.js). 자바스크립트 word-of-the-day 위젯
/*
Word of the day widget code.

Requires jQuery: http://www.jquery.com (tested with version 1.2.6)
*/

var wotd = 
{
//Some variavles global to the wotd namespace
wotdfeedurl: "wotd_feed_proxy",
commonssearch: "commons_search_proxy/",
commonsbase: "http://commons.wikimedia.org",
mediatargetid: "target",
wotdtargetid: "wotd",

word: "",
worddesc: "",
wiktionarylink: "",

//Invoked once the main HTML DOM is ready
loadPage: function()
{
wotd.medianode = $("#" + wotd.mediatargetid);
wotd.wotdnode = $("#" + wotd.wotdtargetid);
$.get(wotd.wotdfeedurl, wotd.processFeed);
},

//Invoked with the result of the AJAX call to the Wiktionary feed
processFeed: function(feed)
{
var item = $("item:first", feed);
var title = item.find("title").text();
wotd.word = title.substring(title.indexOf(':')+2);
wotd.wikionarylink = item.find("link").text();

//Update the target spot on the main page with the word of the day link
wotd.wotdnode.append(wotd.word);
wotd.wotdnode.attr("href", wotd.wikionarylink);

$.get(wotd.commonssearch + wotd.word, wotd.processSearch);
},

//Invoked with the result of the AJAX call to the Wikimedia commons search
processSearch: function(result)
{
//Narrow in on the search results page
narrowed = $(result).find(".mw-search-results");
//Fix up relative link and image URLs
narrowed.find("a, link").attr("href", function (arr) {
return wotd.commonsbase + $(this).attr("href");
});
narrowed.find("img").attr("src", function (arr) {
return wotd.commonsbase + $(this).attr("src");
});
//Update the target spot on the main page with the search results
narrowed.find("table td a").each(function (){
$('<div></div>').html($(this)).appendTo(wotd.medianode);
})        
},
}

$(document).ready(function()
{
wotd.loadPage();
});


코드에 주석이 잘 달려 있다. wotd.js는 Ajax를 호출하고 결과 페이지를 조작하기 위해 jQuery 라이브러리를 사용한다. 이와 같은 위젯에는 서버 측 구성요소도 있어야 한다. 보안 제한 때문에 한 도메인에서 또 다른 도메인으로 Ajax 요청을 할 수 없기 때문이다. 자바스크립트는 wotd_feed_proxy 같은 상대 URL을 호출하는데 이것은 기본적으로 원격 위키미디어 사이트 페이지의 프록시다. 이것은 서버 도구로 구현할 수 있는 일반적인 패턴이다. 나는 Listing 4(wotd_server.py)에서 파이썬/CherryPy 서버 코드를 사용했다.


Listing 4 (wotd_server.py). word-of-the-day 위젯용 파이썬/CherryPy 서버 측 코드
# encoding: utf-8
"""
wotd_server.py

Requires: CherryPy http://cherrypy.py"""

import os
import urllib2
import cherrypy

#Wikimedia commons search doesn't like bots, so pretend to be a browser
HEADERS = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }

#Tell the server where to find local, static files such as index.html
LOCAL_DIR = os.path.join(os.getcwd(), os.path.dirname(__file__))

#The URLs to be proxied
WOTD_FEED_URL = "http://toolserver.org/~cmackenzie/wotd-rss.php"
COMMONS_SEARCH_BASE = "http://commons.wikimedia.org/wiki/Special:Search?search="

#The server code class
class Wotd:
#Set up a local, static file server
default = cherrypy.tools.staticdir.handler(
section="/", dir=LOCAL_DIR)
#Proxy the Wiktionary feed
@cherrypy.expose
def wotd_feed_proxy(self):
cherrypy.response.headers['Content-Type'] = 'text/xml'
return urllib2.urlopen(WOTD_FEED_URL).read()
#Proxy Wikimedia commons search
@cherrypy.expose
def commons_search_proxy(self, word):
url = COMMONS_SEARCH_BASE + word
req = urllib2.Request(url, None, HEADERS)
response = urllib2.urlopen(req)
cherrypy.response.headers['Content-Type'] = 'text/html'
return response.read()

#Launch the server
cherrypy.server.socket_port = 8888
cherrypy.server.socket_host = 'localhost'
cherrypy.quickstart(Wotd())



이 코드 역시 주석이 잘 되어 있다. Listing 5(index.html)는 위젯용 시연 호스트 페이지다.


Listing 5 (index.html). word-of-the-day 위젯용 시연 호스트 페이지
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
<head>
<title>Wikimedia word of the day</title>
<script src="jquery-1.2.6.js" type="text/javascript"></script>
<script src="json2.js" type="text/javascript"></script>
<script src="wotd.js" type="text/javascript"></script>
</head>
<body>
<p>Wiktionary word of the day: <a id="wotd"></a></p>
<p>Related items on Wikimedia commons:</p>
<div id="target"></div>
</body>
</html>



그림 2. word-of-the-day 위젯을 사용한 예제 페이지
word-of-the-day 위젯을 사용한 예제 페이지



위로


요약

이 사이트들의 기술과 조직에 관심이 있다면 메타위키(Meta-Wiki)에 가 보라. 메타위키는 "위키미디어 재단의 프로젝트와 관련 노력에 대한 조정과 문서를 위한 웹 사이트"다. 위키미디어 재단은 비영리 조직이지만 비슷한 정보 공유 목적으로 몇몇 상업 벤처를 지원했다(상업 위키 팜이라 부른다). 가장 큰 벤처는 위키아(Wikia)로 위키미디어의 공동 창설자 중 한 명이 공동 창립했고 위키미디어 사이트들에 맞지 않는 주제를 다루는 다양한 위키(예를 들어 유머러스한 Uncyclopedia가 있다. 이 사이트는 실제 주제에 대해 소설 같은 설명을 한다)를 호스트한다. 위키릭스(Wikileaks)는 활동가, 내부 고발자, 정부, 회사, 기타 조직에서 비밀로 하는 민감한 문서를 익명으로 발행하려는 사람들을 위한 사이트다. 그 특별한 민감성 때문에 위키릭스는 전통적인 위키가 아니라 발행 전 내부 검토를 필요로 하는 혼성 위키다.

위키미디어 사이트에서 쓰는 크리에이티브 커먼즈 저작자 표시(Creative Commons Attribution) 라이선스 덕분에 여러분은 이 모든 자료, 심지어 상용 자료도 출처를 링크하고 명확히 밝히는 한 자유롭게 사용할 수 있다. 위키미디어의 목표가 흔들리기도 했지만 전진하는 과정의 일부다. 창의적인 웹 마스터는 작업할 만한 엄청나게 많은 정보를 갖게 된 것이다.



참고자료

교육
  • 위키미디어 재단에 대해 더 알아보라. 위키미디어 재단은 "위키백과를 비롯해 세상에서 가장 큰 협업으로 편집되는 참고자료 프로젝트를 운영한다. 위키백과는 방문자 수가 가장 많은 10대 사이트 중 하나이기도 하다." 위키미디어 블로그에는 이 모든 사이트에 관한 유용한 정보와 이정표가 나와 있다. 기술 플랫폼과 커뮤니티 조직에 관심 있다면 메타위키를 보라.

  • 위키낱말사전은 172개 언어로 된 인상적인 사전이다.

  • 위키책은 무료 교과서와 누구나 편집할 수 있는 주석 모음이다. 위키버시티는 위키책을 바탕으로 학습 커뮤니티와 학습 자료, 결과로 나오는 활동을 지원하기 위해 만들어졌다.

  • 위키뉴스는 뉴스와 시사에 관한 기사를 발행하기 위한 열린 협력 사이트다.

  • 위키스페시스는 생명체에 관한 분류 디렉터리다.

  • 위키자료집은 주석, 번역, 보충 자료를 비롯한 원 텍스트의 저장소다.

  • jQuery에 관한 좋은 소개 글은 Jesse Skinner가 쓴 "jQuery로 Ajax 개발을 단순화하기"를 보라.

  • 이 글의 필자가 만든 구글 맞춤 검색 위키미디어 플러스를 확인해 보라.

  • 위키아는 상업 회사로 정보 공유를 위해 위키미디어 사이트처럼 미디어위키 기술을 이용해 다양한 공개 위키를 호스트한다. 위키아에서 가장 인기 있는 사이트는 유머러스한 백괴사전(Uncyclopedia)이다.

  • 위키릭스는 내부 고발과 민감한 문서를 익명으로 유출하기 위한 사이트로 활동가와 내부 고발자를 지원한다.

  • "진정한 웹 2.0: 크레이티브 커먼즈(CC)를 익히자" developerWorks 기사를 보고 크리에이티브 커먼즈에 대해 더 공부하라.

  • developerWorks 웹 개발 존에서 이 칼럼의 이전 회를 비롯해 여러 기사와 튜토리얼로 자신의 개발 실력을 높혀 보라.

  • developerWorks 기술 행사와 웹 캐스트


제품 및 기술 얻기
  • 위키미디어 사이트는 오픈 소스 미디어위키(MediaWiki) 구현을 사용한다. 미디어위키로 어느 위키든지 호스트할 수 있다.

  • jQuery는 강력한 자바스크립트 라이브러리로 Ajax 기능 등을 갖췄다.


토론


필자소개

Uche Ogbuji 사진

Uche Ogbuji는 Zepheira, LLC의 파트너다. Zepheira, LLC는 차세대 웹 기술을 전문으로 하는 솔루션 회사다. Ogbuji는 XML, RDF, 지식 관리 애플리케이션용 오픈 소스 플랫폼인 4SuiteVersa RDF 질의 언어의 주 개발자다. 그는 컴퓨터 엔지니어이자 필자이며 나이지리아에서 태어나 미국 콜로라도 주 볼더에서 살며 일한다. Ogbuji의 블로그인 Copia를 방문해 보라.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



 


 


 


이 문서 북마킹 하기

mar.gar.in mar.gar.in naver naver eolin eolin del.icio.us del.icio.us





위로


developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의