Trilium Notes – 개인 지식 베이스를 위한 계층형 노트 앱 Docker 설치 가이드




개요

Trilium Notes(현재 TriliumNext)는 대규모 개인 지식 베이스 구축에 최적화된 오픈소스 계층형 노트 앱입니다. 무한한 깊이의 노트 트리, 노트 복제(Cloning), 관계 맵, 스크립팅 등 강력한 기능을 제공하며, 데스크톱 앱과 서버 버전 간 동기화를 지원합니다. Notion의 무거움이나 Obsidian의 로컬 제한이 불편했다면, Trilium이 완벽한 대안이 될 수 있습니다.

공식 사이트: https://triliumnotes.org
GitHub (TriliumNext): https://github.com/TriliumNext/Trilium
GitHub Stars: 33,000+
라이선스: AGPL-3.0


Trilium Notes란?

Trilium은 “두 번째 뇌(Second Brain)”를 구축하기 위한 노트 앱입니다. 단순한 노트 작성을 넘어, 노트 간의 관계를 정의하고, 속성을 부여하고, 스크립트로 자동화하여 진정한 지식 관리 시스템을 만들 수 있습니다.

TriliumNext란?

원래 개발자(zadam)가 유지보수 모드로 전환한 후, 커뮤니티가 TriliumNext 프로젝트를 이어받아 활발하게 개발 중입니다. 기존 Trilium 데이터베이스와 완벽하게 호환됩니다.

핵심 개념

  • 계층형 트리: 노트를 무한한 깊이로 구조화
  • 클로닝(Cloning): 하나의 노트를 여러 위치에 동시 배치
  • 속성(Attributes): 노트에 메타데이터 부여
  • 관계(Relations): 노트 간 연결 정의
  • 스크립팅: JavaScript로 Trilium 확장

주요 특징

1. 계층형 노트 구조

  • 무한한 깊이의 트리 구조
  • 드래그 앤 드롭으로 정리
  • 노트 내 하위 노트 포함
  • 빠른 검색 및 네비게이션

2. 노트 클로닝 (Cloning)

Trilium의 핵심 기능 중 하나입니다. 하나의 노트를 여러 위치에 복제 없이 배치할 수 있습니다.

예시: "Python 학습" 노트가 다음 위치에 동시 존재
├── 프로그래밍/
│   └── Python 학습  (클론)
├── 2024년 목표/
│   └── Python 학습  (클론)
└── 이번 주 할 일/
    └── Python 학습  (원본)

어디서 수정하든 모든 위치에 반영됩니다.

3. 다양한 노트 유형

유형설명
Text리치 텍스트 (WYSIWYG)
Code코드 블록 (구문 강조)
RenderHTML 렌더링
Book하위 노트 목차
CanvasExcalidraw 기반 드로잉
Mermaid다이어그램
Relation Map노트 관계 시각화
Mind Map마인드맵
Web View웹페이지 삽입
File파일 첨부

4. 속성 시스템 (Attributes)

노트에 라벨(Label)과 관계(Relation)를 부여:

#projectStatus=active     // 라벨
#priority=high
~relatedTo=노트ID        // 관계
~parentProject=노트ID

5. 강력한 검색

# 라벨로 검색
#projectStatus=active

# 날짜 범위
note.dateCreated >= 2024-01-01

# 내용 검색 + 라벨 조합
"Python" AND #type=tutorial

6. 스크립팅 & API

JavaScript로 Trilium을 확장:

// 새 노트 생성
api.createNote(parentNoteId, 'New Note', 'content');

// 속성 추가
api.setAttribute('label', 'myLabel', 'value');

// 매일 자동 실행 스크립트
api.runOnBackend(() => {
    // 자동화 로직
});

7. 동기화

  • 데스크톱 앱 ↔ 서버 동기화
  • 여러 기기에서 동일한 지식 베이스 접근
  • 충돌 해결 메커니즘

8. 보안

  • 선택적 노트 암호화 (AES-128)
  • 비밀번호 보호
  • TOTP 2단계 인증

9. 기타 기능

  • Web Clipper: 브라우저 확장으로 웹 페이지 스크랩
  • 내보내기: Markdown, HTML, OPML
  • 가져오기: Evernote(ENEX), Markdown
  • 리비전 히스토리: 버전 관리
  • Zen 모드: 집중 모드

