SSD Nodes Learn Hosting plans →
가이드 Matt Connor작성자 Matt Connor · 업데이트됨 2026-08-13

셀프 호스팅 위키 추천: BookStack, Wiki.js, Outline 비교

BookStack, Wiki.js, Outline의 설치 난이도와 편집 방식, 인증 설정을 비교합니다. 솔로 관리자와 팀 환경에 적합한 최적의 셀프 호스팅 위키를 선택하는 기준을 정리했습니다. 각 도구의 구조적 특징과 운영 시 고려해야 할 핵심 차이점을 확인해 보십시오.

어떤 셀프 호스팅 위키를 운영해야 하는가

셀프 호스팅 위키를 사용하면 팀의 문서를 직접 제어하는 서버의 검색 가능한 한 곳에 모을 수 있습니다. BookStack, Wiki.js, Outline 모두 이 역할을 수행합니다. 이 도구들은 첫 페이지가 로드되기 전까지 얼마나 많은 설정을 직접 구성해야 하는지, 그리고 누가 로그인할 수 있는지에 따라 차이가 있습니다.

BookStack은 설치가 가장 가볍고 구조에 대한 고유한 철학이 확고합니다. Wiki.js는 하나의 페이지 트리 내에서 가장 다양한 편집기 선택지를 제공합니다. Outline은 세 가지 도구 중 글쓰기 경험이 가장 뛰어나지만, 외부 ID 공급자(identity provider)를 연결하기 전까지는 누구도 로그인할 수 없습니다.

아래의 모든 내용은 각 프로젝트의 공식 문서와 공개된 설정 파일을 바탕으로 작성되었습니다. 이는 벤치마크가 아닌 기능 비교입니다. 세 도구 모두 빠르게 발전하고 있으므로 버전 번호와 요구 사항에는 기준 날짜를 명시했습니다.

구조가 곧 실질적인 선택입니다

BookStack은 콘텐츠의 형태를 고정합니다. 페이지는 책 안에 존재하고, 책은 챕터를 포함할 수 있으며, 서가는 책들을 그룹화합니다. 다섯 번째 계층을 임의로 만들 수는 없습니다. 이러한 제한이 곧 제품의 핵심입니다. 페이지가 들어갈 위치가 하나뿐이므로, 새로운 작성자도 페이지를 어디에 배치해야 할지 즉시 알 수 있습니다. 그 대가로 이 형태에 맞지 않는 콘텐츠는 강제로 끼워 맞춰야 합니다.

Wiki.js는 디스크의 폴더와 같은 경로 트리 방식을 사용합니다. ops/backup/restic에 있는 페이지는 사용자가 배치한 곳 어디든 위치할 수 있으며, 깊이 또한 직접 결정합니다. 두 사람이 같은 주제를 서로 다른 경로에 분류하는 것을 막을 방법이 없으므로, Wiki.js 인스턴스에는 트리 구조를 관리할 담당자가 한 명 필요합니다.

Outline은 문서 안에 문서가 중첩되는 컬렉션 방식을 사용합니다. 문서를 이동하려면 마우스로 드래그해야 합니다. 이 세 가지 도구 중 가장 유연하지만, 그만큼 관리가 소홀해지기 쉽다는 단점도 있습니다.

BookStack: 최소 설치

BookStack은 MySQL을 백엔드로 사용하는 PHP 애플리케이션입니다. 2026년 7월 기준 문서화된 요구 사항은 PHP 8.2 이상, MySQL 8.0 또는 MariaDB 10.6 이상이며, 소스에서 설치할 경우 Composer 2.2 이상이 필요합니다. 현재 릴리스 라인은 26.05입니다.

이 프로젝트는 Ubuntu 릴리스별로 하나의 설치 스크립트를 배포합니다. 24.04용 스크립트는 Apache, MySQL 8.0, PHP 8.3을 자동으로 설치합니다.

wget https://codeberg.org/bookstack/devops/raw/branch/main/scripts/installation-ubuntu-24.04.sh
chmod a+x installation-ubuntu-24.04.sh
sudo ./installation-ubuntu-24.04.sh

