Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

모니위키 시스템 개요

RCS

모니위키는 누구든지 자유롭게 글을 올리고 수정할 수 있다. 따라서 문서에 대한 버전관리가 필수적이다. 요즘은 git으로 문서버전을 관리하는 경우가 많은데, 모니위키는 로컬 시스템에서 RCS를 이용해서 문서 버전관리를 한다. RCS(Revision Control system)를 이용하는 이유는 거의 모든 리눅스 시스템에서 기본으로 제공하는 버전관리 소프트웨어이기 때문이다.

별다른 소프트웨어 없이 버전을 관리할 수 있어서 편하긴 한데, 로컬 파일시스템에 저장하기 때문에 주기적으로 백업을 해줘야 한다. 파일 시스템 날라가면, 그걸로 끝이다. 나 같은 경우 주기적으로 github에 백업한다.

디렉토리 구조

모니위키의 디렉토리 구조다. 주요한 디렉토리만 설명한다.
DocumentRoot ----+--- data ---+-- text --+-- RCS
                 |            |
                 |            +-- cache
                 |
                 +--- theme
                 |
                 +--- plugin ---+-- processor
                 |
                 +--- locale 
  • data/text : 위키페이지가 저장되는 디렉토리다.
  • data/text/RCS : 각 위키페이지의 RCS문서가 저장되는 디렉토리다.
  • data/cache : 모니위키는 파일 시스템이기 때문에 검색이 쥐약이다. 성능과 효율성을 높이기 위해서 필요한 정보를 캐쉬해 놓는다.
  • theme : 모니위키는 테마를 제공한다. 테마별로 디렉토리를 만들어서 관리하면 된다.
  • plugin : 플러그인은 여기에서 개발한다. 내가 모니위키를 사용하는 이유의 9할은 간편한 플러그인 개발 때문이다.
  • plugin/processor : 블럭문을 프로세싱하기 위한 플러그인들이 들어간다.
  • locale : 모니위키를 gettext를 이용한 i18n을 지원한다.

위키페이지 저장

위키페이지의 이름(URL)이 파일 이름으로 그대로 저장된다. 파일이름은 위키페이지의 이름을 URL인코딩 한후 %를 _로 치환하는 방식이다. 예를들어 페이지의 이름이 "Site/python"이라면 "Site_2fpython"로 저장된다. 문서들을 디렉토리 형식으로 관리하는 경우가 많은데, 이렇게 flat한 파일로 저장되기 때문에, 이름 변경이 쉽지 않다. 하위 디렉토리의 모든 파일이름을 몽땅 바꿔줘야 하기 때문이다. 예전에는 쉘 스크립트 하나 만들어서 디렉토리 이름을 변경했는데, 최신버전도 여전한지는 잘 모르겠다. 아뭏든 파일이라서 관리에 제약이 상당히 심하다.

Template 파일

모니위키는 페이지 템플리트를 지원한다. 자주 사용하는 위키형식을 템플리트로 만들어 놓으면, 반복 재 사용할 수 있다. 템플릿은 위키페이지와 동일한 형식으로 저장된다. 파일이름의 끝을 Template로 저장하면 템플릿으로 불러와서 사용할 수 있다.

모니위키를 이용해서 시스템 모니터링 화면을 만든적이 있었는데, 그 때 Template를 사용했다. 모니터링할 노드가 추가되면, 그냥 template를 복사하면 된다.(물론 이거 자동으로 했다.)

모니위키 플러그인 시스템

모니위키의 핵심이라고 생각하는 기능이다. 함수를 변수처럼 사용하는 가변 변수를 지원한다. 모니위키는 가변 변수를 이용해서, 플러그인 확장을 지원한다. HelloWorld 플러그인을 만들려고 하면, plugin 디렉토리밑에 아래와 같은 코드를 만들면 된다.
# cat helloworld.php
<?php
function macro_helloworld($formatter, $value) {
  return "Hello World"; 
}
?>

위키페이지에서는 아래와 같이 플러그인을 사용할 수 있다.
== 테스트 위키 ==
[[HelloWorld]]