C20::Dossier

Mediawiki

From C20::Dossier
(Redirected from Mediawiki)

This is the latest revision of this page; it has no approved revision.

개요

미디어위키는 결국 현존하는 위키엔진중에 가장 강력하고 편리한 소프트웨어다. 여기서 편리함이란 사용하기 편리하다는 것이 아니다. 오히려 몇몇 예외를 제외하면, 미디어위키는 제대로 사용하기에 매우 어려운 축에 속한다. 그 기능도 너무 방대(혹은 난잡)할 뿐더러, 유지보수 측면에서는 기본적인 PHP와 서버 관련 지식이 없으면 아예 손을 대는 것이 불가능하다. 확장기능 하나 추가하려면 무조건 FTP로 접속해 파일들을 추가하고, 설정파일을 편집해 확장기능을 추가해 주어야 한다. 사실상 글로벌 설정을 웹 인터페이스에서 고칠 방법은 존재하지 않는다. 미디어위키가 편리하다고 할 때 이는 데이터를 작성하고 저장하고 다루는 것에 대한 것이다. 그러나 JAVA를 사용한 다른 복잡한 위키들, 혹은 단순히 마크업-된 파일들을 올려놓고 그것들을 링크걸어놓는 다른 "간이 위키"들[1]과 비교했을 때에는 미디어위키는 월등한 우위를 가지고 있다. 아니, 이렇게도 말할 수 있을 것이다: 다른 디지털 노트 플랫폼, 예컨대 에버노트와 비교했을 때 위키엔진을 사용해야 하는 이유, 를 고려했을 때 유일하게 자기 주장을 내세울 수 있는 것은 미디어위키가 거의 유일하다[2].

구조와 역사

이 부분의 내용은 The Architecture of Open Source Applications의 내용을 요약하였다.

목표

미디어위키는 기본적으로 위키백과 등 위키미디어 프로젝트를 위해 개발되었다. 이 목적성이 미디어위키의 정체성을 규정한다. 즉 미디어위키가 처음부터 목표로 했던 것은, 다수의 사용자가 동시에 문서를 편집할 수 있는 환경을 전제로 한 안정성, 그러나 단지 위키미디어 뿐만 아니라 일반적인 용도로도 쓰일 수 있는 범용성, 확장성이었다.

역사

미디어위키의 역사는 결국 위키백과의 역사와 떼어놓고 생각할 수 없다. 초창기 위키백과는 Perl로 이루어진 UseModWiki를 사용했다. 이 소프트웨어는 전통적인 위키엔진을 따라 자동 CamelCase 링크 및 파일 기반 구조를 따랐는데, 이는 백과사전적인 표제어 구조에는 맞지 않는 것이었다. 그래서 위키미디어 측에서는 free link, 즉 현재 대부분의 위키 엔진이 사용하듯 이중 대괄호로 원하는 위치에 링크를 거는 기능을 엔진에 추가했다. 그러나 UseModWiki의 근본적인 한계도 있고 하여, 결국 새로운 엔진을 만들기로 결정했다. 이러한 맥락에 따라 미디어위키 자체는 UseModWiki에 큰 영향을 받았으며, 마크업 언어도 유사한 점이 많다.

새로운 위키엔진을 만들면서 그들이 중요시한 것은 성능이었는데, 당시 파일 기반 시스템은 성능이 좋지 않았기 때문에 MySQL을 기반으로 데이터를 저장했다. 처음에는 기능 구현에 집중한 PHP script를(“Phase II”), 그 다음에는 이를 기반으로 성능 향상에 집중하여 리팩토링한 미디어위키를 만들었다. 이 전환이 완료된 것은 2002년 시점이다. 2003년에 위키미디어 커뮤니티에서는 급속도로 커지는 위키백과의 스케일에 따라 발견되는 문제를 해결하기 위해 코드를 갈아엎고 처음부터 다시 만들 것인가, 아니면 최대한 점진적으로 기존 소프트웨어를 개량할 것인가에 대해 토론을 벌였다. 결론은 후자였고, 이것이 현재 미디어위키의 방향성을 결정했다 할 수 있다.

구조

상술하였듯 미디어위키는 초기 소프트웨어를 점진적으로 발전시키는 방향으로 개발을 진행하고 있다. 그 기반 언어인 PHP와 충돌하는 부분이 다수 존재했다. 대표적인 예가 클래스명에 접두어를 사용하지 않았던 점이다. 다만 미디어위키는 더 많은 개발자를 끌어모으기 위해 당시 더 뛰어난 성능을 보이던 Java 대신 PHP를 택했기 때문에, 이러한 문제들은 빠르게 수정되어갔다. 다만 현재까지도 이러한 (비호환적) 레거시 요소들이 남아있는 것은 사실이다. LocalSettings.php 파일 하나에서 모든 전역적인 설정을 진행한다는 요소 또한 그 개발의 난이도를 높이는 데 기여한다.

데이터베이스

미디어위키는 관계형 데이터베이스를 기반으로 운영되며, 크게 컨텐츠, 사용자, 캐시로 테이블을 구성하고 있다. DB 구조 면에서 가장 큰 개념적 변화는, '현재' 판본과 과거 판본을 따로 테이블로 나누어 저장하던 1.4까지의 구조에서, 모든 버전을 수평적인 위치에서 저장하고 대신 메타데이터를 통해 그 최신 여부를 판단하게 하는 것이다. 이를 통해 내부 동작 성능을 상당히 향상시켰으며, 괄니도 훨씬 용이하게 변화하였다. 아울러 버전의 텍스트와 메타데이터를 분리함으로써, 페이지를 삭제하더라도 그 메타데이터만 삭제하고 본문은 삭제하지 않아, 혹시나 있을 복원에 쉽게 대응하도록 했다. 버전간의 차이는 diff로 저장되며, 원한다면 gzip 압축을 통해 최대 95% 가량 그 용량을 줄인는 것이 가능하다.

링크

  • 공식 홈페이지
  • Working with Mediawiki: Yaron Koren이 작성한 미디어위키 메뉴얼. Yaron Koren은 미디어위키에 대한 많은 기여를 하고 있는 개발자 중 하나이다. SMW 및 Cargo도 그가 개발에 참여하였으며, 그 외에도 확장기능 다수에 참여하였다.

관련 문서들

  1. 넓게 보면 도쿠위키도 여기에 속한다.
  2. Ecogwiki도 비슷한 위치에 있기는 하나, 기능적인 면에서는 불완전한 것이 사실이다.