스크립트를 실행하기 전에 경고 문구를 읽으십시오. 문서에 따르면 이 스크립트는 "오직 초기 상태의 OS 전용이며, Apache, MySQL 8.0, PHP 8.3을 설치하므로 시스템의 기존 웹 설정을 덮어쓸 수 있습니다". 이미 80번 포트에서 응답 중인 서버라면 스크립트가 해당 포트를 점유하고 Apache 설정을 재작성합니다. 이러한 환경에서는 컨테이너를 사용하거나 Ubuntu 24.04의 기존 LAMP 스택 위에 BookStack을 직접 설치하십시오.

컨테이너 방식은 BookStack 문서에서 권장하는 LinuxServer.io 이미지를 사용합니다. BookStack은 세션 암호화 키가 필요하며, 키가 없으면 페이지를 제공하지 않으므로 먼저 생성해야 합니다.

docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey

출력된 값을 APP_KEY에 복사한 뒤 서비스를 작성하십시오:

services:
  bookstack:
    image: lscr.io/linuxserver/bookstack:latest
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - APP_URL=https://wiki.example.com
      - APP_KEY=paste_the_generated_key_here
      - DB_HOST=bookstack_db
      - DB_PORT=3306
      - DB_USERNAME=bookstack
      - DB_PASSWORD=change_me
      - DB_DATABASE=bookstackapp
    volumes:
      - ./config:/config
    ports:
      - 6875:80
    restart: unless-stopped

APP_URL는 사용자가 실제로 입력하는 주소와 일치해야 하며, 스킴(scheme)과 포트 번호를 포함합니다. 이를 http://localhost으로 설정하지 않고 HTTPS로 사이트를 제공하면, 생성된 링크와 리다이렉트가 잘못된 호스트를 가리키게 되어 사용자는 로그인 페이지가 무한 반복되는 현상을 겪게 됩니다. compose 파일이 생소하다면 이 작업을 시작하기 전에 VPS에서의 Docker Compose 기초를 먼저 확인하십시오.

서비스를 실행하고 컨테이너가 동작 중일 뿐만 아니라 애플리케이션이 정상적으로 응답하는지 확인하십시오:

docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login

200 OK은 PHP 애플리케이션이 부팅되어 데이터베이스에 연결되었음을 의미합니다. 500는 거의 항상 APP_KEY이 비어 있거나 데이터베이스 자격 증명이 일치하지 않음을 의미하며, docker compose logs bookstack를 실행하면 두 가지 원인 중 무엇인지 확인할 수 있습니다.

Wiki.js: 하나의 트리, 여러 편집자

Wiki.js는 Node.js 애플리케이션입니다. 공식 Docker 설정 문서에서는 PostgreSQL을 함께 사용할 것을 권장하지만, MySQL, MariaDB, MSSQL, SQLite도 지원합니다. 다음은 프로젝트 공식 Docker 페이지에서 제공하는 compose 파일입니다.

services:
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: wiki
      POSTGRES_PASSWORD: wikijsrocks
      POSTGRES_USER: wikijs
    logging:
      driver: none
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/postgresql/data
  wiki:
    image: ghcr.io/requarks/wiki:2
    depends_on:
      - db
    init: true
    environment:
      DB_TYPE: postgres
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: wikijs
      DB_PASS: wikijsrocks
      DB_NAME: wiki
    restart: unless-stopped
    ports:
      - "80:3000"
volumes:
  db-data:

실행하기 전에 POSTGRES_PASSWORDDB_PASS을 함께 변경하십시오. 이들은 하나의 자격 증명 세트이며 예시 값은 공개되어 있기 때문입니다. 태그는 의도적으로 ghcr.io/requarks/wiki:2에 고정되어 있습니다. 메이저 버전이 올라가면 실행 중인 인스턴스의 데이터베이스 스키마가 변경되므로, 문서에서는 latest 사용을 권장하지 않습니다.

