‘위키위키위키’(WikiWikiWiki)는 민구홍 매뉴팩처링의 도움으로 민구홍, 즉 내가 직접 개발한 텍스트 파일 기반 위키 엔진이다. 이름은 워드 커닝햄이 처음 개발한 위키위키웹에서 ‘웹’을 떼어내고, 그 자리에 ‘위키’를 덧붙였다.
개발 동기
기존의 여러 위키 엔진을 검토했지만, 대부분 불필요한 기능이 많거나, 무겁거나, 입맛에 맞게 수정하기 어려웠다. 미디어위키는 지나치게 무거웠고, 도쿠위키는 독자적인 마크업 언어가 마음에 들지 않았다. 결국 핸드메이드 웹의 정신에 따라 꼭 필요한 기능만 갖춘 단순하고 효율적인 위키 엔진을 직접 만들기로 마음 먹었다.
핵심 설계 원칙
위키위키위키는 다음의 단순한 원칙들을 만족하도록 설계되었다.
- PHP 기반: 별도의 프레임워크 없이 순수한 PHP로 동작하여 가볍고 빠르다.
- 텍스트 파일 데이터베이스: 모든 문서는 서버의
content/
디렉토리에 텍스트 파일로 저장된다. 덕분에 백업과 관리가 매우 용이하다. - 마크다운 사용: 문서 내용은 표준 마크다운 문법으로 작성한다.
- 로그인 기반 편집: 로그인한 사용자만 새 문서를 만들거나 기존 문서를 편집, 삭제할 수 있다.
- 단순한 삭제: 문서의 내용을 모두 지우고 저장하면 해당 문서가 삭제된다.
주요 기능
- EasyMDE 마크다운 편집기: 문법 강조와 툴바를 지원하는 직관적인 편집기를 제공하여 글쓰기 경험을 향상시킨다.
- 위키 편의 기능:
- 역링크: 특정 문서가 어떤 다른 문서들에서 링크되었는지 목록을 보여준다.
- 필요한 문서: 링크는 있지만 아직 생성되지 않은 문서들의 목록을 제공한다.
- 임의 문서: 랜덤으로 문서를 보여주어 위키를 탐색하는 재미를 더한다.
- 다국어 지원(i18n): 사용자의 브라우저 언어를 감지하여 위키의 인터페이스를 해당 언어로 보여준다.
- 커스텀 태그:
(video: URL)
: 유튜브, 비메오 영상을 삽입한다.(iframe: URL)
: 외부 페이지를 iframe으로 삽입한다.(wikipedia: 검색어)
: 위키백과 문서로 바로 연결되는 링크를 생성한다.(redirect: 문서 제목)
: 특정 문서로 넘겨주는 리디렉션 문서를 만든다.
- LLM, RSS, Sitemap 지원: 기계가 읽기 좋은
llms.txt
포맷과rss.xml
,sitemap.xml
을 자동으로 생성하여 외부 서비스와의 연동성을 높였다.
개발 과정
이 위키 엔진을 개발하는 과정은 마치 한 편의 글쓰기와 같았다. 큰 얼개를 잡고, 코드를 쏟아내고, 수없이 편집하고 퇴고하는 과정을 반복했다. 그 결과, 꼭 필요한 기능만 담아 간결하면서도 효율적으로 동작하는 지금의 ‘위키위키위키’가 탄생했다.