the seed

the seed forum

the seed나무위키의 설립자인 namu, PPPP, kasio 등이 만든 위키 엔진으로, 모니위키 문법의 호환을 목표로 만들어진 위키 엔진이다. Node.js로 작성되었고 성능을 위해 C++도 일부 이용되었으며 템플릿 언어로는 Vue.js 기반의 Nuxt.js를 이용한다.[1] 2019년 9월 업데이트 이전에는 swig를 사용했다. 2015년 리그베다 위키 사유화 사태 당시 설립된 나무위키에서 기존 리그베다 위키와의 문법 호환을 위해 처음 사용되었다.

미디어위키와 달리 비공개라 인터넷상에 배포를 하지 않는다. 사용을 원한다면 대용으로 오픈나무가 있다.

1 특징[편집]

최근 변경이 문서와 토론으로 분리되었으며, 스레드 토론을 채택했다는 것이 특징이다. 사용되는 데이터베이스는 정확히 밝혀지지 않았으나 MySQL이나 MariaDB로 추측된다.

2 장점[편집]

2.1 익숙한 문법[편집]

the seed 엔진은 한국인 개발자가 한국어 위키를 위해 만든 모니위키에서 파생된 엔진인 만큼 각주취소선, 표 문법과 같은 기능을 위해 한국어 입력기 사용자가 어렵지 않게 사용할 수 있는 익숙한 표현을 제공한다. 예를 들어, 미디어위키 확장 기능인 cite의 각주 문법을 입력할 시 편집기 버튼이나 별도의 틀 없이는 <ref>내용</ref>식으로 한/영 키를 일일이 눌러야하는 미디어위키와는 다르게, 한/영키 변환 없이 [* 내용]식으로 내용 사이에 특수문자 입력만 하면 된다.

대표적으로 다음과 같은 코드들이 미디어위키에 비해 사용하기 간단한 편이다.