유사 도구 비교

항목TriliumObsidianNotionLogseq
구조계층형 트리폴더 + 링크페이지/DB아웃라이너
클로닝✅ 강력
스크립팅✅ JavaScript플러그인제한적
셀프 호스팅❌ (로컬)
동기화자체 서버유료/플러그인클라우드Git
성능⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
학습 곡선높음중간낮음중간
오프라인제한적
모바일웹/서드파티

언제 Trilium을 선택할까?

Trilium이 적합한 경우:

  • 대규모 지식 베이스를 체계적으로 관리하고 싶을 때
  • 노트 간 복잡한 관계를 정의해야 할 때
  • 스크립팅으로 자동화/커스터마이징이 필요할 때
  • 로컬 성능이 중요할 때 (Notion 느림에 지친 경우)
  • 완전한 데이터 소유권을 원할 때

다른 도구가 적합한 경우:

  • 모바일 우선 → Notion, Obsidian
  • 간단한 노트 → Apple Notes, Google Keep
  • 아웃라이너 스타일 → Logseq, Workflowy
  • 팀 협업 중심 → Notion, Outline

Docker Compose 설치

사전 요구사항

  • Docker 및 Docker Compose 설치
  • 최소 512MB RAM (권장 1GB+)
  • 저장 공간 500MB+ (데이터베이스 제외)

Trilium은 SQLite를 내장하므로 별도 데이터베이스가 필요 없습니다.

기본 설치

1. 디렉토리 생성

mkdir -p ~/docker/trilium
cd ~/docker/trilium

2. docker-compose.yml 작성

services:
  trilium:
    image: triliumnext/notes:latest
    container_name: trilium
    environment:
      - TRILIUM_DATA_DIR=/home/node/trilium-data
    volumes:
      - ./trilium-data:/home/node/trilium-data
    ports:
      - "8080:8080"
    restart: unless-stopped

3. 컨테이너 실행

docker compose up -d

4. 초기 설정

  1. 브라우저에서 http://서버IP:8080 접속
  2. “I’m a new user” 선택
  3. 비밀번호 설정
  4. 시작!

리버스 프록시 연동 (Traefik)

services:
  trilium:
    image: triliumnext/notes:latest
    container_name: trilium
    environment:
      - TRILIUM_DATA_DIR=/home/node/trilium-data
    volumes:
      - ./trilium-data:/home/node/trilium-data
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.trilium.rule=Host(`notes.example.com`)"
      - "traefik.http.routers.trilium.entrypoints=websecure"
      - "traefik.http.routers.trilium.tls.certresolver=letsencrypt"
      - "traefik.http.services.trilium.loadbalancer.server.port=8080"
    networks:
      - traefik-network

networks:
  traefik-network:
    external: true

Nginx 리버스 프록시 설정