운영 환경에서는 버전 2를 사용해야 합니다. 2026년 7월 기준으로 최신 버전 2 릴리스는 2026년 5월에 배포된 2.5.314입니다. 버전 3도 존재하지만, 해당 문서에는 "이 사이트는 Wiki.js 3.0의 불안정한 베타 릴리스를 위한 것입니다. 프로덕션 환경에 설치하지 마십시오."라고 명시되어 있습니다. :3 태그는 미리보기 용도로만 취급하십시오.

처음 로드하면 Wiki.js는 브라우저 내 설정 마법사를 통해 관리자 계정을 생성하도록 안내합니다. 설정을 완료하기 전까지는 해당 포트에 접속하는 누구나 이 마법사를 볼 수 있으므로, 방화벽을 열기 전에 반드시 리버스 프록시와 TLS(전송 계층 보안) 뒤에 서비스를 배치하십시오. 서버에서 여러 서비스를 호스팅하는 경우, 위키를 전용 호스트 이름으로 설정하고 여러 Docker 앱 앞단의 Traefik 뒤에 배치하는 것이 자연스럽습니다.

편집기를 선택할 수 있다는 점이 사람들이 Wiki.js를 선택하는 이유입니다. 하나의 인스턴스에서 Markdown 페이지, 시각적 편집기 페이지, 원시 HTML 페이지, AsciiDoc 페이지를 나란히 관리할 수 있습니다. 이는 변환하고 싶지 않은 형식의 기존 콘텐츠를 가져올 때 유용합니다. 다만, 한 위키 안에 네 가지 스타일이 혼재될 수 있으므로 첫날에 기본 편집기를 결정하고 해당 결정 사항을 기록해 두십시오.

개요: 최고의 편집기, 가장 무거운 필수 요구 사항

Outline은 사용자들이 상용 노트 도구와 같은 느낌을 원할 때 흔히 언급하는 애플리케이션입니다. 이 소프트웨어는 Node.js 기반이며, 2026년 7월 기준 최신 릴리스는 1.9.2입니다. 샘플 환경 파일에는 필요한 구성 요소가 나열되어 있습니다. DATABASE_URL을 통한 PostgreSQL, REDIS_URL을 통한 Redis, 두 개의 임의 보안 키, 그리고 외부에서 접근 가능한 URL가 필요합니다.

openssl rand -hex 32
openssl rand -hex 32

이 명령을 두 번 실행하여 두 값을 모두 보관하십시오. 첫 번째 값은 SECRET_KEY이 되고, 두 번째 값은 UTILS_SECRET가 됩니다. 환경 파일의 핵심 구성은 다음과 같습니다.

NODE_ENV=production
URL=https://docs.example.com
PORT=3000
SECRET_KEY=<first openssl value>
UTILS_SECRET=<second openssl value>
DATABASE_URL=postgres://outline:change_me@postgres:5432/outline
PGSSLMODE=disable
REDIS_URL=redis://redis:6379
FILE_STORAGE=local
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data

PGSSLMODE=disable는 데이터베이스가 같은 머신이나 동일한 Docker 네트워크에 있을 때만 올바르게 작동합니다. 네트워크를 통해 데이터베이스에 연결하는 경우에는 이 설정을 제외하십시오. 그렇지 않으면 연결이 암호화되지 않은 상태로 전송됩니다. 이제 첨부 파일 저장 시 객체 스토리지를 강제로 사용할 필요가 없습니다. FILE_STORAGE=local은 업로드 파일을 상위 디렉터리에 저장하며, 이 디렉터리는 컨테이너가 쓰기 권한을 가진 볼륨이어야 하고 백업 대상에 포함되어야 합니다. 파일을 S3 호환 버킷에 저장하려면 AWS_* 값을 사용하여 FILE_STORAGE=s3을 설정하십시오.