태그 이름 미디어위키 the seed
취소선 입력 <s>(내용)</s>
또는 <del>(내용)</del>
~~(내용)~~
또는 --(내용)--
밑줄 입력 <u>(내용)</u> __(내용)__
위 첨자 <sup>(내용)</sup> ^^(내용)^^
아래 첨자 <sub>(내용)</sub> ,,(내용),,
주석 <ref [name="(각주 이름)"] >(각주 내용)</ref> [*[각주 이름] (각주 내용)]
문법 무시하기 <nowiki>(내용)</nowiki> {{{ (내용) }}}
글상자 <blockquote> (내용)</blockquote> > (내용)
글자색 변환 <span style="color:(색깔)">(내용)</span>[2] {{{#(글자색이름) (내용) }}}
글자 크게 하기 <big> (내용) </big>
글자 크기를 더 키우기 위해서는 big 태그를 반복해서 써야 하는 불편함도 있다.
{{{+1 (내용) }}}
글자 크기 키우는 효과를 더 증가시키기 위해 1 대신 2, 3, 4, 5 등 다른 숫자로 바꾸어주면 된다.
글자 작게 하기 <small> (내용) </small>
글자 크기를 더 줄이기 위해서는 small 태그를 반복해서 써야 하는 불편함도 있다.
{{{-1 (내용) }}}
글자 크기 줄이는 효과를 더 증가시키기 위해 1 대신 2, 3, 4, 5 등 다른 숫자로 바꾸어주면 된다.

2.1.1 한 줄 개행 인식[편집]

미디어위키마크다운과 같이 한 줄 개행을 인식하지 않는다. 문단을 나누기 위해서는 두 번 개행하여 쓰며, 한 번 개행(강제 개행)을 위해서는 <br /> 기호를 사용해야 한다. 반면에 나무위키를 비롯한 the seed 엔진을 사용하는 위키들은 한 줄 개행을 인식한다. 이는 일반 문서에서 한 줄 개행을 사용하는 일이 많은 화자들의 정서에서는 직관적으로 문서를 작성할 수 있다는 장점이 있다.

이 한 줄 개행을 인식하는 특성과 더불어 여러 줄을 인식하는 주석(Comment) 기호의 부재[3]로 인해 복잡한 틀을 유지보수할 때에는 개행을 이용해서 틀의 내용을 나눠서 관리하는 데 지장이 있을 수 있지만, 틀 문서를 관리해야 하는 이용자가 아닌 이상 크게 체감할 수 없는 특성이다.

2.1.2 표 문법의 간단함[편집]

미디어위키<table> 태그를 사용하거나 {|class-"wikitable"를 활용해야 하고, 줄을 나눌 때에도 |- 기호를 사용해아 하는 반면 나무위키에서는 두 줄 기후 ||로 칸의 경계를 만드는 식으로 쉽게 해결할 수 있다. 또한 문단 좌/우 정렬 방식도 칸 경계기호 바로 뒤에 <(>, <)>만 삽입하면 간단히 해결된다.

2.2 헤딩 아래의 내용 숨기기 간편함[편집]

4.15버전 이후 the seed 엔진에서는 ==# (문단명) #== 기호를 이용해서 문단 내부에 접힌 상태로 출력이 가능하다.

2.3 직관적인 토론 페이지[편집]

the seed 엔진은 토론 페이지와 일반 페이지가 완전히 다른 형식으로 분리되어 있고, 대화형으로 진행되는 방식이다. 따라서 미디어위키와는 달리 서명을 실수로 입력하지 않거나 다른 사람의 토론 내용을 훼손할 우려가 없다. 그 뿐 아니라 사용자가 부적절한 대화 내용을 서술할 경우 개별 대화내용을 숨길 수 있는 장점도 있다. 그 뿐 아니라 토론 주제별로 토론 페이지를 만들기 때문에 다른 토론에 대한 페이지와 물리적으로 분리할 수 있는 이점도 가지고 있다.

미디어위키는 기본적으로 토론 페이지가 일반 문서 페이지와 유사한 형태이기에 서명을 입력하지 않거나 다른 사람의 대화 내용을 훼손할 수 있는 실수를 저지를 수 있다. 나무위키의 대화방식과 유사한 토론식 레이아웃을 제공하는 확장기능인 mw:Extension:StructuredDiscussions의 경우 위키 자원을 잡아먹는 단점이 존재한다. 또한 나무위키가 처음 나왔던 시절에는 위키 문법을 지원하지 않았던 단점까지 있어서 널리 사용되지 않았다.

2.4 사용자 권한 배분 기능이 강력함[편집]

the seed에서는 관리자가 ACL(문서 접근 제어) 권한 (미디어위키의 보호 기능과 유사)을 조절할 때 문서 편집 권한 뿐만 아니라 문서 읽기 권한도 간편하게 제한할 수 있다. 미디어위키에서는 기본적으로 모든 문서가 읽기가 허용되어 있고, 비로그인 사용자의 읽기 제한을 거는 경우 모든 문서가 읽기가 제한되기에 개별 문서단위로 읽기 제한을 걸기 위해서는 특정 확장기능[4]을 설치한 뒤에 Localsettings.php를 일일이 조작해야 하는 번거로운 절차가 수반된다.

3 단점[편집]

3.1 문서 이동 및 판본 관리 메커니즘[편집]

the seed는 리브레 위키에서 사용하는 미디어위키 엔진과는 달리 관리자가 삭제된 문서나 부적절한 편집이 가해진 이전 판본들의 접근 권한을 제한하는 기능이 없다. 따라서 반달리즘 등 부적절한 편집이 들어간 판본을 숨기기 위해서는 개발자측에서 개입해야 해결되는 문제가 있다. 혐오스러운 사진이야 그 파일을 삭제한 뒤 생성보호를 통해 막을 수 있지만, 악의적인 정보가 서술되거나 혐오스러운 유튜브 영상이 포함된 리버전은 문서를 수정해도 이전 판본을 통해 접근이 가능한 상태인 것이 문제가 된다. 나무위키에서 표절 경고 틀을 만든 것도 엔진 기능상의 한계로 인해 문서 자체는 보존하되 관리자 권한으로 부적절하게 표절한 내용을 포함하는 판본만 보지 못하게 하는 기능이 없기 때문이다.

the seed 엔진 기반 위키들은 문서를 "이동"할 때에 이동하기 전의 문서의 제목에다가 리다이렉트를 남기지 않는다. A 문서를 B문서로 이동할 때 B문서에는 A문서의 로그가 기록되는 것에 반해 A문서에는 문서 이동 기록이고, B문서로 가는 리다이렉트 기록이고 아무것도 남지 않는다. 미디어위키의 경우 일반 이용자들은 문서를 옮길 때 이동 전의 문서명에 이동후 제목으로 넘겨주는 넘겨주기를 강제로 남기게 되고, 넘겨주기를 추가했다는 기록이 남는 것과는 대비된다. 이 점 때문에 문서 이동을 악용한 반달을 하면 이동하기 전의 원래 문서에 기록이 하나도 남지 않아 문서 제목을 기억하지 않는 이상 추적하고 복구하기 대단히 어려워지게 되는 것. 이는 개별 문서 이외에 위키에 최근 문서를 제외하고 문서 이동 기록을 위키 전체에서 관리하는 기능이 없는 단점까지 있기에 복구하기 어렵게 만들 수 있다.

the seed 엔진은 문서 리비전 일부를 떼어내서 다른 문서에 옮길 수도 없다. 이 점 때문에 미디어위키에서는 역사 합치기로 해결할 수 있는 문제를 이 엔진을 사용하는 나무위키에 같은 곳에서는 틀을 이용해서 이전 리비전을 표시해야 하는 일이 벌어진다. 문서를 삭제한 후에 이동한 문서에 편집 내역이 있을 경우 문서 이동 전에 삭제되거나 리다이렉트 처리된 문서 A에 기록된 편집 내역과 이동한 문서 B에 기록된 편집 내역이 개별적으로 기록되는데, 나무위키에서는 새 문서에 이전 문서의 역사를 합칠 수 없어서 문서 가져옴 틀로 이 문서의 이전 문서가 어디에서 가져왔는지 일일이 표기해야 한다.

구체적으로

미디어위키
A→B로 이동 후 A문서를 새로 작성했다고 하자. 관리자가 A문서의 역사에 B문서로 이동했다는 기록을 추적할 수 있으므로 B문서의 내용을 A문서에 다시 복원하고자 할 때는 역사합치기를 이용해서 복원할 수 있다. 역사합치기가 안 먹히는 경우도 있기는 하지만 대개는 A문서 삭제→(B→A)이동→(새로 작성한) A문서 역사 복원을 이용해서 역사합치기가 가능하다.
the seed
A→B로 이동하면 A문서에는 아무것도 기록이 남지 않는다. 따라서 B문서의 제목을 이상하게 해놓으면 B문서의 제목을 알지 않는 이상 A문서로 복구할 수 없다. 그것도 문제인데 역사합치기를 기술적으로 지원하지 않으므로 별도의 틀을 이용할 수밖에 없다.

이외 the seed 엔진 기반 위키는 문서 삭제만으로는 단순히 검색 결과에 잡히지 않게 하는 것 이외에는 문서를 비운 것과 크게 다르지 않다. 따라서 과거에는 부적절한 문서의 접근을 막기 위해서는 문서 삭제하기 전에 접근하기 어려운 제목으로 이동하는 "더미화"라고 하는 작업을 거쳐야 했다. 2020년 이후에는 관리자만 접근이 가능한 이름공간인 휴지통 이름공간으로 문서를 이동시키거나 문서의 읽기 권한을 높이는 식으로 완전 삭제가 가능하다. 혹은 ACL 설정을 통해 편집을 못하게 막는 방법도 있다.

3.2 틀의 변수명 문제[편집]

the seed는 미디어위키에 비해 HTML을 표현하는데 있어서 더 자유도가 높기는 하나 미디어위키와는 달리 틀의 변수명은 비워둘 수도 없고, 하나의 변수를 여러 변수명에 대응할 수도 없다. 예를 들면

미디어위키
틀:정보상자 같은 경우 정보상자의 각 항목명은 입력해도 출력이 가능하고, 입력하지 않아도 정상적으로 출력할 수 있게 디자인할 수 있다. 또한 {{{(변수명1)|{{{(변수명2)|}}}}}} 형태로 만들면 "(변수명1)=내용"으로도 변수를 입력할 수 있고, "(변수명2)=내용"으로도 변수를 입력할 수 있다.
the seed
각 틀에는 @변수명 형태로 표시하고, 틀을 사용할 때는 include 기호에 틀 이름을 지정하고 옵션에 변수명=(값)이라는 형식을 이용해서 변수명 대신 대입하는 값을 출력하는 방식을 사용한다. 문제는 틀 삽입 시에 변수명에 해당하는 값을 할당하지 않으면 변수명을 비우는 것이 아닌 원래 틀에 있는 문구인 "@변수명"이라는 문구가 고스란히 출력한다는 문제가 발생한다는 점이다. 또 2개 이상의 변수명을 가진 변수를 만들 수도 없다. 예를 들면 @title로 틀의 변수명을 지정하면 @theme 이라는 의미가 같은 변수명을 @title 대산 사용할 수 있게 만들 수 없다는 것.

엔진의 한계로 틀의 내부의 변수명에 대해서 반드시 지정된 값을 하나 입력해야 한다는 특징 때문에 나무위키는 {{정보상자}}나 {{둘러보기 상자}}처럼 입력하는 개수에 따라 다양한 디자인을 제공하는 강력한 틀도 만들 수 없고[5], 하위 문서 틀 같은 경우도 하위 문서의 개수(변수명의 개수)에 따라 각각 틀을 만들어야 하는 번거로움이 생긴다. 나무위키의 틀 중 "틀:하위 문서n" 형식으로 틀이 여러 개 있다는 것이 그 증거.

3.3 파서함수의 부재로 인한 환경 반응형 문서 지원의 어려움[편집]

If문, Switch문 등의 파서 함수를 지원하지 않는다. 이 때문에 틀의 변수명에 따라 조절할 수 있는 디자인이 제한적인 편. 당장 {{둘러보기 상자}}나 {{정보상자}} 같은 핵심 틀도 if라는 분기문을 만드는 파서함수 없이는 크기를 유연하게 조절할 수 없다. 리브레 위키가 변수명에 따라 틀 디자인을 바꿀 수 있는 것과는 대비된다.

이 점은 나무위키가 리브레 위키 같은 미디어위키 기반의 위키에 비해 PC와 모바일 환경에 따라 디자인이 바뀌는 틀을 제작하기 대단히 어렵게 작용한다.

파서함수의 부재는 서술 방식의 제약으로도 이어진다. 일례로 나무위키:연고전 문서는 한때 나 먼저 원리의 특성을 살려서 "고연전"이라고 입력하면 고려대를 우선시하는 서술을, "연고전"이라고 입력하면 연세대를 우선시하는 서술을 보여준 적이 있었다. 그러나 반드시 동시에 편집해야 한다는 현실적인 문제가 발생하고, A가 "연고전" 문서에 편집했을 때 B가 그것을 보충하기 위해 "고연전" 문서에 상응하는 편집을 할 경우 서술의 저작자 표시가 왜곡되는 문제도 발생한다는 지적 때문에 연고전 문서로 통합했다. 반면에 리브레 위키에서는 파서함수가 있어서 if 파서함수만 적절히 사용만 하면 연고전 문서만 편집해도 고연전 문서가 같이 편집되는 이점이 생긴다.

3.4 각주 문법 관련[편집]

the seed 엔진은 각주를 모아놓는 각주 매크로만 지원하고 미디어위키처럼 각주의 성격에 따라 그룹화하는 지정하는 기능은 지원하지 않는다. the seed 엔진의 각주 매크로는 단순히 각주 매크로의 앞부분에 있는 각주를 표현하는 역할만 할 뿐이다.

미디어위키
<ref name="(각주명)" group="(각주의 그룹명)">를 사용해서 각주의 그룹명을 지정한 뒤에 각주 그룹이 배치되는 위치에 <references group="(각주의 그룹명)"> 형식으로 표시해서 각주를 범주화할 수 있다.
the seed
각주 그룹명을 지정해서 범주화할 수 있는 방법이 전혀 없다. [각주] 매크로는 단지 이 매크로 위에 서술된 문서의 각주 내용을 표시하는 역할만 한다. 또한 각주를 5개 포함한 본문을 서술한 후 첫 번째 [각주] 매크로를 삽입하고 그 아래에 10개 각주를 포함한 본문을 서술하면 첫 번째 각주 매크로 부분에서는 이 매크로 윗부분에서 표현한 5개의 각주 내용만 출력되고, 본문 맨 아래에 아래 부분의 10개의 서술에 표현된 각주가 출력된다.

이 점은 리브레 위키 같이 주해와 출처 표시 같은 각주를 구별하지 않는 위키에서는 각주를 범주화하지 않아서 별로 부각되지 않는 단점이지만 설명하는 각주와 출처 표기를 하는 각주를 엄격하게 구별하는 페미위키 같은 방식을 지원하지 못하는 약점으로 작용한다.

3.5 토론 문서 및 최근 바뀜 기능의 제약[편집]

  • 2019년 9월에 문서 기여내역을 분할해서 보여주는 옵션이 추가되어서 사용자의 문서 기여내역을 최근 30일 내역제한이 걸리거나 헤비 유저의 어마어마한 기여내역으로 인해 기여내역 조회 시 랙이 걸리는 문제는 해결되었다. 하지만 사용자 토론 문서는 22년 12월 기준으로도 여전히 30일 제한이 걸려있고, 최근 바뀜 기능도 위키 전체에서 최근 편집 120회만 조회할 수 있다. 나무위키처럼 하루에도 수천, 수만 건의 편집이 이루어지는 위키에서는 문서 관리를 하는데 약점으로 작용하는 셈.

3.6 기타 기능상 문제[편집]

  • 넘겨주기된 문서(A'이 A로 넘겨지게된 문서)를 다른 문서에 끼워넣기(transclusion, A' 문서를 끼워넣기)할 때 넘겨주기된 문서(A)가 아닌 넘겨주기 문서(A')가 끼워넣어진다. 이 점 때문에 틀은 사실상 넘겨주기가 무의미해진다는 것이 문제. 알파위키에서는 A라고도 불리고 B라고도 불리는 틀을 사용하고 싶을 땐 A의 소스코드를 B에 통채로 복사해서 사용한다.
  • 엔진의 오류로 인해 편집창에서 한 줄이 채워진 상태에서 스페이스 바를 누르면 공백 뒤의 내용이 자동으로 개행된 채 입력되는 버그가 있다. 나무위키:나무위키 강제개행 버그 문서 참조.
  • 관리자조차 이용자의 이름을 변경하는 권한이 주어지지 않는다. 이런 특성 때문에 닉네임을 바꾸고 싶을 때에도 기존 계정과 그 기여내역을 남겨야 한다. 또한 위키 특성상 기술적으로도 탈퇴 기능을 지원하지 않는데 이런 특성까지 겹쳐서 개인이 자신의 기여한 것에 대해 "잊힐 권리"를 보장할 수 없는 구조다.
  • 편집 취소 기능이 없다. 그렇기 때문에 정상적인 기여분까지 지워지게 되돌리기를 하는 경우가 많다.

3.7 해결된 문제점[편집]

2019년 9월 이전의 swig를 사용했을 때에는 성능상의 이유로 기여내역 조회에 제약을 걸었으나[6] Nuxt.js으로 변경함으로써 일반 이용자의 문서 기여내역을 조회하는 것에 한해 해결되었다.

이 문서의 3번 문단의 일부는 나무위키/문제점 문서의 840282판에서 가져왔습니다.

4 모니위키와의 호환성[편집]

namu는 위키 엔진 개발시 모니위키와의 문법호환을 염두에 두고 개발한다. 따라서 나무위키의 문법을 모니위키에 붙여넣으면 얼추 호환되는 모습을 볼 수 있다. 위키 개발 초기에 개발진이 모니위키의 파서를 참고하려 했으나 모니위키의 소스코드가 너무 더러워 기초부터 새로 개발한 것이고, 이 과정에서 파편화된 문법을 정리하면서 모니위키와의 호환성이 완전하지 않고 부분적으로 갖추게 된 것이다.

대표적으로 다음과 같은 문법들은 호환되지 않는다.

설명 모니위키 나무마크
매크로 삽입 방법 <<매크로>>, [[매크로]] [매크로]
수식 $ Latex $ [math( Latex )]
문서명 링크 wiki:문서명 [문서명], [[문서명]] [[문서명]]
파일 이름 [[파일(파일명)]] 또는 attatchment:/(파일명) [[파일:파일명]]
외부 이미지 삽입 지원 미지원
인터위키 지원 미지원

5 쓰이는 곳[편집]

애초에 나무위키를 위한 비공개 엔진으로 만들어졌기 때문에 나무위키와 테스트용으로 운영되는 더시드위키, 그리고 나무위키 민선 폐지 사건 이후 namu가 관선 반대 세력을 포섭하기 위해 만든 알파위키만 The seed 위키를 돌리도록 되어 있다. 놓치기엔 너무 아까운 고기

나무마크를 활용하고 싶다면 미디어위키를 설치한 뒤 미디어위키용 나무마크 확장기능을 설치하거나 openNAMU를 활용하면 된다. 단 openNAMU는 파이썬 pip 명령어를 지원하지 않은 곳에서는 설치가 불가능하다.

6 각주

  1. 이 템플릿으로 교체한 이후에는 사용자의 30일 이전의 기여도 볼 수 있다. 그러나 이 이후로 페이지 HTML 소스가 지저분해졌다(...).
  2. {{}} 틀은 리브레 위키의 커스텀 틀이라 미디어 위키 전체에서 적용되는 요소가 아니다.
  3. The seed의 주석 기호는 줄 맨 앞에 ##을 삽입하는 것밖에 없다.
  4. 참조 : mw:Category:Page specific user rights extensions
  5. 구체적으로 설명하자면 각종 정보 틀에서 각 항목에 대해 미디어위키에서는 변수명을 비울 경우 비운 부분은 출력하지 않게 할 수 있지만 나무위키를 비롯한 the seed 엔진 기반의 위키들은 @변수명 형태를 포함하는 양식이 줄줄이 표현되어 깔끔한 내용을 표현하는데 약점이 생긴다. 이 약점은 파서함수 기능을 제공하지 않는 것과도 관련은 있다.
  6. 나무위키는 30일