server {
    listen 80;
    server_name notes.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name notes.example.com;

    ssl_certificate /etc/letsencrypt/live/notes.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/notes.example.com/privkey.pem;

    client_max_body_size 100M;  # 대용량 파일 업로드

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

데스크톱 앱과 동기화 설정

Trilium 서버와 데스크톱 앱을 동기화하려면:

  1. 서버 설정
    • 서버에서 Options → Sync → “Setup sync” 클릭
    • Sync Server URL 확인 (예: https://notes.example.com)
  2. 데스크톱 앱 설정
    • 데스크톱 Trilium 설치 (https://github.com/TriliumNext/Trilium/releases)
    • 처음 실행 시 “I have a server instance already, and I want to set up sync with it” 선택
    • 서버 URL과 비밀번호 입력
  3. 동기화 확인
    • 양쪽에서 “Sync” 상태 확인
    • 새 노트 생성 후 동기화 테스트

환경 변수

변수설명기본값
TRILIUM_DATA_DIR데이터 저장 경로/home/node/trilium-data
TRILIUM_PORT서버 포트8080
TRILIUM_ENV환경 설정prod

활용 팁

1. 프로젝트 관리 구조

📁 Projects
├── 📁 Active
│   ├── 📝 Project A
│   │   ├── 📝 Requirements
│   │   ├── 📝 Meeting Notes
│   │   └── 📝 Tasks
│   └── 📝 Project B
├── 📁 Completed
└── 📁 Templates
    └── 📝 Project Template

2. 속성 활용

노트에 메타데이터 추가:

#status=in-progress
#priority=high
#dueDate=2024-02-15
#assignee=John

검색으로 필터링:

#status=in-progress #priority=high

3. 일일 노트 자동 생성

스크립트로 매일 일일 노트 자동 생성:

// dayTemplate 관계가 있는 템플릿 사용
const today = new Date();
const dateStr = today.toISOString().split('T')[0];
const title = `📅 ${dateStr}`;

// 이미 있는지 확인
if (!api.searchNotes(`note.title = "${title}"`).length) {
    api.createNote(parentNoteId, title, '');
}

4. Web Clipper 활용

  1. 브라우저 확장 설치 (Chrome/Firefox)
  2. Trilium 서버 URL 설정
  3. 웹페이지에서 클릭 → Trilium으로 저장

5. 관계 맵 (Relation Map)

노트 간 관계를 시각적으로 표현:

  1. 새 노트 → 유형: “Relation Map”
  2. 노트 드래그하여 맵에 추가
  3. 관계 선으로 연결

6. 코드 노트

프로그래밍 코드 저장 및 실행:

// 노트 유형: Code, 언어: JavaScript
const result = 2 + 2;
api.showMessage(`Result: ${result}`);

7. 키보드 단축키

단축키기능
Ctrl+K빠른 점프 (노트 검색)
Ctrl+.노트 트리 스크롤
Ctrl+J새 노트
Ctrl+O최근 노트
Alt+A속성 패널
F1도움말
Alt+MZen 모드

백업 및 복원

자동 백업 설정

Trilium은 자동 백업 기능을 내장:

  1. Options → Other → “Daily backup”
  2. 백업 위치: trilium-data/backup/

수동 백업

# 데이터 디렉토리 전체 백업
tar -czvf trilium_backup_$(date +%Y%m%d).tar.gz ./trilium-data

# 데이터베이스만 백업
cp ./trilium-data/document.db ./backup/document_$(date +%Y%m%d).db

복원

# 컨테이너 중지
docker compose down

# 백업에서 복원
tar -xzvf trilium_backup_20240101.tar.gz

# 컨테이너 재시작
docker compose up -d

트러블슈팅

1. 동기화 실패

# 서버 로그 확인
docker logs trilium

# 네트워크 연결 확인
curl -I https://notes.example.com

# 데스크톱 앱에서 강제 동기화
Options → Sync → "Force full sync"

2. 데이터베이스 손상

# Trilium 내장 복구 도구
docker exec -it trilium /home/node/trilium/src/tools/repair-document.js

# 또는 백업에서 복원
cp backup/document_backup.db trilium-data/document.db

3. 메모리 부족

대규모 지식 베이스의 경우:

services:
  trilium:
    # ...
    deploy:
      resources:
        limits:
          memory: 2G

4. 업그레이드 후 문제

# 이전 버전으로 롤백
docker compose down
docker pull triliumnext/notes:v0.90.4  # 특정 버전
docker compose up -d

Obsidian에서 마이그레이션

Obsidian 사용자를 위한 팁:

  1. Markdown 가져오기
    • Trilium → Import → Markdown 선택
    • Obsidian vault 폴더 지정
  2. 링크 변환
    • [[링크]] 스타일은 수동 변환 필요
    • 스크립트로 일괄 변환 가능
  3. 차이점 적응
    • Obsidian: 파일 기반 → Trilium: 데이터베이스
    • Obsidian: 양방향 링크 → Trilium: 관계 + 클로닝

마무리

Trilium Notes는 “진지한 지식 관리자”를 위한 도구입니다. 처음에는 학습 곡선이 있지만, 익숙해지면 다른 어떤 노트 앱보다 강력한 개인 지식 베이스를 구축할 수 있습니다.

추천 대상

  • 대규모 지식 베이스를 체계적으로 관리하고 싶은 분
  • Notion의 느린 속도에 지친 분
  • 스크립팅으로 워크플로우를 자동화하고 싶은 개발자
  • 완전한 데이터 소유권을 원하는 분
  • “두 번째 뇌”를 구축하고 싶은 분

Trilium의 철학

“Build your personal knowledge base”

지식은 연결될 때 가치가 커집니다. Trilium은 그 연결을 만드는 최고의 도구입니다.


참고 자료




댓글 남기기