이제 많은 사용자가 당황하는 부분입니다. Outline은 자체적인 사용자 이름과 비밀번호 로그인 기능을 제공하지 않습니다. 샘플 설정 파일에는 타사 로그인 자격 증명이 필수라고 명시되어 있습니다. "설치를 완료하고 로그인 옵션을 사용하려면 이 중 최소 하나가 필요합니다." 지원되는 제공업체로는 Google, Slack, Microsoft Entra, Discord가 있으며, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URIOIDC_USERINFO_URI을 통해 일반적인 OpenID Connect(OIDC) 서버를 연동할 수 있습니다.

따라서 Outline을 운영하는 실제 비용은 Outline, PostgreSQL, Redis, 그리고 ID 제공업체를 모두 합친 것입니다. 팀에서 이미 Google Workspace나 Microsoft Entra를 사용 중이라면 마지막 구성 요소를 설정하는 데 10분이면 충분하며, Outline은 매우 매력적인 선택지가 됩니다. 그렇지 않다면 Keycloak이나 Authentik과 같은 서비스를 직접 호스팅해야 하며, 이는 패치와 백업이 필요한 두 번째 서비스가 됩니다. 메모리 예산을 적절히 책정하십시오. Outline의 자체 가이드에 따르면 웹 프로세스당 약 512 MB의 메모리가 필요하며, 이는 WEB_CONCURRENCY로 설정됩니다. 여기에 데이터베이스와 Redis가 사용하는 메모리를 추가로 고려해야 합니다.

각 서비스의 읽기 권한 관리 방식

BookStack은 기본적으로 로컬 이메일 및 비밀번호 계정을 제공하며, 대안으로 LDAP, SAML2, OIDC를 지원합니다. 권한은 역할별로 설정하며, 특정 셸프(shelf), 북(book), 챕터(chapter) 또는 페이지(page) 단위로 재정의할 수 있습니다. 계층 구조가 고정되어 있어 권한은 예측 가능한 방식으로 하위 항목에 상속됩니다.

Wiki.js 역시 로컬 계정을 기본으로 제공하며, 관리자 영역에서 활성화할 수 있는 다양한 인증 전략을 추가로 지원합니다. 페이지 규칙은 경로 패턴에 따라 접근을 허용하거나 거부합니다. 이 방식은 강력하지만 설정 오류가 발생하기 쉽습니다. 예를 들어 ops/* 경로에 대해 작성한 규칙은 나중에 해당 경로 아래에 생성하는 모든 페이지에 자동으로 적용되기 때문입니다.

Outline은 권한 관리 책임을 전적으로 외부로 위임합니다. 멤버십은 ID 공급자(identity provider)를 따르며, Outline 내부에서는 컬렉션(collection)과 그룹(group) 단위로 접근을 제어합니다. 직원이 퇴사할 때 로컬 계정이 남지 않으므로, 이미 계정 프로비저닝을 관리하고 있는 ID 공급자를 사용하는 경우 큰 이점이 있습니다.

각 서비스의 검색 작동 방식

위키에서 검색 기능은 서비스의 가치를 결정짓거나, 잊힌 파일들이 쌓인 폴더로 전락하게 만드는 핵심 요소입니다.

BookStack은 데이터베이스를 검색하며, 사용자가 1분 안에 익힐 수 있는 쿼리 언어를 제공합니다. "london meeting"과 같이 문구를 따옴표로 묶으면 해당 정확한 문자열을 검색합니다. 대괄호는 태그 검색에 사용됩니다. [location=london]은 태그 이름, 값 또는 둘 다를 기준으로 일치 항목을 찾으며, !=, >=, like을 포함한 비교 연산자를 지원합니다. 중괄호는 {created_after:2016-12-30}과 같이 메타데이터를 필터링합니다. 정확한 일치, 태그, 필터 용어 앞에 -를 붙이면 해당 조건을 부정(negation)할 수 있습니다. BookStack은 한 쿼리에 포함할 수 있는 각 유형의 용어 개수를 제한하므로, 너무 긴 쿼리는 실행되지 않고 잘립니다.

Wiki.js는 검색을 플러그인 가능한 모듈로 처리합니다. 공식적으로 지원하는 엔진은 기본 데이터베이스 엔진, PostgreSQL 엔진, Elasticsearch, Algolia, AWS CloudSearch, Azure Search입니다. 기본 엔진은 수백 페이지 규모의 위키에 적합합니다. PostgreSQL을 사용 중이라면 관리자 영역에서 PostgreSQL 엔진으로 전환하십시오. 단순 일치 방식 대신 데이터베이스 자체의 전문 검색(full text) 인덱스를 사용하기 때문입니다. Elasticsearch는 별도의 검색 서비스를 운영하고 패치하는 수고를 감수할 만큼 위키 규모가 클 때만 고려하십시오.

Outline은 PostgreSQL의 전문 검색 인덱스를 기반으로 검색합니다. 선택할 엔진이나 조정할 설정이 없으며, 업로드된 문서 내부의 텍스트까지 검색합니다. 수천 건 미만의 문서를 다루는 팀 위키라면 이 세 가지 서비스 중 가장 관리가 간편합니다. 다만, 검색 속도가 느려질 경우 사용자가 직접 최적화할 수 있는 수단은 없습니다.

어떤 도구가 적합한가

오늘 오후 당장 위키를 운영해야 하고, 구조보다는 콘텐츠 자체에 집중하고 싶다면 BookStack을 선택하십시오. 이 도구는 구성 요소가 가장 적어 PHP 애플리케이션 하나와 MySQL 데이터베이스 하나만 있으면 됩니다. 내부 운영 매뉴얼이나 고객용 문서화에 적합하며, 작성자 대부분이 엔지니어가 아닌 팀에 알맞습니다. 또한 전체 상태가 데이터베이스 덤프 하나와 업로드 디렉터리로 구성되므로 세 가지 도구 중 백업이 가장 쉽습니다.

특정 편집기나 다른 도구에서 제공하지 않는 인증 방식이 필요하거나, 기존의 방대한 Markdown 또는 AsciiDoc 문서를 가져오면서 경로 구조를 유지해야 한다면 Wiki.js를 선택하십시오. 더 무거운 스택을 운영해야 한다는 점을 감수하고, 메이저 버전 태그를 고정하여 사용하십시오.

글쓰기의 품질이 가장 중요하고, 위키가 대중이 아닌 팀 내부용이며, 이미 사용 중인 ID 공급자(identity provider)가 있다면 Outline을 선택하십시오. 사용자가 실제로 즐겨 사용하는 편집기를 제공하여 그만한 가치를 보상합니다. 다만, 처음으로 시도하는 자체 호스팅 애플리케이션으로는 권장하지 않습니다.

위 세 가지 중 적합한 것이 없다면, 콘텐츠 유형이 맞지 않을 가능성이 큽니다. 스캔한 송장이나 계약서는 위키가 아니라 Paperless-ngx와 같은 문서 관리 시스템에 저장해야 합니다. 이를 억지로 위키에 넣으려 하면 많은 위키가 결국 방치되는 결과를 낳습니다. 또 다른 흔한 불일치는 위키가 아니라 문서, 표, 화이트보드를 하나의 캔버스에서 다루는 작업 공간을 원하는 경우입니다. 이럴 때는 위 세 가지 도구보다 자체 호스팅 AFFiNE 작업 공간이 더 적합합니다. 서버에 올릴 만한 다른 도구들에 대한 더 넓은 시야를 원한다면 2026년 자체 호스팅 추천 목록을 확인하십시오.

사이징 및 백업

세 가지 서비스 모두 소형 VPS에서 구동할 수 있지만, 각 서비스의 백엔드 구성에 따라 실제 필요한 최소 사양은 달라집니다. BookStack은 애플리케이션 프로세스 하나와 MySQL로 구성됩니다. Wiki.js는 Node 프로세스와 PostgreSQL을 사용합니다. Outline은 Node 프로세스, PostgreSQL, Redis를 사용하며, 보통 별도의 ID 공급자(identity provider)를 함께 운영해야 하므로 더 많은 메모리를 할당해야 합니다.

데이터베이스와 업로드 파일을 함께 백업하고, 백업을 실제로 사용하기 전에 반드시 테스트용 인스턴스에 복원해 보아야 합니다. 복원해 보지 않은 위키 백업은 그저 추측일 뿐입니다. BookStack의 경우 mysqldump/config 볼륨을 백업해야 합니다. Wiki.js와 Outline은 pg_dump와 데이터 볼륨을 백업해야 하며, Outline의 경우 FILE_STORAGE_LOCAL_ROOT_DIR에 있는 데이터도 함께 백업해야 합니다.

FAQ

가장 설치하기 쉬운 셀프 호스팅 위키는 무엇입니까?

BookStack입니다. MySQL 데이터베이스를 사용하는 단일 PHP 애플리케이션이며, 프로젝트에서 Ubuntu 24.04용 설치 스크립트를 제공하여 Apache, MySQL 8.0, PHP 8.3을 한 번에 설정할 수 있습니다. 컨테이너 이미지는 APP_KEY과 데이터베이스 자격 증명만 있으면 됩니다. Wiki.js는 Node 런타임과 PostgreSQL 서버가 추가로 필요하며, Outline은 여기에 Redis와 외부 ID 공급자까지 추가로 요구합니다.

Google이나 다른 SSO 공급자 없이 Outline을 사용할 수 있습니까?

아니요. Outline은 로컬 사용자 이름과 비밀번호 로그인을 지원하지 않습니다. 샘플 설정에 따르면 최소 하나의 타사 로그인 공급자가 필요하며, 그렇지 않으면 로그인 옵션이 전혀 제공되지 않습니다. Google, Slack, Microsoft Entra, Discord 또는 셀프 호스팅된 Keycloak이나 Authentik과 같은 일반적인 OpenID Connect 서버를 사용할 수 있습니다. 해당 공급자를 운영하는 것은 Outline 운영 비용의 일부입니다.

Wiki.js 3과 Wiki.js 2 중 무엇을 설치해야 합니까?

버전 2를 설치하십시오. 2026년 7월 기준으로 최신 버전 2 릴리스는 2026년 5월에 나온 2.5.314이며, 버전 3 문서에는 프로덕션 환경에 설치해서는 안 되는 불안정한 베타 버전이라고 명시되어 있습니다. 메이저 버전 변경 시 실행 중인 인스턴스의 데이터베이스 스키마가 변경되므로, 이미지를 latest가 아닌 ghcr.io/requarks/wiki:2로 고정하십시오.

검색 기능이 가장 뛰어난 것은 무엇입니까?

각기 다른 강점이 있습니다. BookStack은 정확한 구문, [location=london]과 같은 태그 필터, {created_after:2016-12-30}과 같은 메타데이터 필터를 포함한 쿼리 언어를 제공하며, 앞에 -를 붙여 해당 용어를 부정할 수도 있습니다. Outline은 별도의 설정이 필요 없으며 업로드된 파일 내부의 텍스트까지 검색합니다. Wiki.js는 엔진을 직접 선택할 수 있어 가장 조정 가능성이 높으며, 위키 규모가 수백 페이지를 넘어서면 PostgreSQL 엔진으로 전환하는 것이 좋습니다.

나중에 콘텐츠를 다른 서비스로 옮길 수 있습니까?

부분적으로 가능하지만 수동 작업이 필요합니다. 세 서비스 모두 Markdown 내보내기와 가져오기를 지원하므로 페이지 텍스트는 대체로 유지됩니다. 하지만 구조는 깔끔하게 유지되지 않습니다. BookStack의 책과 챕터는 Outline의 중첩 문서 구조와 대응되지 않으며, Wiki.js의 경로는 BookStack의 고정된 계층 구조와 매핑되지 않습니다. 첨부 파일, 권한, 페이지 기록은 유실될 가능성이 가장 높은 부분이므로, 마이그레이션을 결정하기 전에 샘플을 내보내 확인하십시오.

#bookstack#wikijs#outline#wiki#self-hosting#knowledge-base