도움말 173개와 제목 181개 한글화 및 운영 반영 기록

This commit is contained in:
Codex
2026-09-13 17:01:02 +09:00
parent 618e6ab213
commit 77c2892aba
578 changed files with 15816 additions and 30 deletions
@@ -0,0 +1,190 @@
import fs from 'node:fs';
const input='work/trilium/scoped/doc_notes/en/User Guide/!!!meta.json';
const meta=JSON.parse(fs.readFileSync(input,'utf8'));
const titles=`설치와 설정
데스크톱 설치
서버 설치
1. 서버 설치
Linux 패키지 설치
Docker로 설치
NixOS에 설치
직접 설치
Kubernetes로 설치
여러 서버 인스턴스
2. 리버스 프록시
Nginx 설정
Apache 설정
TLS 설정
인증
다중 인증
동기화
모바일 화면
웹 클리퍼
TriliumNext 업데이트
백업
데이터 폴더
기본 개념과 기능
화면 구성 요소
세로 배치와 가로 배치
전체 메뉴
노트 트리
노트 트리 메뉴
여러 노트 선택
상단 리본
탭
실행 도구 모음
노트 버튼
설정
분할 보기
떠 있는 버튼
오른쪽 사이드바
최근 변경 사항
화면 확대와 축소
노트
노트 아이콘
첨부 파일
노트 복제
가지 접두사
보호된 노트
보관된 노트
노트 수정 이력
노트 정렬
PDF로 내보내기
읽기 전용 노트
노트 목록
달력 보기
노트 탐색
트리의 개념
노트 이동
빠른 검색
노트로 이동
검색
북마크
노트 확대 보기
작업 공간
비슷한 노트
노트 안에서 찾기
키보드 단축키
테마
테마 모음
가져오기와 내보내기
Markdown
Evernote
OneNote
집중 모드
빠른 시작
자주 묻는 질문
노트 유형
텍스트
인용문과 안내 상자
북마크
본문 언어와 오른쪽에서 왼쪽으로 쓰기
하위 노트로 잘라내기
개발자용 서식
코드 블록
각주
서식 도구 모음
일반 서식
강조 표시 목록
이미지
이미지 참조
노트 포함
삽입 메뉴
편집 단축키
링크
목록
Markdown식 자동 서식
수식
기타 기능
목차
표
코드
저장된 검색
관계도
노트 지도
렌더링 노트
책
Mermaid 도표
ELK 배치
캔버스
웹 보기
마인드맵
지리 지도
파일
문제 해결
문제 제보
익명화한 데이터베이스
오류 로그
504 오류로 동기화가 실패할 때
앱 새로고침
테마 개발
사용자 테마 만들기
Next 테마 수정
테마 개발 참고 자료
앱 전체 사용자 CSS
고급 사용법
속성
라벨
관계
속성 상속
주요 속성
템플릿
노트 지도와 연결 지도 및 트리 지도
공개 공유
노트 원문 제공
고급 활용 예제
일일 노트
체중 기록
할 일 관리자
사용자 요청 처리기
사용자 리소스 제공자
ETAPI와 REST API
API 참고 자료
기본 노트 제목
데이터베이스
데이터베이스 직접 수정
SQL 콘솔
기본 예제 노트
설정 파일과 환경 변수
Trilium 인스턴스
교차 출처 리소스 공유와 CORS
일괄 작업
노트 소스
사용 기술
CKEditor
MindElixir
Excalidraw
Leaflet
노트 ID
내부 API
API 참고 자료
숨겨진 노트
운영 지표
Grafana 대시보드 예제 (grafana-dashboard.json)
AI
AI 기능 소개
AI 제공자 안내
Ollama
Ollama 설치
OpenAI
Anthropic
스크립트
프런트엔드 기초
예제
새 할 일 실행 버튼
Google 설문지 응답 내려받기
주요 속성으로 스크립트 설정
이벤트
사용자 위젯
단어 수 위젯
위젯 기초
스크립트 API
프런트엔드 API
프런트엔드 노트 객체 (FNote)
백엔드 API`.split('\n');
const changes=[];let i=0;
function walk(xs){for(const n of xs){const title=titles[i++];if(!title)throw Error('제목 부족');changes.push({noteId:n.id,oldTitle:n.title,title});n.title=title;if(n.children)walk(n.children);}}
walk(meta);if(i!==titles.length)throw Error(`제목 개수 불일치 ${i}/${titles.length}`);
fs.writeFileSync('work/trilium/release/doc_notes/en/User Guide/!!!meta.json',JSON.stringify(meta));
fs.writeFileSync('work/trilium/release/doc-title-changes.json',JSON.stringify(changes,null,2)+'\n');
console.log({translatedTitles:i});
+24 -1
View File
@@ -9,7 +9,30 @@ import six from './docs-ko-006.mjs';
import seven from './docs-ko-007.mjs';
import eight from './docs-ko-008.mjs';
import nine from './docs-ko-009.mjs';
const translations={...one,...two,...three,...four,...five,...six,...seven,...eight,...nine};
import ten from './docs-ko-010.mjs';
import eleven from './docs-ko-011.mjs';
import twelve from './docs-ko-012.mjs';
import thirteen from './docs-ko-013.mjs';
import fourteen from './docs-ko-014.mjs';
import fifteen from './docs-ko-015.mjs';
import sixteen from './docs-ko-016.mjs';
import seventeen from './docs-ko-017.mjs';
import eighteen from './docs-ko-018.mjs';
import nineteen from './docs-ko-019.mjs';
import twenty from './docs-ko-020.mjs';
import twentyone from './docs-ko-021.mjs';
import twentytwo from './docs-ko-022.mjs';
import twentythree from './docs-ko-023.mjs';
import twentyfour from './docs-ko-024.mjs';
import twentyfive from './docs-ko-025.mjs';
import twentysix from './docs-ko-026.mjs';
import twentyseven from './docs-ko-027.mjs';
import twentyeight from './docs-ko-028.mjs';
import twentynine from './docs-ko-029.mjs';
import thirty from './docs-ko-030.mjs';
import thirtyone from './docs-ko-031.mjs';
import thirtytwo from './docs-ko-032.mjs';
const translations={...one,...two,...three,...four,...five,...six,...seven,...eight,...nine,...ten,...eleven,...twelve,...thirteen,...fourteen,...fifteen,...sixteen,...seventeen,...eighteen,...nineteen,...twenty,...twentyone,...twentytwo,...twentythree,...twentyfour,...twentyfive,...twentysix,...twentyseven,...twentyeight,...twentynine,...thirty,...thirtyone,...thirtytwo};
const order=JSON.parse(fs.readFileSync('work/trilium/docs-order.json','utf8'));
const base='work/trilium/scoped/doc_notes/en',out='work/trilium/release/doc_notes/en';
const errors=[];
@@ -0,0 +1,26 @@
import fs from 'node:fs';
import crypto from 'node:crypto';
const base='work/trilium', snapshot=process.env.TRILIUM_PHASE3_INPUT||'work/trilium-gitea/updates/2026-09-05/phase3-input';
const out=base+'/phase3';fs.mkdirSync(out,{recursive:true});
fs.cpSync(base+'/scoped/doc_notes/en',out+'/doc_notes/en',{recursive:true});
fs.cpSync(base+'/release/doc_notes/en',out+'/doc_notes/en',{recursive:true});
let main=fs.readFileSync(snapshot+'/main.cjs','utf8');
const original=main;
const replace=(from,to)=>{if(main.split(from).length!==2)throw Error('Patch point mismatch: '+from);main=main.replace(from,to);};
replace('jg=`assets/v${CR.version}-ko-20260905-r2`','jg=`assets/v${CR.version}-ko-20260913-r3`');
// Only shipped help titles are refreshed. Other customized hidden note names stay intact.
replace('r.restoreNames&&n.title!==t.title','(r.restoreNames||n.noteId.startsWith("_help_"))&&n.title!==t.title');
const ko={name:'ko',weekdays:['일요일','월요일','화요일','수요일','목요일','금요일','토요일'],weekdaysShort:['일','월','화','수','목','금','토'],weekdaysMin:['일','월','화','수','목','금','토'],months:Array.from({length:12},(_,i)=>(i+1)+'월'),monthsShort:Array.from({length:12},(_,i)=>(i+1)+'월'),formats:{LT:'A h:mm',LTS:'A h:mm:ss',L:'YYYY.MM.DD.',LL:'YYYY년 M월 D일',LLL:'YYYY년 M월 D일 A h:mm',LLLL:'YYYY년 M월 D일 dddd A h:mm'},relativeTime:{future:'%s 후',past:'%s 전',s:'몇 초',m:'1분',mm:'%d분',h:'1시간',hh:'%d시간',d:'하루',dd:'%d일',M:'한 달',MM:'%d개월',y:'일 년',yy:'%d년'}};
replace('ko:()=>Promise.resolve().then(()=>Xe(xvr()))','ko:()=>Promise.resolve().then(()=>({...'+JSON.stringify(ko)+',ordinal:n=>n+"일",meridiem:h=>h<12?"오전":"오후"}))');
for(const [en,kr]of [['SQL Console - ','SQL 콘솔 - '],['Script Launcher','스크립트 실행 도구'],['Note Launcher','노트 실행 도구'],['Widget Launcher','위젯 실행 도구'],['Spacer','간격']]){
const from='title:"'+en+'"';if(main.includes(from))replace(from,'title:"'+kr+'"');
}
fs.writeFileSync(out+'/main.cjs',main);
let calendar=fs.readFileSync(snapshot+'/ko.js','utf8');
for(const [from,to]of [['이전달','이전'],['다음달','다음'],['년도','연도'],['일정목록','일정 목록'],['더보기','더 보기'],['이벤트','일정']])calendar=calendar.replaceAll(from,to);
fs.writeFileSync(out+'/ko.js',calendar);
const hash=s=>crypto.createHash('sha256').update(s).digest('hex');
const manifest={previousMainSha256:hash(original),previousCalendarSha256:hash(fs.readFileSync(snapshot+'/ko.js')),files:{}};
function walk(dir,rel=''){for(const e of fs.readdirSync(dir,{withFileTypes:true})){const name=rel+e.name;if(e.isDirectory())walk(dir+'/'+e.name,name+'/');else manifest.files[name]=hash(fs.readFileSync(dir+'/'+e.name));}}
walk(out);delete manifest.files['manifest.json'];fs.writeFileSync(out+'/manifest.json',JSON.stringify(manifest,null,2));
console.log({packagedFiles:Object.keys(manifest.files).length,helpHtml:173,helpTitles:181});
@@ -0,0 +1,64 @@
import pathlib,subprocess,datetime,shutil,time,urllib.request,urllib.parse,hashlib,json,sqlite3
base=pathlib.Path('/www/dk_project/dk_app/trilium')
release=pathlib.Path('/tmp/trilium-korean-phase3')
manifest=json.loads((release/'manifest.json').read_text())
digest=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
for rel,expected in manifest['files'].items():
assert digest(release/rel)==expected,rel
assert digest(base/'patched/main.cjs')==manifest['previousMainSha256'],'Main changed since inspection'
assert digest(base/'patched/ko.js')==manifest['previousCalendarSha256'],'Calendar changed since inspection'
assert not (base/'data/korean-notes-pending.json').exists()
compose=base/'docker-compose.yml';before=compose.read_text()
anchor=' - ./patched/main.cjs:/usr/src/app/main.cjs:ro'
assert anchor in before
mount=' - ./i18n_ko/doc_notes/en:/usr/src/app/assets/doc_notes/en:ro'
assert mount not in before,'Help mount already exists'
assert not (base/'i18n_ko/doc_notes/en').exists(),'Target already exists'
stamp=datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
backup=base/'backups'/('before-korean-phase3-'+stamp);backup.mkdir(parents=True,mode=0o700)
for rel in ['patched/main.cjs','patched/ko.js','docker-compose.yml']:
dst=backup/rel;dst.parent.mkdir(parents=True,exist_ok=True);shutil.copy2(base/rel,dst)
source=sqlite3.connect('file:'+str(base/'data/document.db')+'?mode=ro',uri=True)
with sqlite3.connect(str(backup/'document.db')) as target:source.backup(target)
source.close()
subprocess.run(['docker','cp','trilium:/usr/src/app/assets/doc_notes/en',str(backup/'original-help-en')],check=True)
shutil.copytree(release/'doc_notes/en',base/'i18n_ko/doc_notes/en')
prefix='http://127.0.0.1:18082/assets/v0.95.0-ko-20260913-r3/'
try:
(base/'patched/main.cjs').write_bytes((release/'main.cjs').read_bytes())
(base/'patched/ko.js').write_bytes((release/'ko.js').read_bytes())
compose.write_text(before.replace(anchor,anchor+'\n'+mount))
subprocess.run(['docker','compose','-f',str(compose),'config','--quiet'],check=True)
subprocess.run(['docker','compose','-f',str(compose),'up','-d','--no-deps','trilium'],check=True)
for attempt in range(40):
try:
with urllib.request.urlopen('http://127.0.0.1:18082/api/health-check',timeout=2) as response:assert response.status==200
break
except Exception:
if attempt==39:raise
time.sleep(1)
checked=0
for rel,expected in manifest['files'].items():
if not rel.startswith('doc_notes/'):continue
with urllib.request.urlopen(prefix+urllib.parse.quote(rel),timeout=5) as response:
assert hashlib.sha256(response.read()).hexdigest()==expected,rel
checked+=1
with urllib.request.urlopen(prefix+'src/ko.js',timeout=5) as response:
assert hashlib.sha256(response.read()).hexdigest()==manifest['files']['ko.js']
meta=json.loads((release/'doc_notes/en/User Guide/!!!meta.json').read_text())
db=sqlite3.connect('file:'+str(base/'data/document.db')+'?mode=ro',uri=True)
titles=[]
def verify(items):
for item in items:
row=db.execute('SELECT title FROM notes WHERE noteId=? AND isDeleted=0',(item['id'],)).fetchone()
assert row and row[0]==item['title'],item['id']
titles.append(item['id']);verify(item.get('children',[]))
verify(meta);db.close()
result={'status':'verified','backup':str(backup),'servedHelpFiles':checked,'helpTitles':len(titles),'assetVersion':'v0.95.0-ko-20260913-r3'}
(base/'i18n_ko/phase3-result.json').write_text(json.dumps(result,indent=2))
print(json.dumps(result))
except Exception:
for rel in ['patched/main.cjs','patched/ko.js','docker-compose.yml']:(base/rel).write_bytes((backup/rel).read_bytes())
subprocess.run(['docker','compose','-f',str(compose),'up','-d','--no-deps','trilium'],check=True)
print('Previous application files restored. Database backup retained at '+str(backup))
raise
@@ -0,0 +1,7 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
103:({a})=>'<h2>편집기 구성</h2>'+p('CKEditor는 '+a(0,'텍스트 노트')+'에서 사용하는 편집기입니다. 편집하는 화면과 결과가 같은 방식으로 표시됩니다. 공식 사이트는 '+a(1,'ckeditor.com')+'입니다.')+p('CKEditor는 상용 제품이지만 핵심 코드는 오픈 소스로 제공됩니다. '+a(2,'공식 기능 안내')+'에 설명된 기능 중 일부를 Trilium에서 사용합니다. 모든 기능이 활성화된 것은 아닙니다.')+'<h2>유료 기능</h2>'+p('일부 기능은 별도의 상용 라이선스가 필요합니다. 원문 작성 당시에는 Trilium에서 이 기능들을 사용할 수 없었으며 '+a(3,'슬래시 명령')+' 같은 일부 기능의 사용 가능성을 CKEditor 팀과 논의 중이라고 설명했습니다.')+'<h2>플러그인</h2>'+p('플러그인을 작성하면 편집기에 새로운 기능을 추가할 수 있습니다. Trilium에서는 다음 플러그인을 사용하거나 필요한 부분을 수정해 사용합니다.')+ul([a(4,'CKEditor 5 수식 플러그인')+' — 수식 입력',a(5,'Mermaid 플러그인')+' — 본문 안의 Mermaid 도표',a(6,'키보드 키 표시 플러그인')+' — 단축키 서식',a(7,'각주 플러그인')+' — 각주'])+p('Trilium 전용 기능도 플러그인으로 구현했습니다.')+ul([a(8,'하위 노트로 잘라내기'),a(9,'노트 포함'),'노트 연결을 위한 언급 기능',a(10,'Markdown'),a(11,'참조 링크'),a(12,'안내 상자')+' — '+a(13,'기존 안내 상자 플러그인')+'과 도구 모음 아이콘에서 아이디어를 얻어 별도로 구현했습니다.']),
104:({a,img,pre})=>p(img(0,'PDF로 내보내기 메뉴'))+p('Trilium 데스크톱 앱에서는 노트를 PDF로 내보낼 수 있습니다. 서버와 모바일 PWA에서는 기술적인 제약으로 이 항목이 표시되지 않습니다.')+p('노트 제목 오른쪽의 '+img(1,'노트 메뉴 버튼')+'을 누르고 PDF로 내보내기를 선택한 뒤 저장 위치를 지정하세요.')+'<h2>내보낸 파일 열기</h2>'+p('저장이 끝나면 운영체제의 기본 프로그램으로 PDF를 엽니다. Linux의 GNOME 환경에서는 추천 프로그램 목록을 사용하므로 예상과 다른 프로그램이 열릴 수 있습니다. 다음 명령으로 PDF 연결 프로그램을 확인한 뒤 원하는 프로그램으로 설정하세요.')+pre(0)+'<h2>표시 문제 보고하기</h2>'+p('표가 잘 맞지 않거나 글자가 잘리는 문제가 있다면 '+a(0,'문제를 보고')+'해 주세요. '+img(2,'노트 메뉴 버튼')+' → 노트 내보내기 → 이 노트와 모든 하위 노트 → HTML을 ZIP으로 내보내기로 재현용 자료를 만들 수 있습니다. 공유할 자료에 개인 정보가 없는지 확인하세요.')+'<h2>가로 방향</h2>'+p('별도의 내보내기 설정 창은 없지만 <code>#printLandscape</code> '+a(1,'속성')+'을 추가하면 해당 노트를 가로 방향으로 출력할 수 있습니다.')+'<h2>용지 크기</h2>'+p('기본 용지는 Letter입니다. <code>#printPageSize</code> 값으로 <code>A0</code>부터 <code>A6</code>까지 지정할 수 있습니다. <code>Legal</code>과 <code>Letter</code> 및 <code>Tabloid</code>와 <code>Ledger</code>도 지원합니다.')+'<h2>단축키</h2>'+p(a(2,'설정')+'의 단축키에서 <code>exportAsPdf</code>에 원하는 키 조합을 지정할 수 있습니다.'),
105:({a})=>p('Markdown과 비슷한 문법을 입력하면 일부 서식이 자동으로 적용됩니다. '+a(0,'텍스트 노트')+' 자체가 Markdown 형식으로 저장된다는 뜻은 아닙니다.')+p('복잡한 서식은 '+a(1,'Markdown에서 가져오기')+'를 사용하세요. 문서 전체는 전용 '+a(2,'가져오기 기능')+'을 이용할 수 있습니다.')+ul([a(3,'제목')+' — <code>##</code>부터 <code>######</code>까지 각각 제목 2~6에 해당합니다. 제목 1은 노트 제목에 사용합니다.',a(4,'기본 서식')+' — 굵게는 <code>**글자**</code> 또는 <code>__글자__</code>로 입력합니다. 기울임은 <code>*글자*</code> 또는 <code>_글자_</code>를 사용합니다. 취소선은 <code>~~글자~~</code>로 입력합니다.',a(5,'목록')+' — 줄 앞에 <code>*</code>나 <code>-</code>를 입력하고 공백을 넣으면 글머리 기호 목록이 됩니다. <code>1.</code>이나 <code>1)</code> 뒤에 공백을 넣으면 번호 목록이 됩니다. 체크리스트는 <code>[ ]</code>로 시작하며 완료된 항목은 <code>[x]</code>로 시작합니다.',a(6,'인용문')+' — <code>&gt;</code> 뒤에 공백을 넣습니다.',a(7,'코드 블록')+' — 역따옴표 세 개를 입력합니다.',a(8,'가로 구분선')+' — <code>---</code>를 입력합니다.',a(9,'안내 상자')+' — <code>!!! note</code>는 참고입니다. <code>!!! tip</code>은 도움말이며 <code>!!! important</code>는 중요입니다. <code>!!! caution</code>은 주의이며 <code>!!! warning</code>은 경고입니다. 그 밖의 글자를 <code>!!!</code> 뒤에 입력하면 해당 내용을 담은 참고 상자가 됩니다.',a(10,'이모지')+' — <code>:</code> 뒤에 이름을 입력하면 자동 완성이 나타납니다.'])+p('자동 서식을 취소하려면 <kbd>Ctrl</kbd>+<kbd>Z</kbd>를 누르세요.'),
106:({a,img})=>'<h2>들여쓰기</h2>'+p(img(0,'들여쓰기 예시'))+p(a(0,'서식 도구 모음')+'에서 문단을 오른쪽으로 들여쓸 수 있습니다.')+ul([img(1,'들여쓰기 버튼')+'을 누를 때마다 한 단계씩 들여씁니다.',img(2,'내어쓰기 버튼')+'은 들여쓰기를 줄입니다. 더 줄일 수 없으면 비활성화됩니다.','<kbd>Tab</kbd>으로 들여쓰고 <kbd>Shift</kbd>+<kbd>Tab</kbd>으로 내어쓸 수도 있습니다. 커서가 문단이나 목록의 시작에 있지 않아도 작동합니다.',a(1,'목록')+'에서도 사용할 수 있으며 하위 목록을 만드는 데 활용합니다.'])+'<h2>Markdown 가져오기</h2>'+p('Markdown 원문을 복사한 뒤 '+img(3,'Markdown 가져오기 버튼')+'을 누르면 서식을 적용해 삽입합니다. <code># 제목</code>처럼 작성된 원문을 사용해야 합니다. 이미 서식이 보이는 미리보기 화면의 내용을 복사했다면 일반 붙여넣기를 사용하세요. HTML 서식을 받아들입니다.')+p('짧은 내용을 넣을 때 유용합니다. 문서 전체를 가져오려면 '+a(2,'Markdown 가져오기와 내보내기')+'를 사용하세요. 브라우저에서는 클립보드에 직접 접근하지 못하므로 별도 입력 화면이 나타납니다.')+'<h2>하위 노트로 잘라내기</h2>'+p(img(4,'하위 노트로 잘라내기 버튼')+'을 누르면 선택한 내용으로 하위 노트를 만듭니다. 자세한 내용은 '+a(3,'하위 노트로 잘라내기')+'를 참고하세요.')+'<h2>찾기와 바꾸기</h2>'+p(img(5,'찾기와 바꾸기 화면'))+p(img(6,'찾기와 바꾸기 버튼')+'을 누르면 편집기의 검색 창이 열립니다. <kbd>Ctrl</kbd>+<kbd>F</kbd>로도 열 수 있습니다.')
};
@@ -0,0 +1,9 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
107:({a})=>'<h2>직접 정렬하기</h2>'+p(a(0,'노트 트리')+'에서 상위 노트를 오른쪽 클릭하고 고급 → 노트 정렬을 선택하세요. 현재 노트만 정렬하며 이후 추가되는 노트까지 자동으로 정렬하지는 않습니다.')+p('제목과 생성일 및 수정일을 기준으로 오름차순이나 내림차순으로 정렬할 수 있습니다. 폴더를 먼저 표시하거나 특정 언어의 규칙에 따른 자연 정렬을 선택할 수도 있습니다.')+'<h2>자동 정렬</h2>'+p('상위 노트에 다음 '+a(1,'라벨')+'을 지정합니다.')+ul(['<code>#sorted</code> — 자동 정렬을 켭니다. 값으로 정렬 기준을 지정할 수도 있습니다.','<code>#sortDirection=desc</code> — 내림차순으로 정렬합니다. 기본값은 오름차순입니다.','<code>#sortFoldersFirst</code> — 하위 노트가 있는 노트를 먼저 표시합니다.'])+p('정렬은 다음 우선순위를 따릅니다. 앞선 기준이 같을 때 다음 기준을 적용합니다.')+ul(['<code>#top</code>이 있는 하위 노트를 맨 위에 둡니다.','<code>#bottom</code>이 있는 하위 노트를 맨 아래에 둡니다. 이 기능은 0.62부터 지원합니다.','상위 노트의 <code>#sorted</code> 값을 기준으로 정렬합니다. 값이 없으면 제목순입니다. <code>title</code>과 <code>dateModified</code> 및 <code>dateCreated</code>는 각각 제목과 수정일 및 생성일을 뜻합니다. 다른 값은 하위 노트의 라벨 이름으로 해석합니다. 예를 들어 상위 노트에 <code>#sorted=myOrder</code>를 지정하고 하위 노트에 <code>#myOrder=001</code>과 <code>#myOrder=002</code>를 지정할 수 있습니다.','다른 기준으로 구분되지 않으면 마지막으로 제목순을 적용합니다.'])+p('자동 정렬은 문자열로 비교합니다. 예를 들어 <code>1</code>은 <code>2</code>보다 앞에 오지만 <code>10</code>도 <code>2</code>보다 앞에 옵니다. 날짜를 <code>YYYY-MM-DD</code> 형식으로 작성하면 시간순과 문자열 순서가 일치합니다.'),
108:({a,img})=>p('하위 노트가 있으면 본문 끝에 목록이 표시되어 쉽게 이동할 수 있습니다.')+'<h2>설정</h2>'+p('특정 노트에서 숨기려면 <code>hideChildrenOverview</code> '+a(0,'라벨')+'을 지정하세요. 격자 보기 등은 성능을 위해 여러 페이지로 나눠 표시합니다. <code>pageSize</code>로 한 페이지의 노트 수를 정할 수 있습니다.')+'<h2>보기 방식</h2>'+p('기본은 격자 보기입니다. '+a(1,'책 노트')+'에서는 '+a(2,'상단 리본')+'으로 바꿀 수 있습니다. 다른 노트 유형도 <code>#viewType</code> 속성으로 직접 지정할 수 있습니다.')+'<h3>격자 보기</h3>'+p(img(0,'격자 보기'))+p('하위 노트를 카드처럼 배치합니다. '+a(3,'텍스트 노트')+'는 마우스 휠로 본문을 조금 더 볼 수 있습니다. '+a(4,'코드 노트')+'에는 구문 강조를 적용합니다. '+a(5,'파일 노트')+'는 오디오와 동영상 및 PDF 미리보기를 제공합니다. 본문이 없는 노트는 하위 노트 목록을 대신 표시합니다.')+'<h3>목록 보기</h3>'+p(img(1,'목록 보기'))+p('각 노트를 한 줄로 표시하며 기본적으로 제목과 아이콘만 보입니다. 펼치면 본문과 하위 노트를 확인할 수 있으며 더 아래 단계도 펼칠 수 있습니다.')+'<h3>달력 보기</h3>'+p(img(2,'달력 보기'))+p('하위 노트를 시작일이 있는 일정으로 표시합니다. 종료일도 지정할 수 있으며 일정을 옮기거나 새로 만들 수 있습니다. '+a(6,'달력 보기 안내')+'를 참고하세요.'),
109:({a})=>p(a(0,'코드 노트')+'에는 프로그램 코드를 저장하고 구문 강조를 적용할 수 있습니다. JavaScript 코드 노트는 Trilium 안에서 실행할 수도 있습니다. '+a(1,'스크립트 API')+'와 함께 사용하면 기능을 확장할 수 있습니다.')+'<h2>구조 이해하기</h2>'+p('Trilium은 두 부분으로 이루어진 웹 애플리케이션입니다. 프런트엔드는 브라우저에서 HTML과 CSS 및 JavaScript로 화면을 표시하고 사용자 입력을 처리합니다. 백엔드는 Node.js에서 실행되며 노트 저장과 암호화 등을 담당합니다. 두 영역 모두 JavaScript를 사용하지만 역할과 API는 다릅니다.')+'<h2>활용 예</h2>'+p(a(2,'새 할 일 실행 버튼')+'을 만드는 예제를 참고하세요.')+'<h2>동작 처리</h2>'+p('노트를 데이터베이스에 저장하는 일은 백엔드가 담당합니다. 프런트엔드에서 백엔드에 노트 생성을 요청한 뒤 만들어진 노트를 열면 사용자가 제목과 속성을 입력할 수 있습니다.')+'<h2>스크립트 실행</h2>'+p('코드 노트의 실행 버튼으로 스크립트를 실행할 수 있습니다. 다만 스크립트로 추가한 화면 요소는 앱을 다시 시작하면 사라집니다. 매번 자동으로 추가하려면 시작할 때 스크립트를 실행하도록 지정해야 합니다.')+p('<code>#run=frontendStartup</code> '+a(3,'라벨')+'이 있는 노트는 프런트엔드가 시작될 때 실행됩니다. '+a(4,'모바일 화면')+'에서는 대신 <code>#run=mobileStartup</code>을 지정하세요.')+'<h2>더 살펴보기</h2>'+ul([a(5,'고급 활용 예제'),a(6,'이벤트'),a(7,'스크립트 API')]),
110:({a,pre})=>p('이 문서는 '+a(0,'서버 설치')+'에서 Trilium 자체에 TLS를 설정하는 방법을 설명합니다. Nginx 같은 역방향 프록시에서 HTTPS 연결을 처리하는 방식도 사용할 수 있습니다. 원문에 연결된 '+a(1,'역방향 프록시 설정 예제')+'는 특정 Ubuntu 버전 기준입니다.')+'<h2>인증서 준비</h2>'+p('신뢰할 수 있는 인증 기관이 서명한 인증서를 사용하는 것이 일반적입니다. '+a(2,'Let’s Encrypt')+'는 무료 인증서를 제공하며 Certbot 등의 도구로 발급과 갱신을 자동화할 수 있습니다. 자체 서명 인증서도 가능하지만 접속하는 기기마다 신뢰 설정이 필요합니다.')+'<h2>config.ini 설정</h2>'+p(a(3,'데이터 폴더')+'의 설정 파일에 인증서와 키 경로를 지정합니다.')+pre(0).replace('# Set to true for TLS/SSL/HTTPS (secure), false for HTTP (insecure).','# HTTPS를 사용하려면 true로 지정합니다. false는 HTTP입니다.').replace('# Path to the certificate (run "bash bin/generate-cert.sh" to generate a self-signed certificate).','# 인증서 경로입니다. 자체 서명 인증서 생성 예시는 bash bin/generate-cert.sh입니다.').replace('# Relevant only if https=true','# https=true일 때 사용합니다.')+p(a(4,'환경 변수 설정')+'으로 같은 값을 전달할 수도 있습니다. 예제 경로는 ACME 도구를 사용한 환경의 예시이며 실제 파일 위치에 맞게 바꿔야 합니다. Docker에서는 컨테이너가 접근할 수 있는 마운트 경로를 지정하세요. 설정 후 Trilium을 다시 시작하고 HTTPS 주소로 접속합니다.')+'<h2>자체 서명 인증서</h2>'+p('데스크톱 앱은 자체 서명 인증서를 기본적으로 신뢰하지 않습니다. 원문에는 다음처럼 인증서 검증을 끄는 방법도 소개되어 있습니다.')+pre(1)+p('Windows의 <code>trilium-no-cert-check.bat</code>도 같은 용도의 시작 스크립트입니다. 인증서 검증을 끄면 서버의 신원을 확인하지 못하므로 연결 보안이 약해집니다. 이 설명은 기능 안내이며 이 한글화 작업에서는 해당 설정을 변경하지 않습니다.'),
111:({a,img})=>p('코드 노트에는 C++와 JavaScript 같은 프로그램 코드나 JSON과 XML 같은 구조화 자료 및 CSS 등을 저장할 수 있습니다. 구문 강조를 제공하며 JavaScript는 '+a(0,'스크립트')+'로 실행할 수도 있습니다. 구조화 자료는 스크립트의 데이터 저장에도 활용할 수 있습니다.')+p('짧은 코드를 '+a(1,'텍스트 노트')+' 안에 넣으려면 '+a(2,'코드 블록')+'을 사용하세요.')+p(img(0,'코드 노트 화면'))+'<h2>언어 선택</h2>'+p(a(3,'상단 리본')+'의 노트 유형을 열고 코드 영역에서 언어를 선택하세요.')+p(img(1,'코드 언어 선택'))+'<h2>언어 목록 설정</h2>'+p(a(4,'설정')+' → 코드 노트의 선택 목록에 표시할 MIME 유형에서 필요한 언어를 선택할 수 있습니다. 변경한 뒤 '+a(5,'애플리케이션을 새로고침')+'해야 목록에 반영됩니다. 이 목록은 '+a(6,'코드 블록')+'과 '+a(7,'텍스트 노트')+'에서도 함께 사용합니다.')+'<h2>색상 테마</h2>'+p('0.94.0부터 '+a(8,'설정')+' → 코드 노트 → 모양에서 색상 테마를 선택할 수 있습니다. 텍스트 노트의 코드 블록과는 다른 기술을 사용하므로 제공하는 테마 수가 다릅니다.')+p('이 버전에서는 사용자가 코드 노트 테마를 직접 추가할 수 없습니다. 테마가 CSS가 아니라 JavaScript로 정의되기 때문입니다. 추가를 제안하려면 CodeMirror 5가 아닌 CodeMirror 6용 테마인지 확인하세요.'),
112:({a,pre})=>p('Trilium은 '+a(0,'데이터베이스')+'의 일간과 주간 및 월간 백업을 만들며 새 버전으로 변환하기 전에도 백업합니다. 서로 다른 시점의 백업을 최대 4개 보관합니다. 기본 위치는 '+a(1,'데이터 폴더')+' 아래의 <code>backup</code>입니다.')+p('기본 백업만으로 모든 상황을 대비할 수는 없습니다. '+a(2,'데이터베이스')+'를 다른 컴퓨터나 별도의 저장소에도 보관할 수 있습니다. '+a(3,'동기화')+'는 데이터를 여러 기기에 복제하지만 변경 사항도 전달하므로 독립된 과거 백업과는 역할이 다릅니다.')+'<h2>백업 복원</h2>'+p('주간 백업을 복원하는 순서입니다. 메뉴 → Trilium 정보에서 '+a(4,'데이터 폴더')+'를 확인하세요. 아래에서는 <code>~/trilium-data</code>라고 가정합니다.')+ul(['<code>~/trilium-data/backup/backup-weekly.db</code>가 복원할 '+a(5,'데이터베이스')+' 백업인지 확인합니다.','Trilium을 종료합니다.','현재 <code>document.db</code>와 <code>document.db-wal</code> 및 <code>document.db-shm</code>을 별도 위치에 보관한 뒤 데이터 폴더에서 제거합니다. 뒤의 두 파일은 자동 생성되는 보조 파일입니다.','주간 백업을 <code>~/trilium-data/document.db</code>로 복사합니다.','Trilium 실행 계정이 읽고 쓸 수 있도록 소유자와 권한을 확인합니다. 권한 지정 예시는 <code>chmod 600 document.db</code>입니다.','Trilium을 다시 시작합니다.'])+p('여러 기기가 동기화 중이라면 함께 복원할 범위를 확인해야 합니다. 다른 기기에 더 최신 데이터가 남아 있으면 복원한 과거 데이터에 다시 동기화될 수 있습니다.')+'<h2>자동 백업 끄기</h2>'+p(a(6,'데이터 폴더')+'의 <code>config.ini</code>에서 끌 수 있지만 별도 백업 수단 없이 끄는 것은 권장하지 않습니다.')+pre(0).replace('... some other configs','; 다른 설정').replace('# set to true to disable backups (e.g. because of limited space on server)','# true로 지정하면 자동 백업을 끕니다.')+p(a(7,'환경 변수')+'로 설정할 수도 있습니다. '+a(8,'설정 예제 파일')+'을 참고하세요.')
};
@@ -0,0 +1,7 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
113:({a,img})=>p('주요 속성은 자주 사용하는 '+a(0,'속성')+'을 노트의 주 화면에 입력란으로 표시하는 기능입니다.')+p(img(0,'주요 속성 입력란'))+p('각 입력란은 일반 속성과 같은 값을 저장합니다. 검색이나 스크립트에서 사용할 속성을 매번 메뉴에서 찾지 않고 바로 확인하고 수정할 수 있습니다.')+'<h2>속성 정의</h2>'+p('속성의 이름과 값은 문자열입니다. 속성 정의는 값을 글자나 날짜 등 어떤 형식으로 해석할지와 여러 값을 허용할지 및 주요 속성으로 표시할지를 지정합니다.')+p(img(1,'속성 정의 예시'))+p('실제 값을 저장하는 속성과 그 형식을 지정하는 속성은 별개입니다. 형식 정의에 '+a(1,'상속')+'을 설정하면 하위 트리 전체에 공통으로 적용하고 값은 각 노트에 따로 지정할 수 있습니다.')+'<h3>역방향 관계</h3>'+p('배우자 관계처럼 양쪽에 같은 이름의 관계가 필요한 경우가 있습니다. 한 노트에서 다른 노트로 <code>isPartnerOf</code>를 연결했다면 반대 방향에도 같은 관계가 있어야 합니다.')+p('부모와 자녀는 방향에 따라 이름이 다릅니다. 부모에서 자녀로는 <code>isParentOf</code>를 사용하고 반대쪽에는 <code>isChildOf</code>를 사용할 수 있습니다.')+p('관계 정의에서 서로의 역방향 관계 이름을 지정하면 자동으로 관리할 수 있습니다. 부모·자녀 예제에서는 각 관계의 정의에 상대 관계 이름을 지정해야 합니다. 관계를 저장하면 대상 노트의 역방향 관계도 확인하고 생성합니다. 관계를 삭제하면 대응하는 역방향 관계도 삭제합니다.'),
114:({a,img})=>'<h2>화면 배치</h2>'+p('두 가지 배치 중에서 선택할 수 있습니다.')+'<h3>세로 배치</h3>'+ul([a(0,'실행 도구 모음')+'을 화면 왼쪽에 세로로 표시합니다.','탭은 '+a(1,'노트 트리')+' 오른쪽 영역의 위에 표시합니다.',a(2,'빠른 검색')+'은 '+a(3,'노트 트리')+' 위에 있습니다.',a(4,'노트 트리')+'는 '+a(5,'실행 도구 모음')+' 아래의 '+img(0,'트리 접기 버튼')+'으로 접을 수 있습니다.',a(6,'전체 메뉴')+'는 '+a(7,'실행 도구 모음')+' 위의 '+img(1,'메뉴 버튼')+'으로 엽니다.'])+p(img(2,'세로 배치 화면'))+'<h3>가로 배치</h3>'+ul([a(8,'실행 도구 모음')+'을 화면 위에 가로로 표시합니다.','탭이 화면 위에서 전체 너비를 사용하므로 더 많은 탭을 한 번에 표시할 수 있습니다.',a(9,'빠른 검색')+'은 '+a(10,'실행 도구 모음')+'에 포함됩니다. 위치를 바꾸거나 제거할 수 있습니다.',a(11,'노트 트리')+'는 첫 탭 왼쪽의 '+img(3,'트리 접기 버튼')+'으로 접습니다.',a(12,'전체 메뉴')+'는 '+a(13,'실행 도구 모음')+' 끝의 '+img(4,'메뉴 버튼')+'으로 엽니다.'])+p(img(5,'가로 배치 화면'))+'<h2>배치 바꾸기</h2>'+p(a(14,'설정')+' → 모양 → 배치에서 선택하세요. 선택하면 창을 다시 불러와 즉시 적용합니다.'),
115:({a})=>p('노트는 Trilium에서 정보를 담는 기본 단위입니다. 주요 구성 요소는 제목과 본문입니다.')+'<h3>노트 유형</h3>'+p('주로 사용하는 유형은 서식 있는 '+a(0,'텍스트 노트')+'입니다. 그림과 도표에는 '+a(1,'캔버스')+'와 '+a(2,'Mermaid 도표')+'를 사용할 수 있습니다. '+a(3,'저장된 검색')+'과 '+a(4,'HTML 표시 노트')+' 같은 고급 유형도 있으며 '+a(5,'스크립트')+'와 함께 활용할 수 있습니다.')+p('별도의 폴더 유형은 없습니다. 모든 노트는 하위 노트를 가질 수 있어 폴더 역할을 할 수 있습니다.')+'<h3>최상위 노트</h3>'+p('노트 트리의 시작점인 최상위 노트가 하나 있습니다. 다른 모든 노트는 그 아래에 놓입니다.')+'<h3>트리 구조</h3>'+p('노트 자체와 트리에서의 위치 정보는 별도로 관리됩니다. '+a(6,'노트 복제')+'를 참고하세요. 파일 시스템과 비슷하지만 하나의 노트에 본문과 하위 노트가 함께 있을 수 있습니다. 하위 노트가 없는 노트를 말단 노트라고 합니다.')+'<h3>삭제와 복원</h3>'+p('처음 삭제할 때는 제목과 본문 및 속성을 바로 지우지 않고 삭제 상태로 표시해 숨깁니다. 기본적으로 7일 동안 '+a(7,'최근 변경 사항')+'에서 삭제 취소 링크로 복원할 수 있습니다.')+p('복원하면 본문과 속성도 되살아납니다. 같은 작업으로 삭제한 하위 노트도 함께 복원됩니다. 복원할 위치가 있어야 하므로 상위 노트부터 복원해야 합니다. 여러 차례에 걸쳐 삭제했다면 삭제한 순서의 반대로 복원하세요.')+p('보관 기간이 지나면 제목과 본문 및 수정 이력과 속성이 영구 삭제됩니다. 이후에는 '+a(8,'백업')+'이 있어야 복구할 수 있습니다. 기본 7일인 보관 기간은 설정에서 바꿀 수 있습니다.')+'<h2>관련 문서</h2>'+p(a(9,'읽기 전용 노트')),
116:({a,img,pre})=>p(img(0,'체중 기록 예제'))+p('체중 기록은 '+a(0,'스크립트 API')+'를 활용하는 '+a(1,'기본 예제')+'입니다. <code>weight</code>를 '+a(2,'주요 속성')+'으로 지정한 '+a(3,'템플릿')+'에서 '+a(4,'날짜별 노트')+'를 만들면 체중을 입력하고 시간에 따른 변화를 차트로 볼 수 있습니다.')+'<h2>구현 방식</h2>'+p('체중 기록 화면은 HTML 표시 노트입니다. 자체 본문 대신 '+a(5,'스크립트')+'의 결과를 표시하는 영역을 제공합니다. <code>~renderNote</code> '+a(6,'관계')+'로 구현용 노트와 연결합니다.')+p('구현에는 HTML과 JavaScript '+a(7,'코드 노트')+'가 사용됩니다. <code>weight</code> 속성이 있는 노트를 모아 차트로 표시합니다. 차트 라이브러리 '+a(8,'Chart.js')+'는 Trilium에 내장되어 있지 않으므로 첨부 파일로 가져옵니다.')+'<h3>코드</h3>'+p('다음 코드를 프런트엔드 JavaScript '+a(9,'코드 노트')+'에 작성합니다.')+pre(0).replace('Weight (kg)','체중 (kg)')+'<h2>상단 버튼 숨기기</h2>'+p('체중 기록의 연결된 노트 중 버튼 구현 노트를 찾아 본문을 지우거나 주석으로 처리하세요. Trilium을 다시 시작하면 체중 기록 버튼이 표시되지 않습니다.')
};
@@ -0,0 +1,7 @@
const p=s=>'<p>'+s+'</p>';
export default {
117:({a,img,pre})=>p('이 위젯은 새 설치의 '+a(0,'사용 예제')+'에도 포함됩니다. 프런트엔드 JavaScript '+a(1,'코드 노트')+'를 만들고 <code>#widget</code> 라벨을 지정하세요.')+pre(0).replace('This defines a custom widget which displays number of words and characters in a current text note.','현재 텍스트 노트의 단어 수와 글자 수를 표시하는 위젯입니다.').replace("To be activated for a given note, add label 'wordCount' to the note, you can also make it inheritable and thus activate it for the whole subtree.","사용할 노트에 wordCount 라벨을 지정하세요. 상속을 켜면 하위 트리 전체에 적용됩니다.").replace('See it in action in "Books" and its subtree.','책 예제와 그 하위 노트에서 확인할 수 있습니다.').replace('Word count:','단어 수:').replace('Character count:','글자 수:').replace('higher value means position towards the bottom/right','값이 클수록 아래쪽이나 오른쪽에 배치합니다.').replace("show widget only on text notes and when marked with 'wordCount' label",'텍스트 노트에 wordCount 라벨이 있을 때만 표시합니다.').replace('// hide','// 숨기기').replace('// display','// 표시하기').replace('// get plain text only','// 서식 없이 글자만 가져오기')+p('변경한 뒤 화면 구성을 다시 만들도록 '+a(2,'Trilium을 새로고침')+'하세요. 노트 아래에 다음과 같이 표시됩니다.')+p(img(0,'단어 수와 글자 수 위젯'))+p('예제는 공백과 일부 기호로 나눈 조각을 단어로 셉니다. 한국어 형태소 분석에 따른 단어 수는 아닙니다.'),
118:({pre})=>p('Ubuntu 18.04를 기준으로 작성된 과거의 Nginx 역방향 프록시 예제입니다. 기존 웹 서버 제거와 TLS 설정이 포함되어 있으므로 현재 환경을 확인한 뒤 사용하세요. 아래 설정은 당시 원문을 보존한 것이며 최신 보안 설정을 뜻하지 않습니다.')+'<h2>Nginx 설치</h2>'+p('원문은 Nginx를 설치하고 Apache2를 제거하는 순서로 설명합니다. Apache에서 다른 서비스를 제공 중이라면 그대로 실행하면 안 됩니다.')+pre(0)+'<h2>설정 파일</h2>'+pre(1)+p('Trilium 주소와 도메인 및 인증서 경로를 환경에 맞게 지정하세요. 원문에 포함된 TLS 1.0과 1.1은 오래된 프로토콜입니다.')+pre(2).replace('# This part configures, where your Trilium server is running','# Trilium 실행 주소').replace('# change it to a different hostname and port if non-default is used','# 실제 호스트와 포트로 변경').replace('# This part is for proxy and HTTPS configure','# 프록시와 HTTPS 설정').replace('#change trilium.example.net to your domain without HTTPS or HTTP.','# 프로토콜을 제외한 도메인으로 변경').replace('#change /etc/ssl/note/example.crt to your path of crt file.','# 인증서 파일 경로로 변경').replace('#change /etc/ssl/note/example.net.key to your path of key file.','# 개인 키 파일 경로로 변경').replace("#check the path of access.log, if it doesn't fit your file, change it",'# 접근 로그 저장 경로 확인').replace('# This part is for HTTPS forced','# HTTP 요청을 HTTPS로 전환').replace('# change to your domain','# 실제 도메인으로 변경')+'<h2>별도 경로에서 제공하기</h2>'+p('여러 인스턴스를 다른 경로로 제공하려면 location을 조정할 수 있습니다. <code>proxy_pass</code> 끝에 슬래시가 없다면 location 경로의 끝에도 슬래시를 붙이지 않습니다. <code>proxy_cookie_path</code>도 같은 경로로 지정하면 여러 인스턴스에 각각 로그인 상태를 유지할 수 있습니다.')+pre(3).replace('proxy_cookie_path / /trilium/instance-one\n','proxy_cookie_path / /trilium/instance-one;\n')+p('마지막 예제의 쿠키 경로 지시문에는 원문에서 빠진 세미콜론을 보완했습니다. 실제 설정을 적용하기 전에 Nginx 구문 검사가 필요합니다.'),
119:({pre})=>p('Trilium 서버 주소인 <code>trilium.yourdomain.com</code>에 DNS A 레코드를 설정한 환경을 가정합니다. 아래 도메인과 버전 및 경로는 실제 환경에 맞게 바꾸세요.')+'<h2>컨테이너 준비</h2>'+pre(0)+'<h2>Apache 프록시 설정</h2>'+p('HTTPS와 HTTP 프록시 및 WebSocket 모듈을 활성화합니다.')+pre(1)+p('인증서를 발급합니다. 예제 도메인은 실제 서비스 주소로 바꾸세요. 원문은 독립 실행 방식으로 발급하고 생성된 인증서 경로를 기록하도록 안내합니다.')+pre(2)+p('가상 호스트 설정 파일을 만듭니다. <code>apachectl -S</code>로 서버 설정 위치를 확인할 수 있습니다.')+pre(3)+p('다음은 원문의 설정 조각입니다. 완전한 가상 호스트 파일은 아니므로 기존 HTTP와 HTTPS VirtualHost 블록에 맞게 구성해야 합니다.')+pre(4)+p('<code>sudo a2ensite trilium.yourdomain.com.conf</code>로 활성화하고 설정을 검사한 뒤 <code>sudo systemctl reload apache2</code>로 다시 불러옵니다.')+'<h2>부팅 시 컨테이너 시작</h2>'+p('<code>/lib/systemd/system/trilium.service</code>에 다음 서비스 정의를 작성하는 예시입니다.')+pre(5).replace('Description=Trilium Server','Description=Trilium 서버')+p('서비스 설정을 다시 읽고 활성화한 뒤 시작합니다.')+pre(6),
120:({a,pre})=>p('서버 패키지는 Trilium 코드와 Node.js 모듈 및 실행 환경을 함께 담은 압축 파일입니다.')+'<h2>실행 순서</h2>'+p('SSH로 서버에 접속한 뒤 '+a(0,'릴리스 페이지')+'에서 <code>TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz</code>처럼 Server가 포함된 파일을 내려받으세요. wget이나 curl을 사용할 수 있습니다.')+p('<code>tar -xf TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz</code>로 압축을 풀고 생성된 서버 폴더로 이동한 뒤 <code>./trilium.sh</code>를 실행합니다. 브라우저에서 <code>http://[서버주소]:8080</code>을 열면 초기 설정 화면이 나타납니다.')+p('SSH 연결을 닫아도 실행을 유지하려면 현재 실행을 종료한 뒤 <code>nohup ./trilium.sh &amp;</code>로 실행하거나 systemd 서비스를 설정하세요.')+'<h2>systemd 자동 시작</h2>'+p('압축을 풀고 프로그램을 옮깁니다.')+pre(0)+p('서비스 파일을 만듭니다.')+pre(1)+p('실행 사용자와 그룹을 실제 계정으로 바꾸어 다음 내용을 저장합니다.')+pre(2).replace('Description=Trilium Daemon','Description=Trilium 백그라운드 서비스').replace('# KillMode=process leads to error, according to https://www.freedesktop.org/software/systemd/man/systemd.kill.html','# KillMode=process는 오류를 일으킬 수 있습니다. 설명: https://www.freedesktop.org/software/systemd/man/systemd.kill.html')+p('저장한 뒤 서비스를 활성화하고 시작합니다.')+pre(3)+p('브라우저에서 서버의 8080 포트에 접속해 초기 설정 화면을 확인하세요.')+'<h2>자주 발생하는 문제</h2><h3>시스템 라이브러리 버전</h3>'+pre(4)+p('이와 같은 오류는 실행에 필요한 시스템 라이브러리 버전이 없다는 뜻입니다. 운영체제를 지원되는 버전으로 업데이트하거나 다른 '+a(1,'서버 설치 방식')+'을 사용하세요.')+'<h2>TLS</h2>'+p('안전한 연결을 위해 '+a(2,'TLS 설정')+'을 확인하세요.')
};
@@ -0,0 +1,7 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
121:({a})=>p('상속은 '+a(0,'라벨')+'이나 '+a(1,'관계')+'를 여러 노트에 공통으로 적용하는 기능입니다. 주로 상위·하위 노트 사이에 적용하며 템플릿으로도 사용할 수 있습니다.')+'<h2>일반 상속</h2>'+p('<code>isInheritable</code>을 <code>true</code>로 지정하면 해당 속성을 현재 노트와 모든 하위 노트에 적용합니다. '+a(2,'라벨')+'과 '+a(3,'관계')+' 편집 화면에서 설정하거나 <code>#myLabel(inheritable)=value</code>처럼 작성할 수 있습니다.')+p('예를 들어 <code>archived</code> 라벨의 상속을 켜면 하위 트리 전체를 검색 등의 목록에서 숨길 수 있습니다. 일반 상속은 모든 하위 노트에 적용됩니다. 일부 노트에서 개별적으로 바꿔야 한다면 복사 상속이나 템플릿 방식을 사용하세요.')+'<h2>복사 상속</h2>'+p('속성 이름 앞에 <code>child:</code>를 붙이면 새 하위 노트에 해당 속성을 복사합니다. 복사된 속성은 독립적이며 노트를 다른 위치로 옮겨도 유지됩니다.')+p('<code>#child:exampleAttribute</code>를 상위 노트에 지정하면 새로 만드는 바로 아래 노트에 <code>#exampleAttribute</code>가 생깁니다. 관계는 <code>~child:myRelation</code>처럼 지정합니다. 기존 노트에는 소급 적용되지 않습니다. 무한한 하위 단계에 적용하려면 일반 상속이나 템플릿을 사용하세요.')+'<h3>여러 단계로 복사하기</h3>'+p('<code>#child:child:child:foo</code>를 지정하면 첫 단계에는 <code>#child:child:foo</code>가 생기고 다음 단계에는 <code>#child:foo</code>가 생기며 세 번째 단계에는 <code>#foo</code>가 생깁니다. 관계도 <code>~child:child:child:foo</code>로 같은 방식을 사용할 수 있습니다. 새로 만드는 노트에만 적용됩니다.')+'<h2>템플릿 상속</h2>'+p(a(4,'템플릿')+'의 속성도 물려받을 수 있습니다. 비슷한 구조와 역할을 가진 노트에 공통 설정을 유지할 때 유용합니다.'),
122:({a,img,pre})=>p('할 일 관리는 '+a(0,'주요 속성')+'과 '+a(1,'스크립트')+'를 활용하는 '+a(2,'기본 예제')+'입니다.')+'<h2>동작 예시</h2>'+p(img(0,'할 일 관리 예제'))+p('할 일과 완료된 일을 구분합니다. <code>doneDate</code>에 값이 있으면 완료된 일로 처리합니다. 아직 하지 않은 일은 장소와 태그로 분류하며 속성을 바꾸면 알맞은 위치로 자동 이동합니다.')+p(a(3,'날짜별 노트')+'와도 연동합니다. 예정일인 <code>todoDate</code>와 완료일인 <code>doneDate</code>에 해당하는 날짜 노트 아래에 같은 작업을 '+a(4,'복제')+'하고 원본 예제에서는 TODO와 DONE '+a(5,'접두사')+'로 구분합니다.')+'<h2>구현</h2>'+p('새 작업을 넣는 노트의 <code>~child:template</code> '+a(6,'관계')+'가 작업 템플릿을 가리킵니다. '+a(7,'속성 상속')+'을 참고하세요.')+'<h3>속성</h3>'+p('템플릿에서 예정일과 완료일 및 태그와 장소를 '+a(8,'주요 속성')+'으로 표시합니다. <code>~runOnAttributeChange</code>는 속성이 바뀔 때 실행할 '+a(9,'이벤트')+' 처리기를 연결합니다. 이 '+a(10,'스크립트')+'는 완료일을 입력하면 완료 목록으로 옮기고 할 일과 장소 및 태그 목록에서 제거합니다.')+'<h3>새 할 일 버튼</h3>'+pre(0).replace("title: 'New task'","title: '새 할 일'").replace("'new task'","'새 할 일'").replace('// creating notes is backend (server) responsibility so we need to pass\n // the control there','// 노트 생성은 백엔드에서 처리합니다.').replace('// we got an ID of newly created note and we want to immediatelly display it','// 생성한 노트를 바로 엽니다.')+'<h3>색상</h3>'+p('다음 CSS '+a(11,'코드 노트')+'는 할 일을 빨간색으로 표시하고 완료한 일을 초록색으로 표시합니다.')+pre(1)+p('이 '+a(12,'코드 노트')+'에 <code>#appCss</code> '+a(13,'라벨')+'을 지정하면 시작할 때 적용됩니다. 이벤트 처리기는 상태에 따라 <code>#cssClass</code> 값으로 <code>todo</code>나 <code>done</code>을 지정합니다.'),
123:({a,img,pre})=>'<h2>인용문</h2>'+p('한 문단 이상을 인용할 때 사용할 수 있습니다. '+a(0,'서식 도구 모음')+'의 '+img(0,'인용문 버튼')+'을 누르거나 줄 시작에서 <code>&gt;</code> 뒤에 공백을 입력하세요. 인용문 안에는 표와 이미지 및 다른 인용문이나 안내 상자도 넣을 수 있습니다.')+'<h2>안내 상자</h2>'+p('독자가 알아야 할 내용을 눈에 띄게 표시하는 상자입니다.')+p(img(1,'안내 상자의 종류'))+p('동작은 인용문과 비슷하며 제목과 표 및 이미지 등을 안에 넣을 수 있습니다.')+'<h3>만들기</h3>'+p(a(1,'서식 도구 모음')+'에서 안내 상자를 선택하세요.')+p(img(2,'안내 상자 메뉴'))+p('<code>!!! note</code>는 참고 상자를 만듭니다. <code>!!! tip</code>은 도움말이며 <code>!!! important</code>는 중요입니다. <code>!!! caution</code>은 주의이며 <code>!!! warning</code>은 경고입니다. <code>!!!</code> 뒤에 다른 글자를 입력하면 참고 상자 안에 그 글자가 들어갑니다.')+'<h3>사용 방법</h3>'+ul(['글자를 선택하고 안내 상자 버튼을 누르면 선택한 내용을 상자로 바꿉니다.','여러 상자를 선택한 뒤 버튼을 누르면 하나로 합칩니다.','빈 상자에서 <kbd>Backspace</kbd>를 누르면 삭제합니다.','<kbd>Enter</kbd>는 새 문단을 만들며 두 번 누르면 상자 밖으로 나옵니다.','제목과 표 등 블록 요소를 안에 넣을 수 있습니다.'])+'<h3>종류</h3>'+p('참고와 도움말 및 중요와 주의와 경고의 다섯 종류를 제공합니다. GitHub의 안내 상자를 참고한 구성이며 이 버전에서는 종류를 추가하거나 사용자가 바꾸는 기능을 제공하지 않습니다.')+'<h3>Markdown</h3>'+p('가져오기와 내보내기에서는 GitHub 형식을 사용합니다.')+pre(0).replace('This is a note.','참고할 내용입니다.').replace('This is a tip.','도움이 되는 설명입니다.').replace('This is a very important information.','중요한 내용입니다.').replace('This is a caution.','주의할 내용입니다.')+p('편집 중 자동 변환에 쓰는 <code>!!! note</code>와 Markdown 파일의 문법은 다릅니다. Markdown 파일에서는 위의 GitHub 형식을 사용하세요.'),
124:({a,img,pre})=>p('데이터 폴더에는 다음 자료가 들어 있습니다.')+ul(['<code>document.db</code> — '+a(0,'데이터베이스'),'<code>config.ini</code> — 접속 포트 등 인스턴스 설정','<code>backup</code> — 자동 '+a(1,'백업'),'<code>log</code> — 실행 로그'])+'<h2>위치 확인</h2>'+p('왼쪽 위 메뉴의 Trilium 정보에서 현재 데이터 폴더를 확인할 수 있습니다.')+p(img(0,'데이터 폴더 위치'))+p('기본 폴더 이름은 <code>trilium-data</code>입니다. Linux에서는 <code>/home/[사용자]/.local/share</code> 아래에 둡니다. Windows에서는 <code>C:\\Users\\[사용자]\\AppData\\Roaming</code> 아래이며 macOS에서는 <code>/Users/[사용자]/Library/Application Support</code> 아래입니다. 해당 경로를 사용할 수 없으면 사용자 홈 폴더를 사용합니다. Docker도 컨테이너 사용자 홈 아래에 데이터 폴더를 둡니다.')+p('노트와 설정은 이 폴더에 모여 있습니다. 실행 중 데이터베이스를 단순 복사하는 대신 일관성이 보장되는 백업 방법을 사용하세요.')+'<h3>위치 바꾸기</h3>'+p('<code>TRILIUM_DATA_DIR</code> 환경 변수로 지정할 수 있습니다. Linux 예시입니다.')+pre(0)+'<h4>macOS</h4>'+p('로그인할 때마다 적용하려면 <code>~/Library/LaunchAgents</code>에 plist 파일을 만듭니다. 직접 설정하려면 <code>launchctl setenv TRILIUM_DATA_DIR &lt;경로&gt;</code>를 사용합니다. 아래는 원문에 남아 있는 값 목록입니다. XML 태그가 빠져 있어 완전한 plist 파일로 사용할 수는 없습니다.')+pre(1)+'<h3>실행할 때만 지정하기</h3>'+p('Trilium 프로세스에만 환경 변수를 지정하면 서로 다른 '+a(2,'데이터베이스')+'를 사용하거나 이동식 설치를 구성할 수 있습니다.')+pre(2)+p('필요하면 이 명령을 실행 스크립트로 저장하세요.')+'<h3>개별 경로 지정</h3>'+p('<code>TRILIUM_DOCUMENT_PATH</code>는 DB 파일 경로입니다. <code>TRILIUM_BACKUP_DIR</code>은 백업 폴더이며 <code>TRILIUM_LOG_DIR</code>은 로그 폴더입니다. <code>TRILIUM_ANONYMIZED_DB_DIR</code>은 익명화 DB 폴더이며 <code>TRILIUM_CONFIG_INI_PATH</code>는 설정 파일 경로입니다. 지정하지 않으면 데이터 폴더 안의 기본 위치를 사용합니다.')
};
@@ -0,0 +1,9 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
125:({a,img})=>p(a(0,'텍스트')+'와 '+a(1,'코드')+' 등 일부 노트는 읽기 전용으로 설정할 수 있습니다. 편집할 수 없는 화면으로 열리지만 필요하면 일시적으로 편집 모드로 전환할 수 있습니다.')+'<h2>자동 읽기 전용</h2>'+p('매우 긴 노트는 편집기 성능을 위해 자동으로 읽기 전용으로 열립니다. 노트별로 해제할 수 있으며 '+a(2,'설정')+'의 '+a(3,'텍스트 노트')+'와 '+a(4,'코드 노트')+'에서 적용 기준 글자 수를 바꿀 수 있습니다.')+'<h2>노트별 설정</h2>'+p(a(5,'상단 리본')+' → 기본 속성 → 편집 가능 여부에서 선택합니다.')+ul(['자동 — 기본적으로 편집할 수 있지만 정해진 크기를 넘으면 읽기 전용으로 엽니다.','읽기 전용 — 크기와 관계없이 읽기 전용으로 엽니다. 필요하면 잠시 편집할 수 있습니다.','항상 편집 가능 — 크기에 따른 자동 읽기 전용 전환을 사용하지 않습니다.'])+p('편집 가능 여부가 표시되지 않으면 해당 유형은 읽기 전용 설정을 지원하지 않습니다. '+a(6,'라벨')+'로 직접 지정할 수도 있습니다. <code>readOnly</code>는 읽기 전용이며 <code>autoReadOnlyDisabled</code>는 항상 편집 가능입니다.')+'<h2>잠시 편집하기</h2>'+p(a(7,'떠 있는 버튼')+' 영역의 '+img(0,'편집 버튼')+'을 누르면 편집할 수 있습니다. 다른 노트로 이동한 뒤 다시 열면 읽기 전용으로 돌아갑니다.')+'<h2>유형별 동작</h2>'+p(a(8,'Mermaid 도표')+'는 읽기 전용일 때 코드를 숨기고 도표를 전체 영역에 표시합니다. '+a(9,'떠 있는 버튼')+'에서 편집 잠금을 켜거나 끌 수 있습니다.'),
126:({a,img})=>p('텍스트 노트는 세 종류의 목록을 지원합니다.')+ul([img(0,'글머리 기호 목록')+' 글머리 기호 목록',img(1,'번호 목록')+' 번호 목록',img(2,'체크리스트')+' 체크리스트'])+p(img(3,'목록 옵션')+'을 누르면 사각형 기호나 로마 숫자 등으로 표시 방식을 바꿀 수 있습니다. 번호 목록은 시작 번호와 역순 번호 매기기도 설정할 수 있습니다.')+'<h2>키보드 사용</h2>'+ul(['줄 앞에 <code>*</code>나 <code>-</code>와 공백을 입력하면 글머리 기호 목록을 만듭니다.','<code>1.</code>이나 <code>1)</code>와 공백을 입력하면 번호 목록을 만듭니다.','<code>[ ]</code>는 미완료 체크리스트 항목이며 <code>[x]</code>는 완료 항목입니다.','<kbd>Enter</kbd>는 새 항목을 만듭니다. <kbd>Shift</kbd>+<kbd>Enter</kbd>는 같은 항목 안에서 줄을 바꿉니다.','<kbd>Enter</kbd>를 두 번 누르면 목록을 끝냅니다. 목록 사이의 빈 공간을 지우면 두 목록을 합칠 수 있습니다.',img(4,'들여쓰기 버튼')+'이나 <kbd>Tab</kbd>으로 하위 목록을 만들고 <kbd>Shift</kbd>+<kbd>Tab</kbd>으로 한 단계 올립니다. '+a(0,'기타 기능의 들여쓰기')+'를 참고하세요.'])+'<h2>목록 안에 제목과 코드 블록 넣기</h2>'+[
'목록을 만듭니다.','Enter로 새 항목을 만듭니다.','Backspace로 글머리 기호를 없앱니다. 커서는 목록 항목 안에 남습니다.','코드 블록이나 표 등 원하는 요소를 넣습니다.','Enter를 눌러 요소 뒤의 빈 위치로 이동합니다.','Enter를 다시 누르면 다음 글머리 기호가 만들어집니다.'
].map((s,i)=>p((i+1)+'. '+s)+p(img(i+5,'목록 안에 블록 넣기 '+(i+1)+'단계'))).join('')+p('글머리 기호 목록과 번호 목록 및 체크리스트에서 같은 방법을 사용할 수 있습니다.'),
127:({a,img})=>p(img(0,'Mermaid 도표 화면'))+p('Mermaid는 글자로 작성한 설명을 도표로 바꿉니다. 순서도와 시퀀스 및 클래스와 상태 도표 및 원형 차트 등을 만들 수 있습니다. 문법은 '+a(0,'Mermaid 공식 안내')+'를 참고하세요.')+'<h2>화면 배치</h2>'+p('가로 배치는 왼쪽에 코드와 오른쪽에 미리보기를 둡니다. 세로 배치는 아래에 코드와 위에 미리보기를 둡니다. '+a(1,'떠 있는 버튼')+'의 '+img(1,'편집 영역 위치 전환 버튼')+'으로 바꿀 수 있습니다.')+'<h2>편집과 미리보기</h2>'+p('코드를 바꾸면 도표가 자동으로 갱신됩니다. 미리보기 오른쪽 아래의 '+img(2,'확대와 축소 및 가운데 맞춤 버튼')+'을 이용하거나 마우스 휠로 확대 비율을 바꾸세요. 왼쪽 버튼을 누른 채 끌면 이동합니다. 코드를 수정해도 확대 비율과 위치는 유지됩니다. 코드와 미리보기 사이 경계를 끌면 영역 크기를 바꿀 수 있습니다.')+p(a(2,'떠 있는 버튼')+'에서 다음 기능을 사용할 수 있습니다.')+ul(['편집 영역을 왼쪽 또는 아래로 옮기기','편집 잠금 — 코드를 숨기고 도표를 크게 표시합니다. 잠금을 해제하면 다시 편집할 수 있습니다.',a(3,'이미지 참조')+' 복사 — 텍스트 노트에 도표 미리보기를 넣습니다.','SVG로 내보내기 — 확대해도 선명한 벡터 이미지로 저장합니다.','PNG로 내보내기 — 기본 배율의 일반 이미지로 저장합니다.'])+'<h2>문법 오류</h2>'+p('코드에 오류가 있으면 안내 영역에 표시됩니다. 오류가 해결되기 전까지 미리보기에는 마지막으로 정상 표시된 도표가 남습니다.'),
128:({a,img})=>'<h2>여러 위치에 놓기</h2>'+p('트리로 지식을 정리하다 보면 같은 노트를 여러 주제 아래에 두고 싶을 때가 있습니다. 예를 들어 기술 아래에 프로그래밍과 운영체제를 만들고 프로그래밍에는 Kotlin과 JavaScript를 두며 운영체제에는 Linux와 Windows를 둘 수 있습니다.')+p('여기에 '+a(0,'Bash')+'를 공부한 기록을 넣는다면 프로그래밍 언어이면서 Linux 셸이기도 하므로 한 위치만 고르기 어렵습니다.')+'<h2>복제의 의미</h2>'+p('Trilium은 같은 노트에 여러 상위 노트를 연결할 수 있습니다. 이를 복제라고 부릅니다. 별도의 사본을 만드는 것이 아니라 하나의 노트를 여러 위치에서 참조합니다. 따라서 한쪽에서 수정하면 다른 위치에서도 같은 내용을 보여 줍니다.')+p('Bash 노트를 프로그래밍 아래와 Linux 아래에 함께 놓으면 됩니다. 하위 노트도 같은 구조와 내용을 공유합니다.')+'<h3>만드는 방법</h3>'+p(img(0,'노트 복제 예시'))+p('오른쪽 클릭 메뉴나 링크 추가 창으로 만들 수 있습니다. <kbd>Ctrl</kbd>+<kbd>C</kbd>와 <kbd>Ctrl</kbd>+<kbd>V</kbd> '+a(1,'단축키')+'도 사용할 수 있습니다. 상단 리본의 노트 경로에서 연결된 모든 위치를 확인하세요. 트리 제목 옆의 별표는 다른 위치에도 있는 노트임을 뜻합니다.')+'<h2>복제된 노트 삭제</h2>'+p('다른 위치에도 있는 노트라면 현재 위치의 연결만 제거하고 노트 자체와 다른 연결은 유지합니다. 마지막 연결을 삭제하면 노트 자체를 삭제합니다. 하위 노트에도 같은 규칙을 적용하므로 다른 위치에 연결된 하위 노트는 남습니다.')
};
@@ -0,0 +1,12 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
129:({a,img})=>p('관계 지도는 '+a(0,'노트')+'와 노트 사이의 '+a(1,'관계')+'를 시각적으로 표시하는 유형입니다.')+'<h2>개발 과정 예제</h2>'+p(img(0,'개발 과정 관계 지도'))+p(img(1,'개발 과정 관계 지도 만들기'))+p('개발 과정이라는 노트를 만들고 관계 지도 유형으로 바꿉니다. 요구 사항과 개발 및 시험과 시연 노트를 차례로 만들고 지도에서 위치를 선택하세요. 노트 사이에 '+a(2,'관계')+'를 끌어서 연결한 뒤 이름을 지정합니다. 지도 항목은 실제 하위 노트이므로 열어 본문을 작성할 수도 있습니다. 연결선은 '+a(3,'관계 속성')+'입니다.')+'<h2>가족 관계 예제</h2>'+p('아래는 과거 영국 왕실 인물을 이용한 예제입니다. 인물의 호칭은 원문 작성 당시를 따릅니다.')+p(img(2,'가족 관계 지도'))+p(img(3,'가족 관계 지도 만드는 과정'))+p('빈 지도에 필립 공과 엘리자베스 2세 노트를 끌어 놓습니다. 두 노트에 지정된 <code>isPartnerOf</code> '+a(4,'관계')+'가 자동으로 표시됩니다. 양쪽 방향에 관계가 하나씩 있습니다.')+p('찰스 왕자 노트를 만들고 두 사람을 향한 <code>isChildOf</code> 관계를 추가합니다. '+a(5,'관계 정의')+'에서 '+a(6,'역방향 관계')+'를 설정했으므로 부모에서 자녀를 향하는 연결도 자동으로 생깁니다. 다이애나 비 노트를 만들고 배우자 관계를 연결하면 반대 방향도 함께 만들어집니다. 마지막으로 지도를 이동하고 확대 비율을 조정하세요.')+p('관계 정의는 가족 관계도의 하위 노트에 적용된 인물 템플릿에서 가져옵니다. '+a(7,'기본 예제')+'에서 직접 확인할 수 있습니다.')+'<h2>표시할 관계 선택</h2>'+p('<code>displayRelations</code> 라벨에 관계 이름을 쉼표로 구분해 지정하면 해당 관계만 표시합니다. 반대로 <code>hideRelations</code>에 이름을 지정하면 해당 관계를 제외합니다. 이 쉼표는 설정 문법의 구분자입니다.')+'<h2>관련 문서</h2>'+p(a(8,'노트 지도')+'도 비슷한 방식으로 노트 사이의 연결을 보여 줍니다.'),
130:({a,img})=>p('템플릿은 다른 노트의 기본 구조를 정하는 노트입니다. 템플릿을 적용받는 노트에는 다음 효과가 있습니다.')+ul(['템플릿의 모든 속성을 '+a(0,'상속')+'합니다. 상속 가능으로 표시하지 않은 속성도 대상 노트에는 적용됩니다. 대상 노트의 하위 노트에는 상속 가능한 속성만 이어집니다.','대상 노트의 본문이 비어 있으면 템플릿 본문을 복사합니다.','템플릿의 하위 노트를 그 아래 단계까지 별도의 사본으로 복사합니다.'])+'<h2>예제</h2>'+p('책 템플릿에는 출간 연도와 저자 같은 '+a(1,'주요 속성')+'을 넣고 주제와 결론 등의 독후감 틀을 작성할 수 있습니다. 인상 깊은 구절과 요약용 하위 노트도 함께 만들 수 있습니다.')+p(img(0,'책 템플릿'))+'<h2>템플릿 적용 노트</h2>'+p('메뉴에서 템플릿을 선택해 노트를 만들 수 있습니다.')+p(img(1,'하위 노트 템플릿 선택'))+p('선택 목록에 나오게 하려면 템플릿 노트에 <code>#template</code> 라벨을 지정하세요. 대상 노트를 연결하는 <code>~template</code> 관계와는 다릅니다. '+a(2,'작업 공간')+'에서만 표시하려면 <code>#workspaceTemplate</code>을 사용합니다.')+p('이미 만든 노트도 <code>~template</code> 관계를 추가하거나 바꿔 템플릿을 지정할 수 있습니다. 새 하위 노트의 기본 템플릿은 <code>~child:template</code>로 지정합니다. <code>~child:child:template</code>처럼 여러 단계에 적용할 수도 있습니다.')+p('복사 상속은 노트를 만드는 시점에 적용됩니다. 상위 노트의 설정을 나중에 바꿔도 기존 하위 노트에 복사되어 있는 단계별 설정이 자동으로 갱신되지는 않습니다.')+'<h2>추가 활용</h2>'+p('<code>#iconClass</code>와 <code>#cssClass</code>를 템플릿에 지정하면 관련 노트의 아이콘과 모양을 통일할 수 있습니다. '+a(3,'사용 예제')+'의 '+a(4,'관계 지도')+'와 '+a(5,'할 일 관리')+' 및 '+a(6,'날짜별 노트')+'를 참고하세요.')+p(a(7,'기본 노트 제목')+'의 제목 템플릿과 함께 사용할 수도 있습니다. 노트 템플릿에 <code>#titleTemplate</code>을 지정하세요.'),
131:({a,img})=>p('JPEG와 PNG 및 GIF 이미지를 저장하고 표시할 수 있습니다. 노트의 '+a(0,'첨부 파일')+'로 넣거나 별도 '+a(1,'이미지 노트')+'로 '+a(2,'노트 트리')+'에 둘 수 있습니다. 참조를 텍스트 노트에 붙이면 본문에도 표시할 수 있습니다.')+'<h2>이미지 넣기</h2>'+p('파일 탐색기에서 편집기로 이미지를 끌어 놓으세요.')+p(img(0,'이미지 끌어 놓기'))+p('블록 도구 모음에서 이미지 삽입을 선택할 수도 있습니다.')+p(img(1,'이미지 삽입 메뉴'))+p('웹의 이미지를 복사해 붙이면 이미지를 내려받아 본문에 포함합니다.')+'<h2>이미지 배치</h2>'+p('이미지를 누르면 설정 팝업이 나타납니다.')+p(img(2,'이미지 설정'))+[
['문장 안에 배치','글자처럼 문단 안에 놓습니다. 끌어서 옮기거나 잘라내고 붙여넣을 수 있습니다.'],
['가운데 배치','별도 블록으로 가운데에 표시하며 좌우에 글자가 흐르지 않습니다.'],
['글자로 둘러싸기','글자의 왼쪽이나 오른쪽에 이미지를 표시합니다.'],
['블록 정렬','별도 블록을 왼쪽이나 오른쪽으로 정렬합니다. 이미지 옆에는 글자가 흐르지 않습니다.']
].map(([t,s],i)=>'<h3>'+t+'</h3>'+p(img(3+i*2,t+' 버튼'))+p(img(4+i*2,t+' 예시'))+p(s)).join('')+'<h2>압축</h2>'+p('Trilium은 업로드한 이미지를 저장하기 전에 크기를 줄이고 압축하므로 품질이 달라질 수 있습니다. '+a(3,'설정')+' → 기타에서 기본 품질을 조정할 수 있습니다. 원본 해상도를 보존하려면 '+a(4,'노트 메뉴')+' → 파일 가져오기로 첨부하세요.')+'<h2>이미지를 나란히 놓기</h2>'+p('크기가 비슷하면 문장 안에 배치한 뒤 같은 줄로 끌어 놓으세요. 크기가 다르면 테두리를 숨긴 '+a(5,'표')+'의 각 칸에 넣을 수 있습니다.'),
132:({a,img,pre})=>'<h2>노트의 내부 형식</h2>'+p('본문을 저장하는 방식은 '+a(0,'노트 유형')+'마다 다릅니다.')+ul([a(1,'텍스트 노트')+'는 '+a(2,'CKEditor')+'가 사용하는 HTML로 저장합니다. 안내 상자처럼 Trilium 전용 요소도 있습니다.',a(3,'코드 노트')+'는 입력한 텍스트를 그대로 저장합니다.',a(4,'지리 지도')+'는 위치와 확대 비율 등의 JSON을 저장합니다.',a(5,'캔버스')+'는 '+a(6,'Excalidraw')+'의 JSON과 Trilium용 정보를 함께 저장합니다.',a(7,'마인드맵')+'은 '+a(8,'MindElixir')+'의 JSON 형식을 사용합니다.'])+p('일부 정보는 '+a(9,'첨부 파일')+'에 저장합니다. '+a(10,'캔버스')+'는 사용자 라이브러리를 첨부하며 '+a(11,'마인드맵')+' 등은 다른 노트에 포함하거나 공유할 때 사용할 SVG 미리보기도 첨부합니다.')+p('다음은 이 문서의 HTML 형식을 설명하는 예제입니다.')+pre(0).replace('Understanding the source code of the different notes','노트의 내부 형식').replace('Internally, the structure of the content of each note is different based on the&amp;nbsp;','본문을 저장하는 방식은 다음 유형에 따라 다릅니다.&amp;nbsp;').replace('Note Types','노트 유형')+'<h2>소스 보기</h2>'+p(a(12,'노트 메뉴')+'에서 노트 소스를 선택하면 새 탭에서 열립니다. 텍스트 노트처럼 일부 유형은 읽기 편하도록 들여쓰기를 적용합니다.')+p(img(0,'노트 소스 화면'))+'<h2>소스 수정</h2>'+p('소스 보기 화면에서 직접 편집할 수는 없습니다. 수정하려면 노트 유형을 일반 텍스트나 JSON 또는 HTML 코드로 바꾸고 경고를 확인한 뒤 본문을 고치세요. 작업 후에는 원래 유형으로 되돌립니다.')+p('형식을 잘못 수정하면 노트가 표시되지 않을 수 있습니다. 먼저 이전 버전을 저장하세요. 문제가 생기면 소스를 다시 수정하거나 이전 버전으로 복원합니다. 화면이 정상으로 돌아오지 않으면 새로고침이 필요할 수 있습니다.')
};
@@ -0,0 +1,7 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
133:({a,pre})=>p('간단한 위젯을 만들고 버튼을 눌렀을 때 메시지를 표시하는 예제입니다. 원문에서 누락된 HTML 템플릿을 아래 예제에 보완했습니다.')+'<h3>1. 기본 구조</h3>'+pre(0).replace('this.$widget = $("");','this.$widget = $(\'&lt;div id="my-widget"&gt;&lt;/div&gt;\');')+p('프런트엔드 JavaScript 코드 노트를 만들고 위 코드를 넣으세요. <code>#widget</code> '+a(0,'속성')+'을 '+a(1,'노트')+'에 지정한 뒤 창을 새로고침합니다.')+p('개발자 도구에서 <code>document.querySelector("#my-widget")</code>로 요소가 있는지 확인할 수 있습니다. 결과가 <code>null</code>이면 '+a(2,'노트')+'의 <code>#widget</code> '+a(3,'속성')+'과 코드 오류를 확인하세요.')+'<h3>2. 버튼 추가</h3>'+pre(1).replace('const template = ``;','const template = `&lt;div id="my-widget"&gt;&lt;button&gt;인사하기&lt;/button&gt;&lt;/div&gt;`;')+p('다시 불러오면 왼쪽 영역에 버튼이 나타납니다.')+'<h3>3. 모양과 위치</h3>'+p('Trilium에 포함된 '+a(4,'Boxicons')+'를 사용해 아이콘을 표시할 수 있습니다.')+pre(2).replace('const template = ``;','const template = `&lt;div id="my-widget"&gt;&lt;button title="인사하기" aria-label="인사하기"&gt;&lt;i class="bx bxs-magic-wand"&gt;&lt;/i&gt;&lt;/button&gt;&lt;/div&gt;`;')+p('CSS로 왼쪽 아래에 배치합니다.')+pre(3)+'<h3>4. 클릭 동작</h3>'+p(a(5,'스크립트 API')+'의 <code>api.showMessage</code>를 사용합니다.')+pre(4).replace('Hello World!','안녕하세요!')+p('새로고침한 뒤 버튼을 누르면 안녕하세요!라는 메시지가 나타납니다.'),
134:({a})=>'<aside class="admonition warning">'+p('더 이상 제공되거나 정상 작동하지 않는 Evernote Legacy를 경유하는 과거의 이전 방법입니다. 현재 사용할 수 있는 절차로 안내하는 문서가 아닙니다.')+'</aside><h2>OneNote 자료 준비</h2>'+ul(['OneNote 태그는 이미지로 가져와질 수 있으므로 필요하면 이모지로 바꿉니다.','제목 서식을 사용하고 불필요한 공백을 정리합니다.','매우 긴 페이지는 짧은 노트와 하위 노트로 나누는 편이 편리합니다.','번호 목록 사이의 불필요한 빈 줄을 없앱니다. 가져온 뒤 번호가 다시 1부터 시작하는 문제를 줄일 수 있습니다.'])+'<h2>과거의 이전 절차</h2>'+p(a(0,'Evernote Legacy 보관 문서')+'를 참고한 방법입니다. 당시에는 계정이 필요했지만 인터넷 연결 없이 가져올 수 있었으며 Evernote 서버에 노트를 동기화하지 않는 방식으로 설명되었습니다. 파일 → 가져오기 → OneNote에서 전자 필기장과 구역을 선택했습니다.')+p('여러 구역을 한 번에 가져오면 폴더가 합쳐질 수 있습니다. 순서는 유지되므로 이후 다시 나눌 수 있습니다. 가져온 전자 필기장을 오른쪽 클릭해 노트 내보내기를 선택하고 ENEX로 저장합니다.')+'<h3>ENEX 정리</h3>'+p('OneNote 페이지 머리말을 제거하려면 텍스트 편집기에서 정규식 <code>.&lt;div.*&gt;&lt;h1</code>을 찾아 <code>&lt;h1</code>로 바꾸는 방법이 원문에 소개되어 있습니다. 원본을 보관하고 바뀌는 범위를 확인하세요.')+'<h3>Trilium으로 가져오기</h3>'+p('상위 노트를 오른쪽 클릭해 가져오기를 선택하고 ENEX 파일을 지정합니다. 큰 파일은 몇 분이 걸릴 수 있습니다. 파일마다 반복하세요.')+'<h2>가져온 뒤 확인할 내용</h2>'+ul(['가운데 정렬이 왼쪽 정렬로 바뀔 수 있습니다.','OneNote 내부 링크는 자동으로 Trilium 노트에 연결되지 않습니다. onenote://를 찾아 대상 노트로 다시 연결해야 합니다. 원문의 문단 연결 관련 제한은 당시 버전 기준입니다.','글자색과 강조 및 일반 서식은 대체로 유지됩니다.','기존 수정 이력은 가져오지 못합니다. 이후 수정은 Trilium에서 기록합니다.','노트 순서는 유지되지만 하위 구조는 다시 정리해야 할 수 있습니다.','OneNote 구역은 Evernote 태그가 되어 Trilium 속성으로 들어옵니다. 필요하지 않으면 Evernote 내보내기에서 제외합니다.','Created with OneNote라는 문구가 필요 없으면 가져오기 전에 ENEX에서 찾아 지울 수 있습니다.','일부 링크는 클릭할 수 없는 상태로 들어올 수 있습니다.','원문에서는 파일과 화면 캡처 및 첨부 파일이 보존된다고 설명합니다.']),
135:({a,pre})=>p('이 문서는 Trilium 사용 중 발생하는 문제를 해결하는 기본 절차입니다.')+'<h2>먼저 다시 불러오기</h2>'+p('화면 문제는 <kbd>Ctrl</kbd>+<kbd>R</kbd>로 프런트엔드를 다시 불러오면 해결될 수 있습니다. 계속되거나 백엔드 문제라면 앱 전체를 다시 시작하세요. 데스크톱 앱은 닫았다 다시 열고 Docker는 컨테이너를 재시작합니다.')+'<h2>특정 노트를 열 때 종료되는 경우</h2>'+p('잘못된 스크립트가 있는 노트를 시작할 때 다시 열면 오류가 반복될 수 있습니다. <code>TRILIUM_START_NOTE_ID</code>로 처음 열 노트를 지정해 탭을 초기화할 수 있습니다.')+pre(0)+'<h2>시작 스크립트 문제</h2>'+p('시작 스크립트나 '+a(0,'사용자 위젯')+' 때문에 실행되지 않으면 안전 모드로 시작하세요.')+pre(1)+p('배포판에 따라 <code>trilium-safe-mode.bat</code>나 <code>trilium-safe-mode.sh</code>가 제공됩니다. 실행한 뒤 원인이 된 노트를 찾아 수정하거나 제거하세요.')+'<h2>일관성 검사</h2>'+p('Trilium은 노트의 상위 연결 등 데이터베이스의 논리 구조를 주기적으로 확인합니다. 오류 알림이 나오면 문제를 보고하고 필요할 경우 '+a(1,'익명화한 데이터베이스')+'를 제공하세요.')+'<h2>백업 복원</h2>'+p('문제가 심각하다면 '+a(2,'백업에서 복원')+'할 수 있습니다.')+'<h2>비밀번호를 잊은 경우</h2>'+p('보호된 노트는 비밀번호 없이 복구할 수 없습니다. 아래는 보호하지 않은 노트에 다시 접근하기 위한 원문의 복구 절차입니다. '+a(3,'데이터베이스')+'가 있는 '+a(4,'데이터 폴더')+'를 먼저 백업하고 앱을 종료한 뒤 '+a(5,'SQLite 편집기')+'로 document.db를 엽니다.')+pre(2)+p('변경 사항을 저장하면 로그인 비밀번호가 <code>password</code>로 바뀝니다. 이 절차로 기존 보호 노트가 복구되는 것은 아닙니다. 접근 가능한 노트를 내보내 새 데이터베이스로 옮기거나 기존 DB를 계속 사용한다면 설정에서 즉시 새 비밀번호를 지정하세요.')+'<h2>오류 보고</h2>'+p(a(6,'GitHub 문제 보고')+'에 발생 상황을 적고 '+a(7,'오류 로그')+' 안내에 따라 필요한 정보를 함께 제공하세요.'),
136:({a})=>p('다중 인증은 비밀번호 외에 추가 확인 수단을 요구합니다. 비밀번호가 유출되더라도 다른 사람이 접속하기 어렵게 합니다. 이 버전에서는 OpenID와 TOTP를 동시에 사용할 수 없습니다.')+'<h2>인증 방식</h2>'+p('OpenID는 Google 같은 외부 서비스 계정으로 신원을 확인하는 방식입니다. TOTP는 인증 앱에서 짧은 시간마다 바뀌는 일회용 코드를 생성하는 방식입니다. 일반적으로 30초마다 코드가 바뀝니다.')+'<h2>설정</h2>'+p('다중 인증은 서버 인스턴스에서 설정합니다. 원문 작성 당시에는 다중 인증이 켜진 서버와 새 데스크톱 앱의 최초 동기화에 문제가 있어 최초 동기화 동안만 끄는 임시 방법을 안내했습니다. 이는 해당 버전의 제약에 관한 설명입니다.')+'<h3>TOTP</h3>'+ul(['메뉴 → 설정 → 다중 인증을 엽니다.','다중 인증 사용을 켜고 시간 기반 일회용 비밀번호 방식을 선택합니다.','TOTP 비밀 키 생성 버튼을 누릅니다.','생성한 키를 사용할 인증 앱에 등록합니다.','복구 코드를 생성해 안전한 곳에 보관합니다.','인증 앱을 사용할 수 없을 때 복구 코드를 한 번씩 사용할 수 있습니다. 사용한 코드는 설정에 사용 시각이 기록됩니다.','설정을 마친 뒤 새로고침하면 다시 로그인해야 합니다.'])+'<h3>OpenID</h3>'+p('먼저 인증 제공자에 애플리케이션을 등록합니다. Google은 '+a(0,'공식 OpenID 연결 안내')+'를 참고하세요.')+p('<code>config.ini</code>에 <code>oauthBaseUrl</code>과 <code>oauthClientId</code> 및 <code>oauthClientSecret</code>을 지정합니다. '+a(1,'설정 안내')+'를 참고하세요. 환경 변수 <code>TRILIUM_OAUTH_BASE_URL</code>과 <code>TRILIUM_OAUTH_CLIENT_ID</code> 및 <code>TRILIUM_OAUTH_CLIENT_SECRET</code>도 사용할 수 있습니다.')+p('서버를 다시 시작한 뒤 설정 → 다중 인증에서 사용을 켜고 OAuth/OpenID 방식을 선택하세요. 페이지를 새로고침한 뒤 제공자 계정으로 로그인합니다.')+p('기본 제공자는 Google입니다. 다른 제공자는 <code>oauthIssuerBaseUrl</code>과 <code>oauthIssuerName</code> 및 <code>oauthIssuerIcon</code>으로 지정합니다. 대응하는 환경 변수는 <code>TRILIUM_OAUTH_ISSUER_BASE_URL</code>과 <code>TRILIUM_OAUTH_ISSUER_NAME</code> 및 <code>TRILIUM_OAUTH_ISSUER_ICON</code>입니다. 이름과 아이콘은 로그인 화면의 제공자 표시에도 필요합니다.')
};
@@ -0,0 +1,7 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
137:({a})=>p('사용자가 만들어 공개한 테마 목록입니다.')+'<h2>기존 테마 기반</h2>'+p('원래 Trilium 테마를 바탕으로 만든 자료이며 새 버전과의 호환성은 각 프로젝트에서 확인해야 합니다.')+'<table><thead><tr><th>테마</th><th>제작자</th></tr></thead><tbody>'+[['미드나이트 (Midnight)','tobealive'],['EOTE','tobealive'],['Trilium 테마 모음','Abourass'],['머티리얼 다크 (MaterialDark)','ZMonk91'],['밝은 슬레이트 회색 (lightslategray)','jaroet'],['멜론 4 (melon-4)','raphwriter'],['네온 다크 (Neon_Dark)','Engr-AllanG'],['코더 다크 (Coder_Dark)','Engr-AllanG'],['벨벳 (velvet)','idelem'],['다크 플러스 (Dark Plus)','SADAVA'],['솔라라이즈드 (Solarized)','WKSu'],['노르드 (Nord)','en3r0'],['베어 노트 밝은 테마','AllanZyne'],['베어 노트 어두운 테마','AllanZyne'],['하츠네 미쿠','Sebiann'],['미드나이트 (Midnight)','cwilliams5'],['파랑 — 밝은 테마','SiriusXT'],['파랑 — 어두운 테마','SiriusXT']].map(([t,n],i)=>'<tr><td>'+a(i*2,t)+'</td><td>'+a(i*2+1,n)+'</td></tr>').join('')+'</tbody></table>'+p('만든 테마를 목록에 소개하려면 '+a(36,'작품 소개 게시판')+'에 글을 남기세요.'),
138:({a,img})=>p(a(0,'서식 도구 모음')+'의 '+img(0,'삽입 메뉴 버튼')+'을 누르면 기호와 수식 및 구분선 등을 넣을 수 있습니다.')+'<h2>북마크</h2>'+p(a(1,'북마크 안내')+'를 참고하세요.')+'<h2>이모지</h2>'+p(img(1,'이모지 선택기'))+p('범주와 이모지를 선택하면 유니코드 문자로 삽입합니다. 이름으로 검색하고 오른쪽 선택 상자에서 피부색을 고를 수 있습니다. 이 한글화 적용본은 한국어 이름과 검색어를 제공합니다. <code>:</code> 뒤에 단축 이름을 입력하면 후보 목록이 나타납니다. 화살표로 선택하고 Enter로 넣으세요.')+p(img(2,'이모지 자동 완성'))+'<h2>기호</h2>'+p(img(3,'기호 선택 창'))+p(img(4,'기호 버튼')+'을 누르면 키보드로 입력하기 어려운 문자 목록이 열립니다. 문자를 누르면 현재 위치에 들어갑니다. 창의 제목 부분을 끌어 옮기거나 범주로 목록을 좁힐 수 있습니다.')+'<h2>수식</h2>'+p(a(2,'수식 안내')+'를 참고하세요.')+'<h2>Mermaid 도표</h2>'+p(img(5,'Mermaid 삽입 버튼')+'으로 본문에 간단한 도표를 넣습니다. 전용 '+a(3,'Mermaid 노트')+'와 비슷한 기능입니다. 복잡한 도표는 전용 노트를 만들고 '+a(4,'노트 포함')+'으로 넣으세요.')+p(img(6,'본문 안의 Mermaid 도표'))+'<h2>가로 구분선</h2>'+p(a(5,'서식 도구 모음')+'의 '+img(7,'가로 구분선 버튼')+'을 누르거나 <code>---</code>를 입력하세요.')+p(img(8,'가로 구분선'))+'<h2>페이지 나누기</h2>'+p(img(9,'페이지 나누기 표시'))+p('인쇄하거나 '+a(6,'PDF로 내보낼 때')+' 다음 문단이나 표와 이미지를 새 페이지에서 시작하게 합니다. 편집기에는 페이지 나누기라고 표시되지만 이 문구는 인쇄되지 않습니다.')+p(img(10,'페이지 나누기 버튼')+'으로 삽입합니다. 여러 곳에 넣으려면 먼저 만든 페이지 나누기를 선택해 복사한 뒤 필요한 위치에 붙여넣으세요.'),
139:({a,pre})=>p('서버에 설치하면 여러 기기에서 '+a(0,'동기화')+'하거나 웹브라우저로 접속할 수 있습니다.')+'<h2>설치 방식</h2>'+ul([a(1,'Docker 설치')+' — AMD64와 ARM용 이미지를 제공합니다.',a(2,'서버 패키지 설치'),a(3,'PikaPods 관리형 호스팅'),a(4,'수동 설치'),a(5,'Kubernetes'),a(6,'Cloudron'),a(7,'HomelabOS'),a(8,'NixOS 모듈')])+p('서버 버전에는 일반 웹 화면과 '+a(9,'모바일 화면')+'이 포함됩니다.')+'<h2>설정</h2>'+p('포트와 '+a(10,'TLS')+' 등은 기본적으로 '+a(11,'데이터 폴더')+'의 <code>config.ini</code>에서 설정합니다. 새 설정 파일이 필요하다면 제공된 <code>config-sample.ini</code>를 참고하세요. 기존 파일을 덮어쓰지 않도록 확인합니다. '+a(12,'환경 변수')+'도 사용할 수 있습니다.')+'<h3>데이터 위치</h3>'+p('설정과 '+a(13,'데이터베이스')+' 등은 '+a(14,'데이터 폴더')+'에 있습니다. 위치는 다음처럼 지정할 수 있습니다.')+pre(0)+'<h3>업로드 제한</h3>'+p('이 버전의 기본 제한은 250MB입니다. 다음 환경 변수는 제한을 해제합니다.')+pre(1)+p('제한을 유지하면서 늘리려면 다음처럼 최대 크기를 지정하세요.')+pre(2)+'<h3>인증</h3>'+p(a(15,'인증 설정')+'을 참고하세요.')+'<h2>역방향 프록시</h2><h3>Nginx</h3>'+p('다음은 요청을 Trilium으로 전달하는 설정 예시입니다.')+pre(3)+p('Nginx 자체의 본문 크기 제한도 별도로 적용됩니다. 다음은 제한을 해제하는 예시이며 필요한 최대 크기를 지정할 수도 있습니다.')+pre(4).replace('# Set to 0 for unlimited. Default is 1M.','# 0은 제한 없음입니다. 기본값은 1M입니다.')+'<h3>Apache</h3>'+p(a(16,'Apache 프록시 설정')+'을 참고하세요.'),
140:({a,img})=>'<h2>위치</h2>'+p('선택한 '+a(0,'화면 배치')+'에 따라 왼쪽에 세로로 표시하거나 위쪽에 가로로 표시합니다.')+'<h2>용어</h2>'+ul(['실행 버튼 — 실행 도구 모음에 배치하는 버튼입니다.','사용 가능한 실행 버튼 — 현재 숨겨져 있지만 추가할 수 있는 버튼입니다.','표시 중인 실행 버튼 — 현재 도구 모음에 있는 버튼입니다.'])+'<h2>설정 열기</h2>'+p('도구 모음의 빈 곳을 오른쪽 클릭하거나 '+a(1,'전체 메뉴')+'에서 실행 도구 모음 설정을 선택하세요. 새 탭의 '+a(2,'노트 트리')+'에 버튼 목록이 나타납니다.')+p(img(0,'실행 도구 모음 설정'))+p('사용 가능한 실행 버튼과 표시 중인 실행 버튼을 펼쳐 확인하세요. 항목의 오른쪽 클릭 메뉴로 다른 목록으로 이동하거나 끌어서 옮길 수 있습니다. 트리에서 순서를 바꾸면 도구 모음에도 반영됩니다. 키보드 조작은 '+a(3,'노트 트리 안내')+'를 참고하세요.')+'<h2>꾸미기와 초기화</h2>'+p('제목과 '+a(4,'아이콘')+'은 일반 노트처럼 바꿀 수 있습니다. 버튼이나 도구 모음 전체를 오른쪽 클릭하고 초기화를 선택하면 해당 부분을 기본 구성으로 되돌립니다.')+'<h3>새 버튼 만들기</h3>'+p('두 목록 중 하나를 오른쪽 클릭해 다음 유형을 선택하세요.')+ul(['노트 실행 버튼 — <code>target</code>에 열 노트를 지정합니다. <code>hoistedNote</code>로 '+a(5,'하위 트리 표시 범위')+'를 지정할 수 있으며 <code>keyboardShortcut</code>으로 단축키를 정할 수 있습니다.','스크립트 실행 버튼 — <code>script</code>에 실행할 '+a(6,'스크립트')+'를 지정하고 필요하면 단축키를 설정합니다.','사용자 위젯 — 버튼 영역에 직접 만든 위젯을 표시합니다. '+a(7,'위젯 기본 안내')+'를 참고하세요.','간격 — 버튼 사이에 빈 공간을 넣어 구분합니다.'])+p('각 항목은 미리 정의된 '+a(8,'주요 속성')+'으로 설정합니다.')
};
@@ -0,0 +1,9 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
141:({a,img})=>p('민감한 자료를 보관할 때 노트 보호 기능을 사용할 수 있습니다. 보호된 노트는 암호화되므로 '+a(0,'데이터베이스')+' 파일만으로 본문을 읽을 수 없습니다.')+p('보호 노트를 열려면 비밀번호로 보호 세션을 시작해야 합니다. 기본적으로 10분 동안 사용하지 않으면 세션이 끝납니다. 보호 노트를 편집하는 동안에는 시간이 연장되며 일반 노트로 이동하면 유휴 시간이 계산됩니다.')+p('보호 기능은 내용을 숨기는 기능입니다. 보호 세션 밖에서도 노트를 옮기거나 삭제할 수 있으므로 삭제 방지 기능과는 다릅니다.')+'<h2>보호 설정</h2>'+p('기본적으로 노트는 보호되지 않습니다. 제목 옆 방패 아이콘으로 설정하세요.')+p(img(0,'보호 노트 설정과 열기'))+'<h2>암호화 범위</h2>'+p('제목과 본문 및 이미지와 첨부 파일은 암호화합니다. 트리 구조와 수정 시각 같은 메타데이터 및 '+a(1,'속성')+'은 암호화하지 않습니다. 보호 노트가 있다는 사실과 위치는 보일 수 있습니다.')+'<h2>암호화 과정</h2>'+p('다음은 이 버전의 원문에 설명된 처리 과정입니다.')+ul(['입력한 비밀번호를 검증용 '+a(2,'scrypt')+'와 '+a(3,'솔트')+'로 확인합니다.','다른 솔트로 비밀번호를 다시 처리해 데이터 키를 여는 값을 만듭니다. scrypt는 비밀번호 추측 비용을 높이는 '+a(4,'키 강화')+'에 사용됩니다.','생성한 값으로 실제 데이터 암호화 키를 복호화합니다. 이 키는 '+a(5,'AES-128')+'과 무작위 '+a(6,'초기화 벡터')+'를 사용해 암호화되어 있습니다. 데이터 키는 '+a(7,'데이터베이스')+' 초기화 시 무작위로 만들며 비밀번호를 바꿀 때는 데이터 키를 다시 암호화합니다.','데이터 키로 제목과 본문을 복호화합니다. 원문은 AES-128의 '+a(8,'CBC 모드')+'를 사용하며 매 암호화 작업마다 다른 초기화 벡터를 생성해 암호문과 함께 저장한다고 설명합니다.'])+'<h2>공유</h2>'+p('보호 노트는 일반 노트처럼 공개 공유할 수 없습니다. 올바른 비밀번호로 보호 세션을 시작해야 내용을 볼 수 있습니다.'),
142:({a,pre})=>p(a(0,'스크립트')+'로 공개 REST 요청을 처리할 수 있습니다. 외부 서비스에서 제목과 본문을 보내 노트를 만드는 등의 연동에 사용합니다.')+'<h2>외부 요청으로 노트 만들기</h2>'+p('다음은 백엔드 JavaScript '+a(1,'코드 노트')+'예제입니다. 예시 비밀값을 그대로 공개 서비스에 사용하면 안 됩니다.')+pre(0).replace('// notes must be saved somewhere in the tree hierarchy specified by a parent note.','// 노트를 저장할 상위 노트를 지정합니다.').replace('// This is defined by a relation from this code note to the "target" parent note','// 이 코드 노트의 관계로 대상 상위 노트를 연결합니다.').replace('// alternetively you can just use constant noteId for simplicity (get that from "Note Info" dialog of the desired parent note)','// 간단한 예제에서는 노트 정보에서 확인한 고정 ID를 사용할 수도 있습니다.')+p('<code>#customRequestHandler=create-note</code> 라벨과 저장할 위치를 가리키는 <code>~targetNote</code> 관계를 지정합니다.')+'<h3>요청 예시</h3>'+pre(1).replace('"title": "hello"','"title": "인사"').replace('"content": "world"','"content": "안녕하세요."').replace(/\++(?=<\/code>)/,'')+p('<code>/custom</code> 아래 요청은 <code>customRequestHandler</code> '+a(2,'라벨')+'이 있는 노트에서 처리기를 찾습니다. 라벨 값은 경로에 대응하는 정규식입니다. 찾은 스크립트에는 Express의 '+a(3,'요청 객체')+'와 '+a(4,'응답 객체')+'가 <code>api.req</code>와 <code>api.res</code>로 제공됩니다.')+p('이 경로는 기본 인증을 자동으로 요구하지 않습니다. 처리기에서 인증을 구현해야 합니다. 예제는 POST 방식과 비밀값을 확인한 뒤 '+a(5,'스크립트 API')+'로 노트를 만듭니다.')+'<h2>파일 제공</h2>'+p('파일만 제공하려면 <code>customResourceProvider</code> 라벨에 경로 정규식을 지정할 수 있습니다. '+a(6,'사용자 지정 리소스 제공')+'을 참고하세요.')+'<h2>고급 사용</h2>'+p('요청과 응답 객체의 기능은 '+a(7,'Express 공식 문서')+'에서 확인할 수 있습니다.')+'<h3>경로 매개변수</h3>'+pre(2)+p('마지막 숫자처럼 바뀌는 부분을 정규식으로 받을 수 있습니다.')+pre(3)+p('괄호로 묶은 일치 결과는 <code>api.pathParams</code>에 들어갑니다.')+pre(4)+p('<code>?noteId=123</code> 같은 쿼리 매개변수는 <code>req.query.noteId</code>로 읽습니다.'),
143:({a,img})=>'<h2>외부 링크</h2>'+p(a(0,'위키백과의 남중국해 문서')+'처럼 외부 웹페이지로 연결하는 링크입니다. '+a(1,'서식 도구 모음')+'의 '+img(0,'링크 버튼')+'이나 <kbd>Ctrl</kbd>+<kbd>K</kbd>로 주소를 입력하고 Enter로 확정하세요. 주소를 붙여넣고 공백을 입력해 자동으로 만들 수도 있습니다.')+p('다른 글자로 표시하려면 먼저 글자를 입력하고 선택한 뒤 링크 주소를 지정하세요. 선택한 글자 위에 주소를 붙여넣는 방법도 있습니다.')+p('표시 글자는 나중에 바꿀 수 있습니다. 링크를 누른 뒤 '+img(1,'링크 편집 버튼')+'으로 주소를 수정하거나 '+img(2,'연결 해제 버튼')+'으로 링크를 없앱니다. 외부 링크를 두 번 클릭하거나 오른쪽 클릭 메뉴에서 새 탭으로 열기를 선택하면 이동합니다.')+'<h2>노트 사이의 링크</h2>'+p('<kbd>Ctrl</kbd>+<kbd>L</kbd>이나 '+a(2,'서식 도구 모음')+'의 '+img(3,'노트 링크 버튼')+'을 누르고 대상 노트를 선택합니다. 없는 제목을 입력하고 하위 노트 만들기 및 연결을 선택해 새로 만들 수도 있습니다.')+ul(['참조 링크 — 대상 노트의 제목과 아이콘을 표시합니다. 제목을 직접 바꿀 수 없으며 대상 노트의 제목이 바뀌면 자동 반영됩니다.','일반 링크 — 대상 노트와 다른 표시 글자를 자유롭게 지정할 수 있습니다.'])+p('두 번 클릭하면 노트를 엽니다. 마우스를 올리면 읽기 전용 미리보기를 확인할 수 있습니다.')+'<h2>붙여넣기</h2>'+p(a(3,'노트 트리')+'에서 노트를 복사한 뒤 본문에 붙이면 참조 링크가 됩니다. 글자를 선택한 상태에서 붙이면 일반 링크가 됩니다. 외부 주소도 글자 위에 붙여 링크로 바꿀 수 있습니다. 서식 있는 링크를 복사했다면 원래 표시 글자와 주소가 유지됩니다.')+'<h2>입력 중 연결</h2>'+p('<code>@</code> 뒤에 노트 제목 일부를 입력하면 자동 완성이 나타납니다. 원하는 노트를 선택하고 Enter를 누르세요.')+'<h2>노트 지도</h2>'+p('들어오는 링크와 나가는 링크는 '+a(4,'노트 지도')+'에서 시각적으로 확인할 수 있습니다.'),
144:({a})=>p(a(0,'스크립트')+'는 이벤트에 따라 실행할 수 있습니다. 노트에 관계로 연결하는 항목별 이벤트는 백엔드 JavaScript 코드 노트를 대상으로 합니다.')+'<h2>전체 이벤트</h2>'+p('<code>run</code> 라벨에 실행 시점을 지정합니다.')+ul(['<code>frontendStartup</code> — 일반 프런트엔드를 시작하거나 새로고침할 때 실행합니다.','<code>mobileStartup</code> — 모바일 프런트엔드를 시작하거나 새로고침할 때 실행합니다.','<code>backendStartup</code> — 백엔드를 시작할 때 실행합니다.','<code>hourly</code> — 백엔드에서 매시간 실행합니다. <code>runAtHour</code>로 특정 시각만 지정할 수 있습니다.','<code>daily</code> — 백엔드에서 하루에 한 번 실행합니다.'])+p('<code>runOnInstance</code>로 특정 '+a(1,'Trilium 인스턴스')+'에서만 실행하도록 지정할 수 있습니다. <code>runAtHour</code>는 <code>#run=hourly</code>와 함께 사용하며 여러 번 지정하면 하루에 여러 시각을 선택할 수 있습니다.')+'<h2>항목별 이벤트</h2>'+p('다음 '+a(2,'관계')+'를 노트에 직접 지정하거나 상속하면 관련 작업이 발생할 때 스크립트를 실행합니다.')+'<table><thead><tr><th>관계</th><th>실행 시점</th></tr></thead><tbody>'+[
['runOnNoteCreation','백엔드에서 노트를 만들 때입니다. 하위 트리의 모든 새 노트에 적용하려면 상위 노트에 관계를 지정하고 상속을 켭니다.'],['runOnChildNoteCreation','이 관계가 있는 노트 바로 아래에 새 노트를 만들 때입니다.'],['runOnNoteTitleChange','제목을 바꿀 때입니다. 노트 생성도 포함합니다.'],['runOnNoteContentChange','본문을 바꿀 때입니다. 노트 생성도 포함합니다.'],['runOnNoteChange','노트 속성을 변경할 때입니다. 생성은 포함하지만 본문 변경은 포함하지 않습니다.'],['runOnNoteDeletion','노트를 삭제할 때입니다.'],['runOnBranchCreation','상위 노트와 하위 노트 사이의 가지를 만들 때입니다. 복제나 이동 과정에서도 발생합니다.'],['runOnBranchChange','가지를 수정할 때입니다. 0.62부터 지원합니다.'],['runOnBranchDeletion','가지를 삭제할 때입니다. 이동할 때 기존 위치의 연결을 제거하는 경우도 포함합니다.'],['runOnAttributeCreation','해당 노트에 속성을 만들 때입니다.'],['runOnAttributeChange','해당 노트의 속성을 바꾸거나 삭제할 때입니다.']
].map(([k,v])=>'<tr><td><code>'+k+'</code></td><td>'+v+'</td></tr>').join('')+'</tbody></table>'
};
@@ -0,0 +1,10 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
145:({a,img,pre})=>p('측정 지표 API는 Prometheus 같은 외부 모니터링 시스템에 Trilium 상태를 제공합니다.')+'<h2>접속</h2>'+p('<code>GET /etapi/metrics</code>로 요청합니다. ETAPI 토큰이 필요하며 기본 응답은 Prometheus 텍스트 형식입니다.')+pre(0).replace('# Get an ETAPI token','# ETAPI 토큰 발급 예시')+'<h2>사용 예시</h2>'+pre(1)+p('다음과 같은 형식으로 응답합니다. 지표 이름과 형식은 연동을 위해 유지합니다.')+pre(2).replace('Trilium instance information','Trilium 인스턴스 정보').replace('Total number of notes including deleted','삭제된 노트를 포함한 전체 노트 수')+p('JSON으로 받으려면 다음처럼 요청합니다.')+pre(3)+'<h2>제공 지표</h2>'+ul([
'<code>trilium_info</code> — 버전과 빌드 정보',...[
['notes_total','삭제된 노트를 포함한 전체 노트 수'],['notes_deleted','삭제된 노트 수'],['notes_active','활성 노트 수'],['notes_protected','보호 노트 수'],['attachments_total','전체 첨부 파일 수'],['attachments_active','활성 첨부 파일 수'],['revisions_total','수정 이력 수'],['branches_total','활성 가지 수'],['attributes_total','활성 속성 수'],['blobs_total','본문 데이터 레코드 수'],['etapi_tokens_total','활성 ETAPI 토큰 수'],['embeddings_total','노트 임베딩 수'],['notes_by_type','유형별 노트 수. type 라벨로 구분합니다.'],['attachments_by_type','MIME 유형별 첨부 파일 수. mime_type 라벨로 구분합니다.'],['database_size_bytes','데이터베이스 크기. 바이트 단위입니다.'],['oldest_note_timestamp','가장 오래된 노트의 시각'],['newest_note_timestamp','가장 최근 노트의 시각'],['last_modified_timestamp','마지막 수정 시각']
].map(([k,v])=>'<code>trilium_'+k+'</code> — '+v)])+'<h2>Prometheus 설정</h2>'+p('<code>prometheus.yml</code>에 추가할 예시입니다.')+pre(4)+'<h2>오류 응답</h2>'+p('400은 지원하지 않는 format 값입니다. 401은 토큰이 없거나 유효하지 않다는 뜻이며 500은 서버 내부 오류입니다.')+'<h2>Grafana 대시보드</h2>'+p(img(0,'Trilium 모니터링 대시보드'))+p(a(0,'Grafana 대시보드 JSON')+'을 가져오기 화면에 입력하세요.')+p(img(1,'대시보드 가져오기 메뉴'))+p('JSON을 붙여넣고 불러오기를 누릅니다.')+p(img(2,'대시보드 JSON 입력')),
146:({a})=>'<h2>프런트엔드 API</h2>'+p('일반 스크립트는 현재 앱과 노트의 문맥에서 실행됩니다. 위젯은 객체를 내보내 화면 구성 요소로 사용합니다. 두 경우 모두 전역 변수 <code>api</code>로 프런트엔드 API를 사용할 수 있습니다. '+a(0,'스크립트 API')+'를 참고하세요.')+'<h2>스크립트</h2>'+p('실행 버튼으로 실행하거나 '+a(1,'속성')+'으로 실행 시점을 지정할 수 있습니다.')+'<h3>전체 이벤트</h3>'+p('<code>#run</code> 값으로 <code>frontendStartup</code>은 일반 화면 시작을 지정하며 <code>mobileStartup</code>은 모바일 화면 시작을 지정합니다. <code>backendStartup</code>은 백엔드 시작입니다. <code>hourly</code>와 <code>daily</code>는 백엔드에서 매시간 또는 매일 실행합니다.')+'<h3>항목별 이벤트</h3>'+p('다음 '+a(2,'관계')+'로 스크립트를 연결하거나 상속하면 해당 노트에서 이벤트가 발생할 때 실행합니다. 이 이벤트는 백엔드 스크립트를 대상으로 합니다.')+ul([['runOnNoteCreation','노트 생성'],['runOnNoteTitleChange','제목 변경. 생성 포함'],['runOnNoteContentChange','본문 변경. 생성 포함'],['runOnNoteChange','노트 변경. 생성 포함'],['runOnNoteDeletion','노트 삭제'],['runOnBranchCreation','복제나 이동 등에 따른 가지 생성'],['runOnBranchDeletion','이동 등에 따른 기존 가지 삭제'],['runOnChildNoteCreation','직접 하위 노트 생성'],['runOnAttributeCreation','속성 생성'],['runOnAttributeChange','속성 변경']].map(([k,v])=>'<code>'+k+'</code> — '+v))+'<h2>위젯</h2>'+p(a(3,'BasicWidget')+'이나 그 하위 클래스를 확장합니다. 새 인스턴스를 <code>module.exports</code>에 지정하고 <code>parentWidget</code>과 정수 <code>position</code>으로 위치를 정합니다. 코드 노트에는 <code>#widget</code> 라벨이 필요합니다.')+p(a(4,'BasicWidget')+'과 '+a(5,'NoteContextAwareWidget')+'은 <code>doRender()</code>에서 <code>this.$widget</code>을 만들고 반환합니다. '+a(6,'RightPanelWidget')+'은 이 처리를 제공하므로 <code>doRenderBody()</code>에서 본문을 반환합니다.')+'<h3>배치 영역</h3>'+ul(['<code>left-pane</code> — 노트 트리가 있는 왼쪽 영역','<code>center-pane</code> — 노트와 분할 보기가 있는 가운데 영역','<code>note-detail-pane</code> — 각 노트와 함께 표시하는 영역. 분할 시 여러 번 나타날 수 있습니다.','<code>right-pane</code> — 열린 노트의 오른쪽 영역'])+p(a(7,'위젯 기본 예제')+'에서 구현 과정을 확인하세요.'),
147:({a,img})=>'<h2>제목</h2>'+p(img(0,'제목 서식 선택'))+p('본문은 제목 2~6으로 구분할 수 있습니다. 제목 1은 노트 제목에 사용합니다. 일반 문단으로 되돌리려면 본문을 선택하세요. <code>##</code>부터 <code>######</code>까지 입력해 제목 2~6을 만들 수도 있습니다.')+'<h2>글자 크기</h2>'+p(img(1,'글자 크기 선택'))+p('일부 글자를 선택하고 크기를 바꾸면 강조할 수 있습니다. 숫자 대신 매우 작게와 작게 같은 상대 크기를 사용합니다. 모든 노트를 크게 보고 싶다면 '+a(0,'설정')+'의 기본 글자 크기나 화면 확대를 조정하세요.')+'<h2>굵게와 기울임 및 밑줄과 취소선</h2>'+p(img(2,'글자 서식 버튼'))+p('각 버튼으로 적용하고 서식 지우기로 제거할 수 있습니다. 단축키는 굵게가 Ctrl+B이며 기울임은 Ctrl+I이고 밑줄은 Ctrl+U입니다. <code>**글자**</code>나 <code>__글자__</code>는 굵게입니다. <code>*글자*</code>나 <code>_글자_</code>는 기울임이며 <code>~~글자~~</code>는 취소선입니다.')+'<h2>위 첨자와 아래 첨자</h2>'+p('cm³ 같은 단위와 NaHCO₃ 같은 화학식에 사용할 수 있습니다. 복잡한 식은 '+a(1,'수식 기능')+'을 사용하세요.')+'<h2>글자색과 배경색</h2>'+p(img(3,'색상 선택'))+p('미리 지정된 색을 선택하거나 색상 선택기로 직접 정할 수 있습니다. 문서에서 사용한 색은 다시 고르기 쉽도록 목록에 나타납니다. 밝은 '+a(2,'테마')+'와 어두운 테마 사이를 전환해도 읽기 쉬운 대비인지 확인하세요. 색상 제거 또는 서식 지우기로 해제할 수 있습니다.')+'<h2>서식 지우기</h2>'+p(img(4,'서식 지우기 버튼')+'은 선택한 글자의 굵기와 색상 및 크기 등을 지웁니다. 제거할 서식이 없으면 비활성화됩니다. 제목 서식은 별도로 본문으로 바꿔야 합니다. 붙여넣을 때부터 서식을 제외하려면 Ctrl+Shift+V를 사용하세요.')+'<h2>Markdown</h2>'+p(a(3,'Markdown')+'으로 내보낼 때 제목과 굵게 및 기울임과 밑줄 등 대부분의 기본 서식을 유지합니다.'),
148:({a,pre})=>'<h2>macOS 지원</h2>'+p('기존 Trilium Notes와 달리 TriliumNext는 macOS 사용 환경도 개선하고 있습니다. 운영체제에 따른 문제가 있으면 '+a(0,'오류를 보고')+'해 주세요.')+'<h2>번역 지원</h2>'+p('기존 앱에는 다국어 지원이 없었지만 TriliumNext에는 번역 기능이 추가되었습니다. 번역 기여를 환영합니다.')+'<h2>여러 사용자</h2>'+p('이 버전은 한 사람이 사용하는 노트 앱을 전제로 합니다. 원문 개발자는 사용자 관리와 권한 및 충돌 처리와 실시간 공동 편집의 구현 범위가 크고 개인 기록이라는 중심 기능에서 벗어난다고 설명했습니다. 단일 사용자에게 허용되는 '+a(1,'스크립트')+'도 다중 사용자 환경에서는 다른 사용자의 데이터에 접근하는 보안 문제가 될 수 있습니다.')+'<h2>여러 데이터베이스</h2>'+p('한 프로세스는 하나의 '+a(2,'데이터베이스')+'만 엽니다. 두 프로세스를 실행하고 '+a(3,'데이터 폴더')+'와 포트를 각각 지정할 수 있습니다. 다음은 원문의 실행 예제이며 사용하는 버전의 포트 환경 변수 이름을 확인하세요.')+pre(0)+p('실행 스크립트나 별칭으로 저장할 수 있습니다. 두 번째 인스턴스는 다른 폴더와 포트를 사용해야 합니다.')+'<h2>파일 동기화 서비스 사용</h2>'+p('열려 있는 데이터베이스를 Dropbox와 Google Drive 또는 OneDrive로 동기화하면 파일이 손상될 수 있습니다. 다음과 같은 오류가 나타날 수 있습니다.')+pre(1)+p('지원하는 방식은 Trilium의 '+a(4,'동기화 서버')+'를 사용하는 것입니다.')+'<h2>개별 파일 대신 데이터베이스를 사용하는 이유</h2>'+p('개별 파일은 다른 도구와 연동하기 쉽지만 Trilium의 구조를 그대로 표현하기 어렵습니다. 그래서 SQLite '+a(5,'데이터베이스')+'를 사용합니다.')+ul([a(6,'복제')+'는 같은 하위 트리를 여러 위치에 두는 기능입니다. 일반적인 파일·폴더 구조만으로 표현하기 어렵습니다.','Trilium의 노트는 본문과 하위 노트를 함께 가질 수 있습니다.','노트 순서를 사용자가 직접 지정합니다.',a(7,'속성')+'을 저장하고 검색해야 합니다. 파일 시스템 확장 속성은 운영체제마다 지원이 다릅니다.','노트 사이의 연결과 '+a(8,'노트 지도')+'를 빠르게 조회해야 합니다. 파일만 사용하면 별도의 색인 자료가 필요합니다.','트랜잭션을 사용하면 노트와 메타데이터의 변경을 일관되게 처리하기 쉽습니다.'])
};
@@ -0,0 +1,6 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
149:({a,img,pre})=>p('데스크톱 앱은 데이터를 로컬에 저장해 인터넷 연결 없이 사용할 수 있습니다. 서버와 동기화를 설정하면 여러 데스크톱 앱이 하나의 중앙 서버와 연결됩니다.')+p(img(0,'중앙 서버와 여러 클라이언트의 동기화 구조'))+p('설정 후에는 자동으로 계속 동기화합니다.')+'<h2>동기화 설정</h2>'+p('서버에는 유효한 '+a(0,'TLS 인증서')+'를 사용해 HTTPS로 연결하세요.')+'<h3>기존 데스크톱 데이터를 새 서버로 보내기</h3>'+p('서버를 설치하되 초기화하지 않은 상태로 둡니다. 기존 데스크톱 앱의 설정 → 동기화에서 서버 주소를 지정하고 저장하세요.')+p(img(1,'동기화 설정'))+p('동기화 시험을 누르면 연결을 확인하고 서버로 데이터를 보냅니다. 전송 중에도 앱을 사용할 수 있습니다. 서버에 로그인 화면이 나타나면 초기 동기화가 끝난 것입니다.')+'<h3>기존 서버에서 새 데스크톱으로 받기</h3>'+p(a(1,'데스크톱 앱을 설치')+'하고 초기 설정에서 동기화 서버 사용을 선택하세요.')+p(img(2,'서버에서 동기화하는 초기 설정'))+p('서버 주소와 해당 버전에서 요구하는 인증 정보를 입력하고 설정 완료를 누릅니다.')+p(img(3,'초기 동기화 진행'))+p('완료하면 앱 화면으로 이동합니다.')+'<h2>프록시</h2>'+p('설정 → 동기화에서 프록시를 직접 지정할 수 있습니다. 인증이 필요한 프록시는 지원하지 않습니다. 따로 지정하지 않으면 시스템 프록시 설정을 사용합니다.')+'<h2>문제 해결</h2><h3>시간</h3>'+p('서버와 클라이언트의 시각 차이는 5분 이내여야 합니다.')+'<h3>인증서</h3>'+p('자체 서명 인증서나 회사 프록시 때문에 인증서 검증이 실패할 수 있습니다. 원문에는 다음 환경 변수로 검증을 끄는 방법도 소개되어 있습니다.')+pre(0)+p('이 설정은 중간자 공격을 방어하는 인증서 검증을 끕니다. 유효한 인증서를 사용하는 것이 권장됩니다. 일부 배포판에는 같은 용도의 <code>trilium-no-cert-check.sh</code>가 있습니다.')+'<h3>충돌</h3>'+p('동기화되기 전에 여러 기기에서 같은 노트를 수정하면 더 최근 변경을 유지합니다. 이전 내용은 '+a(2,'노트 수정 이력')+'에서 확인할 수 있습니다.')+'<h3>해시 검사</h3>'+p('동기화 후 양쪽 데이터의 해시를 비교합니다. 다르면 자동 복구 절차를 시작합니다.'),
150:({a,img,pre})=>p('기본 '+a(0,'할 일 관리')+'에 새 작업을 만들고 여는 '+a(1,'실행 도구 모음')+' 버튼을 추가합니다.')+p(img(0,'새 할 일 버튼'))+'<h2>코드 노트 준비</h2>'+p('프런트엔드 JavaScript '+a(2,'코드 노트')+'를 만들고 '+a(3,'속성')+'에 <code>#run=frontendStartup</code>을 지정합니다.')+'<h2>전체 코드</h2>'+pre(0).replaceAll('New task','새 할 일')+'<h2>확인</h2>'+p('시작할 때 실행하도록 지정했으므로 '+a(4,'애플리케이션을 새로고침')+'하면 버튼이 나타납니다.')+'<h2>코드 설명</h2>'+pre(1).replaceAll('New task','새 할 일')+p(a(5,'프런트엔드 API')+'로 '+a(6,'실행 도구 모음')+'에 버튼을 추가합니다. 제목과 bx- 접두사를 제외한 아이콘 이름 및 선택적인 단축키를 지정합니다. action은 클릭할 때 실행할 함수입니다.')+pre(2).replace('// Shown below.','// 아래에서 설명하는 백엔드 처리입니다.')+p('노트 생성은 서버의 역할이므로 백엔드에서 실행합니다. 반환한 노트 ID는 프런트엔드에서 받을 수 있습니다.')+pre(3)+p('<code>#taskTodoRoot</code> '+a(7,'라벨')+'로 '+a(8,'할 일 관리')+'의 저장 위치를 찾습니다. 대상이 없으면 null일 수 있지만 이 기본 예제에는 오류 처리가 생략되어 있습니다.')+pre(4).replaceAll('New task','새 할 일')+p('첫 번째 인수는 상위 노트 ID입니다. 두 번째는 새 할 일이라는 제목이며 세 번째는 빈 본문입니다.')+pre(5)+p('서버에서 만든 노트가 프런트엔드에도 반영될 때까지 기다립니다.')+pre(6)+p('생성된 노트의 '+a(9,'ID')+'로 새 노트를 엽니다.'),
151:({a,img})=>p(img(0,'코드 블록 예시'))+p('텍스트 노트 안에 짧은 코드를 넣는 기능입니다. 전체 로그처럼 긴 내용은 '+a(0,'코드 노트')+'를 사용하세요.')+'<h2>삽입</h2>'+p(a(1,'서식 도구 모음')+'의 '+img(1,'코드 블록 버튼')+'을 누르면 마지막으로 선택한 언어의 블록을 만듭니다. 처음에는 자동 감지입니다. 옆의 화살표로 다른 언어를 선택할 수 있습니다. 역따옴표 세 개를 입력하는 방법도 있으며 이때도 마지막으로 선택한 언어를 사용합니다.')+'<h2>구문 강조와 색상</h2>'+p('0.90.12부터 코드 블록에 구문 강조를 적용합니다. '+a(2,'코드 노트')+'와는 다른 기술을 사용합니다. 자동 감지는 내용을 보고 언어를 추정하며 잘못 감지하면 직접 언어를 선택하세요. 일반 텍스트를 선택하면 강조하지 않습니다.')+p('편집 중에는 약 500줄 이상의 큰 블록에서 강조를 끕니다. 이 기준은 설정할 수 없습니다. '+a(3,'읽기 전용 노트')+'에는 이 제한이 적용되지 않습니다. 설정 → 모양에서 Highlight.js 색상 테마와 줄바꿈을 선택할 수 있습니다. 구문 강조 없음을 선택하면 전체 노트에서 끕니다.')+p('CKEditor의 검색 강조 등에 사용하는 API에 Highlight.js를 연결한 방식입니다. '+a(4,'antoniotejada')+'의 '+a(5,'구문 강조 위젯')+'을 바탕으로 설정과 기능을 확장했습니다.')+'<h3>기존 플러그인에서 전환</h3>'+p(a(6,'Trilium-SyntaxHighlightWidget')+' 같은 기존 플러그인은 충돌을 피하도록 비활성화하세요. 문제가 지속되면 안전 모드로 실행해 확인할 수 있습니다.')+'<h2>언어 변경</h2>'+p('블록 안을 클릭한 뒤 '+a(7,'서식 도구 모음')+'에서 언어를 바꿉니다.')+p(img(2,'코드 블록 언어 변경'))+'<h2>언어 목록</h2>'+p(a(8,'코드 노트')+'와 같은 목록을 사용합니다. '+a(9,'설정')+' → 코드 노트의 선택 목록에 표시할 MIME 유형에서 언어를 선택하거나 해제하세요. '+a(10,'새로고침')+' 후 반영됩니다.')
};
@@ -0,0 +1,6 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
152:({a,img})=>p(img(0,'상단 리본'))+p('상단 리본에서 현재 노트의 설정과 속성을 바꾸고 정보를 확인할 수 있습니다.')+'<h2>설정과 서식</h2>'+p(a(0,'설정')+' → 모양 → 리본 위젯에서 노트를 열 때 자동으로 펼칠 항목을 선택할 수 있습니다. 고정 '+a(1,'서식 도구 모음')+'을 사용하면 편집 버튼도 여기에 표시됩니다.')+'<h2>기본 속성</h2>'+ul([a(2,'노트 유형')+' — 보통 빈 노트에서 변경합니다. 고급 사용자는 유형을 잠시 바꿔 '+a(3,'소스')+'를 편집할 수도 있습니다.',a(4,'노트 보호')+' — 암호화와 보호 세션 사용 여부입니다.','편집 가능 여부 — 큰 노트에서 자동으로 '+a(5,'읽기 전용')+'을 사용하거나 항상 읽기 전용 또는 항상 편집 가능으로 지정합니다.',a(6,'실행 도구 모음')+'에 '+a(7,'북마크')+'로 표시할지 선택합니다.',a(8,'서버 인스턴스')+'에서 '+a(9,'공개 공유')+'할지 선택합니다.',a(10,'템플릿')+'으로 사용할지 선택합니다.',a(11,'본문 언어')+' — 맞춤법 검사와 오른쪽에서 왼쪽으로 쓰기에 사용합니다.'])+'<h2>소유한 속성</h2>'+p('노트에 직접 지정한 라벨과 관계를 편집합니다. '+a(12,'속성')+'을 참고하세요. 오른쪽 더하기 버튼으로 입력하거나 '+a(13,'주요 속성')+'의 형식을 정의할 수 있습니다.')+'<h2>상속된 속성</h2>'+p(a(14,'상속')+'으로 적용된 항목을 확인합니다. 이 화면에서는 수정할 수 없습니다.')+'<h2>노트 경로</h2>'+p('노트가 놓인 모든 위치를 표시하며 '+a(15,'노트 트리')+'처럼 새 위치로 '+a(16,'복제')+'할 수 있습니다.')+'<h2>노트 지도</h2>'+p('현재 노트의 관계와 하위 구조를 표시합니다. 관련 '+a(17,'노트 트리')+'도 확인할 수 있습니다.')+'<h2>유사한 노트</h2>'+p(a(18,'비슷한 노트 목록')+'을 표시합니다.')+'<h2>노트 정보</h2>'+p(a(19,'내부 ID')+'와 '+a(20,'노트 유형')+' 및 MIME 유형을 표시합니다. 생성일과 수정일 및 '+a(21,'데이터베이스')+'의 예상 용량과 하위 노트 수·용량도 확인할 수 있습니다.')+'<h2>편집한 노트</h2>'+p(a(22,'날짜별 노트')+'를 열면 그날 편집한 노트를 표시합니다. '+a(23,'모양 설정')+'의 리본 위젯에서 자동 표시를 끌 수 있습니다.'),
153:({a})=>p('일부 단축키는 트리나 편집기 등 특정 위치에서만 작동합니다. 기본 키는 버전에 따라 다를 수 있으므로 설정 → 단축키에서 현재 값을 확인하세요. <code>global:</code> 접두사는 앱에 초점이 없어도 동작하는 전역 단축키를 지정하며 앱을 다시 시작해야 적용됩니다.')+'<h2>노트 탐색</h2>'+ul(['↑와 ↓ — 목록에서 위아래 노트로 이동합니다. Ctrl+Shift+↑와 Ctrl+Shift+↓는 편집기에서도 작동합니다.','←와 → — 하위 트리를 접거나 펼칩니다.','Alt+←와 Alt+→ — 방문 기록의 이전과 다음으로 이동합니다.','Ctrl+J — '+a(0,'노트로 이동')+' 창을 엽니다.','Ctrl+. — 트리의 현재 노트로 이동합니다.','Backspace — 상위 노트로 이동합니다.','Alt+C — 트리 전체를 접습니다.','Alt+- — 하위 트리를 접습니다.'])+p('<code>#keyboardShortcut</code> '+a(1,'라벨')+'에 키 조합을 지정하면 해당 노트로 바로 이동할 수 있습니다. 새로고침 후 적용됩니다. '+a(2,'노트 탐색 예제')+'를 참고하세요.')+'<h2>탭</h2>'+p('노트 링크를 Ctrl을 누른 채 클릭하거나 마우스 가운데 버튼으로 누르면 새 탭에서 엽니다. 데스크톱 앱에서는 Ctrl+T로 새 탭을 열고 Ctrl+W로 닫습니다. Ctrl+Tab과 Ctrl+Shift+Tab으로 다음·이전 탭을 선택합니다.')+'<h2>노트 만들기</h2>'+p('Ctrl+O는 현재 노트 다음에 새 노트를 만듭니다. Ctrl+P는 하위 노트를 만듭니다. F2는 현재 가지의 '+a(3,'접두사')+'를 편집합니다.')+'<h2>이동과 복제</h2>'+ul(['Ctrl+↑와 Ctrl+↓ — 목록 순서를 바꿉니다.','Ctrl+←와 Ctrl+→ — 상위·하위 단계로 옮깁니다.','Shift+↑와 Shift+↓ — 선택 범위를 늘립니다.','Ctrl+A — 같은 단계의 노트를 모두 선택합니다.','Shift를 누른 채 클릭 — 여러 노트를 선택합니다.','Ctrl+C — '+a(4,'복제')+'할 노트를 복사합니다.','Ctrl+X — 옮길 노트를 잘라냅니다.','Ctrl+V — 현재 노트 아래에 붙입니다. 복사했으면 복제하고 잘라냈으면 이동합니다.','Delete — 선택한 노트와 하위 트리를 삭제합니다.'])+'<h2>편집</h2>'+p(a(5,'텍스트 노트')+'의 '+a(6,'편집 단축키')+'와 '+a(7,'Markdown식 자동 서식')+'도 참고하세요. 트리에서 Enter를 누르면 제목으로 이동하고 제목에서 Enter를 누르면 본문으로 이동합니다. Ctrl+.은 트리로 돌아갑니다.')+'<h2>실행 화면</h2>'+ul(['F5 또는 Ctrl+R — 프런트엔드 새로고침','Ctrl+Shift+I — 개발자 도구','Ctrl+F — 찾기','Ctrl+-와 Ctrl+= — 축소와 확대','Alt+O — SQL 콘솔','Alt+M — 원문에 기록된 방해 요소 숨김 단축키. 최신 집중 모드 키는 설정에서 확인하세요.','F11 — 전체 화면','Ctrl+S — 트리의 '+a(8,'검색')+' 창 전환','Alt+A — 노트 '+a(9,'속성')+' 창']),
154:({a,img})=>p('텍스트는 Trilium의 기본 노트 유형입니다. 글자 서식과 표 및 이미지와 안내 상자 등 다양한 기능을 제공합니다.')+'<h2>서식 도구 모음</h2>'+p('떠 있는 도구 모음은 필요한 순간에 나타납니다. 문단용 도구와 글자를 선택했을 때 나타나는 도구가 있습니다.')+p(img(0,'문단 도구 모음'))+p(img(1,'글자 도구 모음'))+p('고정 도구 모음은 여러 서식 버튼을 한곳에 표시합니다.')+p(img(2,'고정 도구 모음'))+p(a(0,'서식 도구 모음 안내')+'에서 선택 방법을 확인하세요.')+'<h2>지원 기능</h2>'+ul([a(1,'일반 서식')+' — 제목과 본문 및 글자 크기와 굵게·기울임·밑줄·취소선 및 첨자와 색상과 서식 지우기',a(2,'목록')+' — 글머리 기호와 번호 목록 및 체크리스트',a(3,'인용문과 안내 상자'),a(4,'표')+' — 셀 합치기와 표·셀 꾸미기 및 설명',a(5,'개발자용 서식')+' — 문장 안의 코드와 코드 블록 및 단축키 표시',a(6,'각주'),a(7,'이미지'),a(8,'링크')+' — 외부 웹페이지와 내부 노트 연결',a(9,'노트 포함'),a(10,'삽입 메뉴')+' — 기호와 '+a(11,'수식')+' 및 Mermaid 도표와 가로 구분선 및 페이지 나누기',a(12,'기타 기능')+' — 들여쓰기와 Markdown 가져오기 및 '+a(13,'하위 노트로 잘라내기')])+'<h2>읽기와 편집</h2>'+p('보통 편집 모드로 열립니다. 본문이 매우 크거나 직접 지정한 경우에는 '+a(14,'읽기 전용')+'으로 열립니다.')+'<h2>단축키</h2>'+p(a(15,'키보드 단축키')+'와 '+a(16,'Markdown식 자동 서식')+'으로 마우스 없이도 편집할 수 있습니다.')+'<h2>편집기</h2>'+p('오픈 소스 기반을 가진 '+a(17,'CKEditor')+'를 사용합니다. 편집 화면에서 서식이 적용된 결과를 바로 확인할 수 있습니다.')
};
@@ -0,0 +1,6 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
155:({a,img})=>p('Trilium은 용도에 따라 여러 노트 유형을 지원합니다. 기본 유형은 '+a(0,'텍스트')+'입니다.')+'<h2>다른 유형으로 새 노트 만들기</h2>'+p(a(1,'노트 트리')+'에서 기준 노트를 마우스 오른쪽 버튼으로 누릅니다. 다음에 노트 삽입은 같은 단계에 새 노트를 만들고 하위 노트 삽입은 선택한 노트 아래에 만듭니다.')+p(img(0,'노트 유형 선택'))+p(a(2,'링크')+'를 '+a(3,'텍스트 노트')+'에 추가할 때 새 제목을 입력하고 Enter를 누르면 유형을 선택할 수 있습니다. 새 탭에서도 같은 방법을 사용합니다.')+'<h2>기존 노트의 유형 변경</h2>'+p(a(4,'상단 리본')+'의 기본 속성에서 변경합니다. 보통 내용이 없는 노트에서 변경하는 것이 좋습니다. 유형 변경으로 '+a(5,'노트 소스')+'를 편집할 수도 있습니다.')+'<h2>지원하는 유형</h2>'+ul([a(6,'텍스트')+' — 글자 서식과 이미지 및 안내 상자를 지원합니다. 오른쪽에서 왼쪽으로 쓰기도 가능합니다.',a(7,'코드')+' — 고정폭 글꼴과 구문 강조를 사용합니다. 긴 코드나 일반 텍스트를 담기에 적합합니다.',a(8,'저장된 검색')+' — 검색어와 조건을 저장해 다시 실행합니다. 많은 노트를 빠르게 추릴 수 있습니다.',a(9,'관계도')+' — 노트와 노트 사이의 관계를 만듭니다. 가계도처럼 관계가 중요한 자료에 적합합니다.',a(10,'노트 지도')+' — 노트 사이의 관계와 상하위 구조를 보여 줍니다.',a(11,'렌더링 노트')+' — '+a(12,'스크립트')+'로 다른 노트의 HTML을 표시합니다. 스크립트로 생성한 동적 내용도 보여 줄 수 있습니다.',a(13,'책')+' — 하위 노트를 격자나 목록 또는 달력으로 보여 줍니다. 짧은 노트를 모아 읽기 좋습니다.',a(14,'Mermaid 도표')+' — 막대그래프와 순서도 및 상태도 등을 만듭니다. 도표를 전용 문법으로 작성해야 합니다.',a(15,'캔버스')+' — 스케치와 도표 및 손글씨를 그립니다. '+a(16,'Excalidraw')+'와 같은 기술을 사용합니다.',a(17,'웹 보기')+' — 브라우저처럼 외부 웹페이지를 표시합니다.',a(18,'마인드맵')+' — 생각을 계층 구조로 정리합니다.',a(19,'지리 지도')+' — 하위 노트를 지도에 표시합니다. 여행 계획에 활용할 수 있으며 경로 표시와 지도에서 노트 만들기도 지원합니다.',a(20,'파일')+' — 업로드한 PDF와 이미지 및 동영상과 음성 파일 등을 담습니다.']),
156:({a})=>p('관계는 '+a(0,'라벨')+'과 비슷하지만 텍스트 값 대신 다른 노트를 가리킵니다.')+'<h2>활용 방법</h2>'+ul(['책 노트와 저자 노트를 연결하는 등 자료의 관계를 나타냅니다. '+a(1,'주요 속성')+'으로 표시하면 더 편하게 사용할 수 있습니다.',a(2,'렌더링 노트')+'와 '+a(3,'공개 공유')+' 및 '+a(4,'템플릿')+'을 설정합니다.','노트의 이벤트나 조건에 맞춰 실행할 스크립트를 연결합니다.'])+'<h2>편집 화면에서 만들기</h2>'+p(a(5,'상단 리본')+'의 소유한 속성에서 더하기 버튼을 누르고 새 관계 추가를 선택합니다. 노트나 소유한 속성에 초점이 있을 때 Alt+L을 눌러도 편집 화면이 열립니다.')+p('관계 이름과 대상 노트를 지정합니다. 관계에는 대상 노트가 반드시 있어야 합니다. 하위 노트에도 적용하려면 상속 가능을 선택하세요. '+a(6,'속성 상속')+'을 참고하세요.')+'<h2>직접 입력하기</h2>'+p(a(7,'상단 리본')+'의 소유한 속성에서 <code>~myRelation=@</code>를 입력합니다. 자동 완성 목록에 대상 제목을 입력한 다음 Enter를 누르거나 원하는 노트를 선택합니다. '+a(8,'노트 트리')+'에서 노트를 복사했다면 <code>@</code> 없이 <code>=</code> 뒤에 붙여 넣을 수도 있습니다.')+p('상속 가능한 관계는 <code>~myRelation</code> 대신 <code>~myRelation(inheritable)</code>로 입력합니다.')+'<h2>미리 정의된 관계</h2>'+p('다음 관계는 Trilium에서 특별한 기능을 수행합니다. 이름 끝의 별표는 같은 접두사로 시작하는 여러 관계를 뜻합니다.')+ul(['<code>runOn*</code> — '+a(9,'이벤트')+'에 따라 스크립트를 실행합니다.','<code>template</code> — 상하위 관계가 없어도 속성을 상속합니다. 템플릿 규칙에 따라 비어 있는 인스턴스에 본문과 하위 트리를 추가합니다.','<code>inherit</code> — 상하위 관계가 없어도 속성을 상속합니다. 비슷한 개념인 '+a(10,'템플릿')+'과 '+a(11,'속성 상속')+'을 참고하세요.','<code>renderNote</code> — '+a(12,'렌더링 노트')+'에서 표시할 HTML 또는 스크립트 코드 노트를 가리킵니다.','<code>widget_relation</code> — 대상 노트를 실행하고 사이드바 위젯으로 표시합니다.','<code>shareCss</code> — 공유 페이지에 넣을 CSS 노트입니다. 해당 노트도 공유 하위 트리에 있어야 합니다. 필요에 따라 <code>share_hidden_from_tree</code>와 <code>share_omit_default_css</code>를 함께 사용합니다.','<code>shareJs</code> — 공유 페이지에 넣을 JavaScript 노트입니다. 해당 노트도 공유 하위 트리에 있어야 합니다. 필요하면 <code>share_hidden_from_tree</code>로 트리에서 숨깁니다.','<code>shareTemplate</code> — 공유 노트 표시용 템플릿으로 사용할 임베디드 JavaScript 노트입니다. 지정하지 않으면 기본 템플릿을 사용합니다. 필요하면 <code>share_hidden_from_tree</code>로 숨깁니다.','<code>shareFavicon</code> — 공유 페이지의 아이콘 노트입니다. 보통 공유 루트에 지정하고 상속 가능으로 설정합니다. 아이콘도 공유 하위 트리에 있어야 합니다. 필요하면 <code>share_hidden_from_tree</code>로 숨깁니다.']),
157:({a,img,pre})=>'<h2>기본 테마</h2>'+p('기본값은 밝은 테마입니다. 왼쪽 위 앱 메뉴에서 설정 → 모양을 열면 어두운 테마나 다른 테마로 바꿀 수 있습니다.')+p(img(0,'어두운 테마'))+'<h2>CSS로 테마 만들기</h2>'+p(a(0,'코드 노트')+'를 만들고 언어를 CSS로 지정합니다. '+a(1,'속성')+'에 <code>#appTheme=my-theme-name</code>을 추가합니다. <code>my-theme-name</code>은 원하는 테마 이름으로 바꿉니다. 본문에 다음과 같은 스타일을 작성합니다.')+pre(0)+'<h3>테마 적용</h3>'+p('설정 → 모양의 테마 목록에서 <code>#appTheme</code> '+a(2,'라벨')+'에 지정한 이름을 선택합니다. CSS를 수정한 뒤에는 Ctrl+R로 화면을 새로고침합니다.')+'<h3>공유와 가져오기</h3>'+p('원문에서 안내하는 테마 내보내기 형식은 <code>.tar</code>입니다. 외부 테마에는 실행 가능한 스크립트가 들어 있을 수 있으므로 신뢰할 수 있는 출처인지 확인하세요. 기본 예제에는 강철빛 파랑 테마가 있습니다.')+p(img(1,'강철빛 파랑 테마'))+'<h2>화면 일부에 CSS 적용</h2>'+p('테마와 별개로 특정 요소만 꾸밀 수도 있습니다. CSS '+a(3,'코드 노트')+'를 만들고 <code>#appCss</code> '+a(4,'라벨')+'을 추가한 다음 스타일을 작성합니다.')+pre(1).replace('Custom CSS to style specific elements','특정 화면 요소에 적용할 CSS').replace('Change tree item color','트리 항목의 글자색 변경')+p('앱 화면이 시작될 때 <code>appCss</code>가 지정된 모든 노트의 CSS를 불러옵니다. 수정한 뒤 Ctrl+R로 새로고침하세요.')+p(img(2,'노트 트리에 사용자 스타일 적용'))+'<h3>특정 노트 꾸미기</h3>'+p('<code>cssClass</code> '+a(5,'속성')+'의 값에 CSS 클래스 이름을 지정합니다. <code>iconClass</code>에는 '+a(6,'Box Icons')+'의 아이콘 클래스나 직접 만든 클래스를 지정할 수 있습니다. PNG 이미지 노트처럼 특정 유형에 적용하려면 <code>type-image mime-image-png</code> 같은 클래스를 사용합니다.')+'<h3>다른 사용자의 테마</h3>'+p(a(7,'테마 모음')+'에서 커뮤니티가 만든 테마를 살펴보세요.')+'<h3>기본 파일 경로</h3>'+p('기본 이미지 등을 참조할 때 버전 번호 대신 <code>vX</code> 별칭을 사용하면 업데이트에 대응하기 쉽습니다. 예를 들어 <code>/assets/v0.57.0-beta/images/icon-grey.png</code> 대신 <code>/assets/vX/images/icon-grey.png</code>를 사용합니다.')
};
@@ -0,0 +1,6 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
158:({a,img})=>p('파일 노트에는 이미지와 동영상 및 PDF 같은 외부 파일을 첨부할 수 있습니다.')+'<h2>파일 올리기</h2>'+p('파일 노트는 유형을 선택해 직접 만들지 않습니다. 파일을 '+a(0,'노트 트리')+'로 끌어 놓거나 노트를 마우스 오른쪽 버튼으로 눌러 노트로 가져오기를 선택하세요.')+'<h2>지원하는 파일</h2><h3>PDF</h3>'+p(img(0,'PDF 보기'))+p('Trilium 안에서 바로 읽을 수 있습니다. 왼쪽 위 메뉴에서 페이지 미리보기와 문서에 포함된 목차를 엽니다. 위쪽에서 페이지 번호와 확대 비율을 바꾸거나 문서를 회전합니다. 추가 메뉴에서는 두 페이지 보기와 주석 표시 및 문서 속성을 사용할 수 있습니다.')+'<h3>이미지</h3>'+p(img(1,'이미지 보기'))+p('참조를 클립보드에 복사하면 '+a(1,'텍스트 노트')+'에 이미지를 넣을 수 있습니다. '+a(2,'이미지 참조')+'를 참고하세요.')+'<h3>동영상</h3>'+p(img(2,'동영상 재생'))+p('파일을 스트리밍하므로 서버에서 전체 파일을 내려받기 전에도 재생할 수 있습니다. 다만 매우 큰 파일을 보관하는 용도로 설계된 기능은 아닙니다. 동영상이 크면 '+a(3,'데이터베이스')+'와 '+a(4,'백업')+'도 커지고 처음 올릴 때 지연될 수 있습니다. 데이터베이스가 크다는 이유만으로 일반적인 사용 속도가 크게 느려지는 것은 아닙니다.')+'<h3>음성</h3>'+p(img(3,'음성 재생'))+p('지원하는 음성 파일은 기본 재생기로 열립니다. 재생과 일시 정지 버튼을 사용하고 진행 막대를 누르거나 끌어 재생 위치를 바꿉니다. 음량을 조절할 수 있으며 음량 옆 메뉴에서 재생 속도도 바꿀 수 있습니다.')+'<h3>텍스트 파일</h3>'+p(img(4,'텍스트 파일 미리보기'))+p('텍스트로 인식한 파일은 내용 일부를 보여 줍니다. 외부 라이브러리나 자동 생성 자료처럼 본문 편집보다 파일 보관과 다운로드가 필요한 경우에 유용합니다.')+p('보통 텍스트 파일을 '+a(5,'가져오면')+' '+a(6,'텍스트')+' 또는 '+a(7,'코드')+' 노트가 됩니다. 파일 노트로 보관하려면 노트로 가져오기에서 HTML·Markdown·TXT를 텍스트 노트로 가져오는 옵션과 인식한 코드 파일을 코드 노트로 가져오는 옵션을 모두 해제하세요. 미리보기 길이는 제한되므로 전체 내용은 외부 앱에서 확인합니다.')+'<h3>알 수 없는 형식</h3>'+p(img(5,'미리보기를 지원하지 않는 파일'))+p('형식을 인식하지 못하면 본문 미리보기가 나오지 않습니다. 내려받기와 외부 앱으로 열기 등 기본 기능은 사용할 수 있습니다.')+'<h2>파일 관리</h2>'+p(a(8,'상단 리본')+'의 이미지 또는 파일 탭에서 내려받기와 기본 앱으로 열기 및 새 버전 올리기를 사용할 수 있습니다. 파일 노트의 유형은 바꿀 수 없습니다. '+a(9,'첨부 파일')+'로 바꾸려면 '+a(10,'노트 메뉴')+'를 사용합니다.')+'<h2>다른 노트에 표시</h2>'+p(a(11,'노트 목록')+'에서도 파일 유형에 맞춰 표시됩니다.')+p(img(6,'노트 목록에 표시된 파일'))+p('이미지를 제외한 파일은 '+a(12,'노트 포함')+'으로 텍스트 노트에 읽기 전용 위젯으로 넣습니다. 이미지는 '+a(13,'이미지 참조')+'로 일반 이미지처럼 넣습니다.'),
159:({a,pre})=>'<h2>모바일과 데스크톱 구분</h2>'+p('<code>body.mobile</code>과 <code>body.desktop</code>으로 화면 유형을 구분합니다.')+pre(0).replace('Do something on mobile','모바일 화면에 적용할 스타일').replace('Do something on desktop','데스크톱 화면에 적용할 스타일')+p('모바일의 태블릿 배치는 미디어 쿼리로 구분합니다.')+pre(1).replace('Do something on mobile layout','모바일 배치에 적용할 스타일').replace('Do something on mobile tablet + desktop layout','태블릿과 데스크톱 배치에 적용할 스타일')+'<h2>가로 배치와 세로 배치</h2>'+p('세로 배치에서는 실행 도구 모음이 왼쪽에 있습니다. 가로 배치에서는 위쪽에 있고 탭이 전체 너비를 사용합니다. <code>body</code>의 클래스로 구분합니다.')+pre(2).replace('Do something else','가로 배치에 적용할 스타일').replace('Do something','세로 배치에 적용할 스타일')+p('<code>#horizontal-main-container</code>와 <code>#vertical-main-container</code>는 선택한 배치와 관계없이 DOM에 존재합니다. 해당 컨테이너로 본문 영역의 배경을 꾸밀 수 있습니다.')+'<h2>운영체제와 데스크톱 앱 구분</h2>'+p('Windows에는 <code>body.platform-win32</code>를 사용하고 macOS에는 <code>body.platform-darwin</code>을 사용합니다. Electron 데스크톱 앱에만 적용하려면 다음과 같이 작성합니다.')+pre(3)+'<h3>시스템 제목 표시줄</h3>'+p('시스템 제목 표시줄 사용 여부도 <code>body</code>에서 구분합니다.')+pre(4).replace('Do something else','사용자 제목 표시줄에 적용할 스타일').replace('Do something','시스템 제목 표시줄에 적용할 스타일')+'<h3>시스템 창 버튼</h3>'+p('시스템 제목 표시줄을 끈 상태에서도 운영체제의 창 버튼을 사용할 수 있습니다. 구현 과정과 화면은 '+a(0,'시스템 창 버튼 구현 기록')+'을 참고하세요.')+p('Windows에서 버튼 영역의 글자색과 배경색은 RGB 16진수 값으로 지정합니다.')+pre(5)+p('RGBA 값으로 투명도를 지정할 수도 있습니다. 이 경우 마우스를 올렸을 때의 색 표현이 제한될 수 있습니다.')+pre(6)+p('값은 창을 만들 때 읽으며 이후에는 밝은 모드와 어두운 모드 설정이 바뀔 때 갱신됩니다.')+p('macOS에서는 시스템 제목 표시줄을 끄면 신호등 모양의 창 버튼이 기본으로 나타납니다. 위치는 다음과 같이 조정합니다.')+pre(7)+'<h3>Windows의 Mica 배경 효과</h3>'+p('Windows 11에서 <code>body</code>의 <code>--background-material</code>로 배경 효과를 설정합니다.')+pre(8)+p('<code>tabbed</code>는 가로 배치에 적합하고 <code>mica</code>는 세로 배치에 적합합니다. 효과가 보이려면 상위 요소부터 하위 요소까지 배경을 투명하거나 반투명하게 해야 합니다. TriliumNext 테마를 참고하세요.')+'<h2>탭 아이콘과 작업 공간 색상</h2>'+p('작업 공간 아이콘 대신 노트 아이콘을 표시하려면 다음 변수를 설정합니다.')+pre(9)+p('탭에서 작업 공간을 확대해 보고 있을 때 해당 작업 공간의 색을 가져올 수 있습니다. 다음 예제는 탭 전체 대신 위쪽의 가는 선에 색을 적용합니다.')+pre(10)+'<h2>사용자 글꼴</h2>'+p(a(1,'사용자 리소스 제공자')+'를 사용합니다. 글꼴을 가져와 <code>#customResourceProvider=fonts/myfont.ttf</code>를 지정하고 CSS에서 <code>/custom/fonts/myfont.ttf</code>로 참조합니다. 서버가 루트 경로가 아닌 곳에서 실행된다면 <code>../../../custom/fonts/myfont.ttf</code>를 사용합니다.')+'<h2>밝은 테마와 어두운 테마</h2>'+p('밝은 테마는 다음과 같이 선언합니다. 어두운 테마는 값을 <code>dark</code>로 지정합니다.')+pre(11)+p('<code>prefers-color-scheme</code>에 따라 자동 전환하는 테마는 현재 모드의 <code>--theme-style</code>과 함께 다음 변수도 지정합니다.')+pre(12)+p('Electron 앱이 운영체제에 색상 모드를 전달할 때 사용하는 정보입니다. Windows의 배경 효과 등에도 영향을 줍니다.'),
160:({a,img})=>p(a(0,'텍스트 노트')+'에서 표 버튼을 누르고 마우스로 행과 열 수를 선택하면 표를 만들 수 있습니다.')+p(img(0,'표의 행과 열 선택'))+'<h2>서식 도구 모음</h2>'+p('표를 선택하면 전용 도구 모음이 나타납니다.')+p(img(1,'표 서식 도구 모음'))+'<h2>표 안에서 이동</h2>'+p('셀을 누르면 해당 셀을 편집합니다. 표 위아래의 '+img(2,'문단 삽입 버튼')+' 버튼으로 빈 문단을 넣습니다. 왼쪽 위의 '+img(3,'표 선택 버튼')+' 버튼으로 표 전체를 선택해 복사하거나 잘라낼 수 있습니다. 버튼을 끌어 표를 옮길 수도 있습니다.')+p('방향키로 셀 사이를 이동합니다. Tab은 다음 셀로 이동하고 Shift+Tab은 이전 셀로 이동합니다. 마지막 셀에서 Tab을 누르면 새 행이 생깁니다. Shift를 누른 채 방향키를 사용하면 여러 셀을 선택합니다.')+'<h2>셀 크기</h2>'+p('열 경계를 끌면 너비를 바꿀 수 있습니다. 행 높이는 기본적으로 마우스로 조절하지 않으며 셀 속성에서 지정합니다. '+img(4,'셀 속성 버튼')+' 버튼으로 픽셀이나 백분율 단위의 정확한 크기를 입력할 수 있습니다.')+'<h2>행과 열 추가</h2>'+p('기준 셀을 선택하고 '+img(5,'열 메뉴 버튼')+' 버튼에서 왼쪽 또는 오른쪽에 열 삽입을 선택합니다. '+img(6,'행 메뉴 버튼')+' 버튼에서는 위쪽 또는 아래쪽에 행 삽입을 선택합니다. 표 끝에서는 Tab으로도 새 행을 만듭니다.')+'<h2>셀 합치기와 나누기</h2>'+p('여러 셀을 끌어서 선택하고 '+img(7,'셀 합치기 버튼')+' 버튼을 누릅니다. 옆 화살표를 누르면 인접한 위·아래·왼쪽·오른쪽 셀과 합치거나 셀을 가로 또는 세로로 나누는 메뉴가 나옵니다.')+'<h2>표 속성</h2>'+p(img(8,'표 속성 창'))+p(img(9,'표 속성 버튼')+' 버튼으로 표 전체의 바깥 테두리 모양과 색 및 두께를 바꿉니다. 배경색과 너비 및 높이도 지정할 수 있습니다. 크기는 <code>%</code> 또는 <code>px</code> 단위를 붙여 입력합니다. 왼쪽이나 오른쪽 정렬에서는 본문이 표 옆으로 흐릅니다. 가운데 정렬에서는 본문이 표 옆에 배치되지 않습니다. 변경 사항을 유지하려면 저장을 누르세요.')+'<h2>셀 속성</h2>'+p(img(10,'셀 속성 창'))+p(img(11,'셀 속성 버튼')+' 버튼은 선택한 셀에 적용됩니다. 테두리와 배경색 및 크기를 지정하고 셀 안쪽 여백을 조절합니다. 글자의 가로 정렬은 왼쪽·가운데·오른쪽·양쪽 맞춤을 지원합니다. 세로 정렬은 위·가운데·아래를 지원합니다. 변경 사항을 유지하려면 저장을 누르세요.')+'<h2>표 설명</h2>'+p(img(12,'표 설명 버튼')+' 버튼을 누르면 표 위에 설명을 넣을 수 있습니다.')+'<h2>보이지 않는 테두리</h2>'+p('글이나 '+a(1,'이미지')+'를 여러 칸으로 배치할 때 활용할 수 있습니다. 원하는 크기의 표를 만들고 전체를 선택합니다. 표 속성과 셀 속성에서 모두 테두리를 실선으로 지정하고 색을 <code>transparent</code>로 설정한 다음 두께를 <code>1px</code>로 입력합니다.')+'<h2>Markdown으로 가져오기와 내보내기</h2>'+p('단순한 표는 <code>|</code>로 칸을 구분하는 GitHub 방식의 Markdown으로 내보냅니다. HTML 요소나 이미지 또는 별도 크기 설정이 들어간 복잡한 표는 HTML로 내보내 서식 손실을 줄입니다.')
};
@@ -0,0 +1,5 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
161:({a,img,pre})=>p(img(0,'일괄 작업 설정'))+p('일괄 작업으로 여러 노트에 라벨을 추가하거나 지우고 스크립트를 실행할 수 있습니다.')+'<h2>사용 방법</h2>'+p(a(0,'노트 트리')+'에서 노트 하나를 선택하거나 '+a(1,'여러 노트 선택')+' 방법으로 대상을 지정합니다. '+a(2,'노트 트리')+'의 마우스 오른쪽 메뉴에서 고급 → 일괄 작업 적용을 선택합니다.')+p('기본 대상은 선택한 노트뿐입니다. 하위 노트도 처리하려면 선택한 노트의 하위 항목 포함을 선택하세요. 위쪽의 대상 노트 수가 갱신됩니다. 사용 가능한 작업에서 항목을 선택하고 선택한 작업 영역에서 세부 값을 지정합니다. 같은 유형의 작업을 여러 번 추가할 수 있으며 오른쪽 X로 제거합니다. 설정을 마친 뒤 일괄 작업 실행을 누릅니다. 마지막 설정은 다음에 창을 열 때 복원됩니다.')+'<h2>라벨 작업</h2>'+p(a(3,'라벨')+'을 다음과 같이 관리합니다.')+ul(['라벨 추가 — 같은 이름의 '+a(4,'라벨')+'이 없으면 만들고 있으면 값을 바꿉니다. 새 값을 비우면 값 없는 라벨이 됩니다.','라벨 값 변경 — 해당 '+a(5,'라벨')+'이 있는 노트만 처리합니다. 값을 비우면 기존 값이 지워집니다.','라벨 이름 변경 — 해당 '+a(6,'라벨')+'의 이름만 바꾸고 값은 유지합니다.','라벨 삭제 — 같은 이름의 라벨을 값 유무와 관계없이 삭제합니다.'])+'<h2>관계 작업</h2>'+p(a(7,'관계')+'의 추가와 대상 변경 및 이름 변경과 삭제를 지원합니다. 추가는 지정한 노트를 가리키는 관계를 만듭니다. 나머지 작업은 해당 관계가 있는 노트만 처리합니다. 이름을 바꿔도 대상 노트는 유지됩니다.')+'<h2>노트 작업</h2>'+p('노트 이름 변경은 모든 대상의 제목을 지정한 값으로 바꿉니다. '+a(8,'FNote')+' 정보에 접근하는 템플릿 문자열도 사용할 수 있습니다. <code>새 항목: ${note.title}</code>은 제목 앞에 문구를 붙입니다. <code>${note.dateCreatedObj.format(\'MM-DD\')}: ${note.title}</code>은 만든 날짜를 월·일 형식으로 붙입니다.')+p('노트 이동은 지정한 상위 노트 아래로 옮깁니다. 간단한 이동은 '+a(9,'노트 트리')+'에서 잘라내기와 붙여넣기 또는 메뉴로 처리해도 됩니다. 노트 삭제는 대상을 삭제합니다. '+a(10,'노트 트리')+'에서 선택하고 Delete를 누르는 방법도 있습니다. 노트 수정 이력 삭제는 대상의 모든 '+a(11,'수정 이력')+'을 지웁니다.')+'<h2>스크립트 실행</h2>'+p('복잡한 작업은 JavaScript로 작성할 수 있습니다. 다음 예제는 제목 뒤에 문구를 붙입니다.')+pre(0).replace(' - suffix',' - 추가 문구')+p('다음 예제는 <code>#shareAlias</code> 라벨을 노트 제목으로 설정합니다.')+pre(1),
162:({a,img})=>p(img(0,'노트에 관해 AI와 대화하는 예제'))+p('Trilium의 AI 기능은 노트를 바탕으로 대화하고 정보를 찾도록 도와줍니다. 이 버전은 OpenAI와 Anthropic 및 Ollama 같은 제공자와의 대화뿐 아니라 도구 호출과 임베딩을 지원합니다.')+p('설정의 AI/LLM 항목을 열고 기능을 켭니다.')+p(img(1,'AI 설정 위치'))+p(img(2,'AI 기능 켜기'))+'<h2>임베딩</h2>'+p('임베딩은 노트의 의미를 수치로 표현한 자료입니다. 사람이 읽는 요약문과는 다릅니다. 코사인 유사도 같은 계산으로 대화에 관련된 노트를 찾아 AI에 전달하는 데 활용합니다. 이 버전에서는 OpenAI와 Voyage AI 및 Ollama로 임베딩을 만들 수 있습니다.')+p('다음 예제는 직접 운영하는 Ollama를 사용합니다. 설치 방법은 '+a(0,'Ollama 설치')+'를 참고하세요. '+a(1,'Ollama 임베딩 모델 목록')+'에서 모델을 찾아 <code>pull</code> 명령으로 가져옵니다. 원문의 2025년 4월 예제는 <code>mxbai-embed-large</code>를 사용합니다.')+p('제공자 탭에서 Ollama를 선택하고 기본 URL을 입력합니다. 같은 컴퓨터에서 실행하는 예제 주소는 <code>http://localhost:11434</code>입니다. 새로고침 버튼으로 모델 목록을 불러옵니다.')+p(img(3,'Ollama 주소와 모델 목록 설정'))+p('임베딩 모델 목록에서는 임베딩용 모델이 위쪽에 표시되고 일반 대화 모델과 구분선으로 나뉩니다.')+p(img(4,'임베딩 모델 선택'))+p('모델을 선택하면 임베딩 생성이 시작됩니다. 설정 위쪽의 통계에서 진행 상황을 확인합니다.')+p(img(5,'임베딩 생성 통계'))+p('생성이 시작되지 않으면 설정 아래쪽에서 모든 임베딩 다시 만들기를 누릅니다.')+p(img(6,'모든 임베딩 다시 만들기'))+p('생성에는 시간이 걸립니다. 노트를 만들거나 수정하거나 삭제하면 관련 임베딩도 갱신됩니다. 제공자나 모델을 바꾸면 전체 임베딩을 다시 만들어야 합니다.')+'<h2>도구</h2>'+p('AI가 사용할 수 있도록 제공하는 함수입니다. 모델이 도구 이름과 인수를 요청하면 Trilium이 실행하고 결과를 대화에 전달합니다. 이 버전에는 다음 도구가 포함되어 있습니다.')+ul(['<code>search_notes</code> — 의미 기반 검색','<code>keyword_search</code> — 검색어 기반 검색','<code>attribute_search</code> — 속성 검색','<code>search_suggestion</code> — 검색 문법 지원','<code>read_note</code> — 노트 본문 읽기','<code>create_note</code> — 노트 만들기','<code>update_note</code> — 노트 수정','<code>manage_attributes</code> — 노트 속성 관리','<code>manage_relationships</code> — 노트 사이의 관계 관리','<code>extract_content</code> — 노트에서 내용 추출','<code>calendar_integration</code> — 날짜 노트 검색과 생성 및 오늘의 노트 조회'])+p('대화 중 도구가 실행되면 다음처럼 결과가 표시됩니다. 특정 도구를 직접 지시하지 않아도 모델이 필요에 따라 선택할 수 있습니다.')+p(img(7,'대화 중 도구 실행 결과'))+'<h2>대화 시작</h2>'+p('노트와 대화 버튼으로 시작합니다.')+p(img(8,'노트와 대화 버튼'))+p('버튼이 보이지 않으면 실행 도구 모음 설정에서 사용 가능한 실행 도구를 표시할 실행 도구 영역으로 옮기세요.')+p(img(9,'대화 실행 도구 표시'))
};
@@ -0,0 +1,5 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
export default {
163:({a,img})=>p('할 일과 회의록 및 그날의 생각처럼 날짜를 중심으로 모이는 기록이 많습니다. 일일 노트는 특정 날짜의 자료를 한곳에 모으는 공간입니다. Trilium이 날짜별 노트를 만들면 그 아래에 관련 노트를 보관할 수 있습니다. 기존 일일 노트에서 메뉴의 달력을 열고 날짜를 선택하면 해당 날짜의 노트를 만듭니다.')+p(img(0,'달력에서 날짜 선택'))+p(a(0,'노트 복제')+'를 이용하면 같은 노트를 일일 노트 아래와 다른 분류 아래에 함께 배치할 수 있습니다.')+'<h2>예제</h2>'+p(img(1,'일지의 날짜별 노트 구조'))+p('일지 아래에 연도와 월 및 날짜 순으로 노트가 구성됩니다. 일일 노트에는 본문과 하위 노트를 넣을 수 있습니다. '+a(1,'할 일 관리자')+'의 노트도 함께 배치할 수 있습니다. 체중을 기록하는 <code>weight</code> '+a(2,'주요 속성')+'은 '+a(3,'체중 기록')+'에서 활용합니다.')+'<h2>주별 노트와 분기별 노트</h2>'+p('기본으로 꺼져 있습니다. <code>#calendarRoot</code> 라벨이 있는 달력 루트에 <code>#enableWeekNote</code>와 <code>#enableQuarterNote</code>를 추가하면 켜집니다. 주별 노트는 연도의 첫 주 설정에 영향을 받습니다. 설정을 바꿔도 기존 노트가 자동으로 변경되지 않으므로 중복에 주의하세요.')+'<h2>템플릿</h2>'+p(a(4,'템플릿')+'을 일일 노트와 함께 사용할 수 있습니다. 달력 루트에 <code>yearTemplate</code>과 <code>quarterTemplate</code> 및 <code>monthTemplate</code>와 <code>weekTemplate</code> 및 <code>dateTemplate</code> 관계를 지정합니다. 분기와 주 템플릿은 해당 기능이 켜져 있어야 적용됩니다. 새 날짜 노트를 만들 때 알맞은 <code>~template</code> 관계를 붙입니다. 매일 반복할 체크리스트 등에 활용할 수 있습니다.')+'<h3>이전 방식에서 옮기기</h3>'+p('0.93.0 이전에는 <code>~child:template=</code> 방식을 사용했을 수 있습니다. 먼저 달력 루트에 새 템플릿 관계를 지정합니다. '+a(5,'일괄 작업')+'으로 일지 아래의 <code>child:template</code>과 <code>child:child:template</code> 관계를 제거하고 이전 설정이 남아 충돌하지 않는지 확인합니다.')+'<h2>자동 제목 형식</h2>'+p('달력 루트에 <code>#datePattern</code>과 <code>#weekPattern</code> 및 <code>#monthPattern</code>와 <code>#quarterPattern</code> 및 <code>#yearPattern</code>을 지정합니다. 각 단계는 자기 단계와 상위 단계의 치환값을 사용할 수 있습니다. 월 형식에는 월·분기·연도 값을 사용할 수 있지만 주 값은 사용할 수 없습니다.')+'<h3>날짜</h3>'+ul(['<code>{isoDate}</code> — ISO 8601 날짜. 예: 2025-03-09','<code>{dateNumber}</code> — 날짜 숫자. 예: 9','<code>{dateNumberPadded}</code> — 두 자리 날짜. 예: 09','<code>{ordinal}</code> — 언어 설정에 따른 서수','<code>{weekDay}</code> — 요일 이름','<code>{weekDay3}</code> — 요일 이름의 앞 세 글자','<code>{weekDay2}</code> — 요일 이름의 앞 두 글자'])+p('기본 형식은 <code>{dateNumberPadded} - {weekDay}</code>입니다.')+'<h3>주</h3>'+ul(['<code>{weekNumber}</code> — 연중 주 번호. 예: 9','<code>{weekNumberPadded}</code> — 두 자리 주 번호. 예: 09','<code>{shortWeek}</code> — 짧은 주 표시. 예: W9','<code>{shortWeek3}</code> — 세 글자 주 표시. 예: W09'])+p('원본 기본 형식은 <code>Week {weekNumber}</code>입니다. 한국어 형식은 <code>{weekNumber}주</code>처럼 지정할 수 있습니다.')+'<h3>월</h3>'+ul(['<code>{isoMonth}</code> — 연도와 월. 예: 2025-03','<code>{monthNumber}</code> — 월 숫자. 예: 9','<code>{monthNumberPadded}</code> — 두 자리 월. 예: 09','<code>{month}</code> — 월 이름','<code>{shortMonth3}</code> — 월 이름의 앞 세 글자','<code>{shortMonth4}</code> — 월 이름의 앞 네 글자'])+p('기본 형식은 <code>{monthNumberPadded} - {month}</code>입니다.')+'<h3>분기</h3>'+p('<code>{quarterNumber}</code>는 분기 숫자이며 <code>{shortQuarter}</code>는 Q1 같은 짧은 표시입니다. 원본 기본 형식은 <code>Quarter {quarterNumber}</code>입니다. 한국어 형식은 <code>{quarterNumber}분기</code>처럼 지정할 수 있습니다.')+'<h3>연도</h3>'+p('<code>{year}</code>는 2025 같은 연도입니다. 기본 형식도 <code>{year}</code>입니다.')+'<h2>스크립트에서 사용</h2>'+p(a(6,'백엔드 스크립트 API')+'의 <code>getDayNote()</code> 등을 사용합니다. 날짜 노트에는 <code>#dateNote="2025-03-09"</code> 같은 라벨이 붙으므로 스크립트에서 찾아 하위 노트를 추가할 수 있습니다.'),
164:({a,img})=>p(img(0,'노트 트리 메뉴'))+p(a(0,'노트 트리')+'에서 마우스 오른쪽 버튼을 누르면 열립니다. 노트 하나에 사용하거나 '+a(1,'여러 노트를 선택')+'한 뒤 사용할 수 있습니다. 오른쪽 버튼으로 누른 노트도 보통 대상에 포함됩니다. 여러 노트를 선택하면 함께 처리할 수 있는 메뉴만 활성화됩니다.')+'<h2>기본 메뉴</h2>'+ul(['새 탭에서 열기 — 노트 하나를 새 '+a(2,'탭')+'에 엽니다.','새 분할 화면에서 열기 — 현재 탭 오른쪽에 노트를 엽니다.','노트 확대 보기 — 트리에 해당 노트와 하위 항목만 표시합니다. '+a(3,'노트 확대 보기')+'를 참고하세요.','다음에 노트 삽입 — 같은 단계에 지정한 '+a(4,'유형')+'의 노트를 만듭니다. 사용 가능한 '+a(5,'템플릿')+'도 목록 끝에 표시됩니다.','하위 노트 삽입 — 선택한 노트 아래에 만듭니다.','하위 트리 보호 — 현재 노트와 모든 하위 노트를 '+a(6,'보호')+'합니다. 하위 트리 보호 해제는 보호를 풉니다.','잘라내기 — 노트를 클립보드에 넣습니다. 붙여넣기로 옮깁니다.','복사·복제 — 붙여넣기로 같은 노트를 다른 위치에도 배치합니다. '+a(7,'복제된 노트')+'는 한곳에서 수정하면 모든 위치에 반영됩니다. 따로 편집할 사본은 하위 트리 사본 만들기를 사용합니다.','안에 붙여넣기 — 현재 노트의 하위 노트로 붙입니다. 다음에 붙여넣기는 같은 단계에 붙입니다.','이동할 위치 선택 — 대상을 지정하는 창을 엽니다.','복제할 위치 선택 — '+a(8,'복제')+' 대상을 지정하는 창을 엽니다.','삭제 — 확인 창을 거쳐 삭제합니다. 모든 복제본도 삭제를 선택하면 '+a(9,'다른 위치의 복제본')+'도 지웁니다. 영구 삭제를 선택하면 '+a(10,'최근 변경 사항')+'에서 복원할 수 없습니다.','노트로 가져오기 — '+a(11,'가져오기')+' 창을 열고 자료를 하위 노트로 넣습니다.','내보내기 — 선택한 노트의 '+a(12,'내보내기')+' 창을 엽니다.','하위 트리에서 검색 — 현재 노트와 하위 항목만 찾도록 상위 노트 조건이 지정된 '+a(13,'검색')+'을 엽니다.'])+'<h2>고급 메뉴</h2>'+p(img(1,'노트 트리의 고급 메뉴'))+ul(['일괄 작업 적용 — '+a(14,'일괄 작업')+' 창에서 '+a(15,'여러 노트')+'에 라벨 추가나 이동 등을 적용합니다.','가지 접두사 편집 — '+a(16,'복제본')+'을 구분할 '+a(17,'접두사')+'를 지정합니다.','첨부 파일로 변환 — 상위 노트의 '+a(18,'첨부 파일')+'로 바꿉니다. 외부에서 가져왔거나 이전 버전에서 만든 이미지 '+a(19,'파일 노트')+'에 유용합니다.','하위 트리 사본 만들기 — 노트와 하위 항목을 별도로 복사합니다. '+a(20,'복제')+'와 달리 원본과 독립적으로 편집합니다. 반복해서 만들려면 '+a(21,'템플릿')+'도 고려하세요.','하위 트리 펼치기와 접기 — '+a(22,'노트 트리')+'의 모든 하위 항목을 펼치거나 접습니다.','정렬 기준 선택 — 하위 노트를 한 번 정렬합니다. 자동 정렬은 '+a(23,'속성')+'으로 설정합니다. '+a(24,'노트 정렬')+'을 참고하세요.','노트 경로 복사 — 현재 가지의 전체 경로를 URL 조각으로 복사합니다. 예: <code>#root/Hb2E70L7HPuf/4sRFgMZhYFts/2IVuShedRJ3U/LJVMvKXOFv7n</code>. '+a(25,'링크')+' 만들기와 '+a(26,'노트 이동')+'에 사용합니다.','하위 트리의 최근 변경 사항 — 해당 노트와 하위 항목의 '+a(27,'최근 변경 사항')+'만 보여 줍니다.'])
};
@@ -0,0 +1,6 @@
const p=s=>'<p>'+s+'</p>';const ul=xs=>'<ul>'+xs.map(s=>'<li>'+s+'</li>').join('')+'</ul>';
const table=rows=>'<figure class="table"><table><thead><tr><th>동작</th><th>PC</th><th>Mac</th></tr></thead><tbody>'+rows.map(([s,k,m])=>'<tr><td>'+s+'</td><td>'+k+'</td><td>'+(m||k)+'</td></tr>').join('')+'</tbody></table></figure>';
export default {
165:({a,img})=>p(img(0,'숨겨진 노트 트리'))+p('Trilium은 여러 기능의 정보를 실제 노트로 저장합니다. 덕분에 '+a(0,'속성')+'과 '+a(1,'관계')+' 및 '+a(2,'검색')+'과 '+a(3,'링크')+'를 활용할 수 있습니다. 트리가 복잡해지거나 실수로 지우는 일을 줄이기 위해 기본적으로 숨겨 둡니다. 일반 노트처럼 '+a(4,'데이터베이스')+'에 저장되지만 특별한 '+a(5,'노트 ID')+'로 구분합니다.')+'<h2>숨겨진 트리 열기</h2>'+p(a(6,'전체 메뉴')+'에서 고급 → 숨겨진 하위 트리 표시를 선택합니다.')+'<h2>구성</h2>'+ul([a(7,'노트 지도')+' — '+a(8,'노트 지도')+' 기능을 '+a(9,'실행 도구 모음')+'에서 열 때 사용하는 노트입니다. 하위 노트를 만들어 지도 모음을 보관하고 다른 곳에서 연결하거나 '+a(10,'북마크')+'로 지정할 수 있습니다.',a(11,'SQL 콘솔 기록')+' — '+a(12,'SQL 콘솔')+'에서 실행한 쿼리를 월별로 보관합니다. 결과는 저장하지 않습니다. '+a(13,'전체 메뉴')+' → 고급 → SQL 콘솔 기록 열기로도 접근합니다. 기록 처리에 영향을 주지 않도록 임의의 하위 노트는 만들지 않는 편이 좋습니다.',a(14,'검색 기록')+' — 전체 '+a(15,'검색')+'의 조건을 월별로 보관합니다. 결과 자체는 저장하지 않습니다. '+a(16,'전체 메뉴')+' → 고급 → 검색 기록 열기로 접근합니다. 임의의 하위 노트는 권장하지 않습니다.',a(17,'일괄 작업')+' — 마지막 '+a(18,'일괄 작업')+' 설정을 각 <code>action</code> 라벨에 보관합니다. 하위 노트를 만들어도 특별한 기능은 없습니다.',a(19,'백엔드 로그')+' — 서버의 '+a(20,'오류 로그')+'를 표시합니다. '+a(21,'전체 메뉴')+' → 고급 → 백엔드 로그 표시로도 엽니다.',a(22,'사용자 숨김 영역')+' — '+a(23,'스크립트')+'가 화면에 직접 표시하지 않을 노트를 보관하는 공간입니다. ID는 <code>_userHidden</code>입니다.',a(24,'실행 도구 템플릿')+' — '+a(25,'실행 도구 모음')+'의 새 항목을 만드는 템플릿입니다. 하위 노트를 만들 수 없습니다. 일부 내용을 바꿀 수는 있지만 보통 필요하지 않습니다.',a(26,'공유 노트')+' — 위치와 관계없이 '+a(27,'공개 공유')+' 중인 노트를 모아 보여 줍니다. '+a(28,'전체 메뉴')+'의 공유 노트 하위 트리 표시로도 엽니다. 하위 노트는 만들 수 없습니다.',a(29,'실행 도구 모음')+' — 사용 가능하거나 화면에 표시 중인 '+a(30,'실행 도구')+'를 담습니다. '+a(31,'전체 메뉴')+'에서 실행 도구 모음 설정을 선택하거나 '+a(32,'실행 도구 모음')+'의 빈 곳을 마우스 오른쪽 버튼으로 눌러 설정합니다. 하위 노트는 만들 수 없습니다.',a(33,'설정')+' — '+a(34,'설정 항목')+'을 저장합니다. '+a(35,'전체 메뉴')+'의 설정 또는 '+a(36,'실행 도구 모음')+'의 설정 아이콘으로 엽니다.',a(37,'모바일 실행 도구 모음')+' — 모바일 화면에서 사용하는 별도 도구 모음입니다. 모바일 화면에서 같은 방법으로 설정합니다.',a(38,'사용자 안내서')+' — 도움말 노트의 구조와 메타데이터를 담습니다. 본문은 앱 디렉터리의 파일에서 읽습니다.']),
166:({a})=>'<h2>Trilium 편집 단축키</h2>'+table([['글자·문단 도구 모음 열기. 좌우 방향키로 이동하고 Enter로 적용','Alt+F10','⌥+F10'],[a(0,'외부 링크')+' 만들기','Ctrl+K','⌘+K'],[a(1,'내부 노트 링크')+' 만들기','Ctrl+L','⌘+L'],['현재 날짜와 시간 삽입','Alt+T','⌥+T'],['문단 들여쓰기','Tab'],['문단 내어쓰기','Shift+Tab'],['선택한 글자를 '+a(2,'단축키 모양')+'으로 표시','Ctrl+Alt+K','⌘+⌥+K'],[a(3,'수식')+' 삽입','Ctrl+M','⌘+M'],['문단이나 목록을 위로 이동','Alt+↑','⌥+↑'],['문단이나 목록을 아래로 이동','Alt+↓','⌥+↓']])+'<h2>공통 단축키</h2>'+p(a(4,'CKEditor')+'의 '+a(5,'공식 안내')+'를 바탕으로 한 목록입니다. Trilium의 구성에 따라 일부 기능은 지원되지 않거나 다른 단축키와 겹칠 수 있습니다. Mac의 기능키는 Fn을 함께 눌러야 할 수 있습니다.')+'<h3>본문 편집</h3>'+table([['새 문단','Enter'],['문단 안에서 줄바꿈','Shift+Enter'],['복사','Ctrl+C','⌘+C'],['붙여넣기','Ctrl+V','⌘+V'],['일반 텍스트로 붙여넣기','Ctrl+Shift+V','⌘+Shift+V'],['실행 취소','Ctrl+Z','⌘+Z'],['다시 실행','Ctrl+Y 또는 Ctrl+Shift+Z','⌘+Y 또는 ⌘+Shift+Z'],['굵게','Ctrl+B','⌘+B'],['대소문자 바꾸기','Shift+F3'],['링크 만들기','Ctrl+K','⌘+K'],['링크나 문장 안의 코드 서식에서 벗어나기','← 두 번 또는 → 두 번'],['모두 선택','Ctrl+A','⌘+A'],['문서에서 찾기','Ctrl+F','⌘+F'],['서식 복사','Ctrl+Shift+C','⌘+Shift+C'],['서식 붙여넣기','Ctrl+Shift+V','⌘+Shift+V'],['기울임','Ctrl+I','⌘+I'],['취소선','Ctrl+Shift+X','⌘+Shift+X'],['밑줄','Ctrl+U','⌘+U'],['방금 적용한 자동 서식 취소','Backspace']])+'<h3>이미지와 표 등 블록 요소</h3>'+table([['위젯 바로 뒤에 문단 삽입','Enter'],['위젯 바로 앞에 문단 삽입','Shift+Enter'],['위젯 앞에서 입력할 위치로 이동','↑ 또는 ←'],['위젯 뒤에서 입력할 위치로 이동','↓ 또는 →'],['그림 설명 같은 내부 편집 영역에서 상위 위젯 선택','Tab 다음 Esc'],['목록 항목 들여쓰기','Tab'],['목록 항목 내어쓰기','Shift+Tab'],['표의 다음 셀로 이동. 마지막 셀에서는 새 행 추가','Tab'],['표의 이전 셀로 이동','Shift+Tab'],['표 안에서 이동','방향키']])+'<h3>화면 조작</h3>'+table([['팝업과 목록 및 대화상자 닫기','Esc'],['접근성 도움말 열기','Alt+0','⌥+0'],['입력란과 버튼 사이 이동','Tab 또는 Shift+Tab'],['도구 모음으로 이동하거나 도구 모음 사이 전환','Alt+F10','⌥+F10'],['도구 모음과 메뉴 안에서 이동','방향키'],['편집기 밖의 다음·이전 요소로 이동','Tab 또는 Shift+Tab'],['선택한 버튼 실행. 본문 관련 버튼은 실행 후 본문으로 초점 이동','Enter 또는 Space'],['열린 대화상자의 안팎으로 초점 이동','Ctrl+F6','⌘+F6']])
};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
{
"translated": 103,
"translated": 173,
"total": 173,
"errors": []
}
@@ -0,0 +1,907 @@
[
{
"noteId": "_help_Otzi9La2YAUX",
"oldTitle": "Installation & Setup",
"title": "설치와 설정"
},
{
"noteId": "_help_poXkQfguuA0U",
"oldTitle": "Desktop Installation",
"title": "데스크톱 설치"
},
{
"noteId": "_help_WOcw2SLH6tbX",
"oldTitle": "Server Installation",
"title": "서버 설치"
},
{
"noteId": "_help_Dgg7bR3b6K9j",
"oldTitle": "1. Installing the server",
"title": "1. 서버 설치"
},
{
"noteId": "_help_3tW6mORuTHnB",
"oldTitle": "Packaged version for Linux",
"title": "Linux 패키지 설치"
},
{
"noteId": "_help_rWX5eY045zbE",
"oldTitle": "Using Docker",
"title": "Docker로 설치"
},
{
"noteId": "_help_moVgBcoxE3EK",
"oldTitle": "On NixOS",
"title": "NixOS에 설치"
},
{
"noteId": "_help_J1Bb6lVlwU5T",
"oldTitle": "Manually",
"title": "직접 설치"
},
{
"noteId": "_help_DCmT6e7clMoP",
"oldTitle": "Using Kubernetes",
"title": "Kubernetes로 설치"
},
{
"noteId": "_help_klCWNks3ReaQ",
"oldTitle": "Multiple server instances",
"title": "여러 서버 인스턴스"
},
{
"noteId": "_help_vcjrb3VVYPZI",
"oldTitle": "2. Reverse proxy",
"title": "2. 리버스 프록시"
},
{
"noteId": "_help_ud6MShXL4WpO",
"oldTitle": "Nginx",
"title": "Nginx 설정"
},
{
"noteId": "_help_fDLvzOx29Pfg",
"oldTitle": "Apache",
"title": "Apache 설정"
},
{
"noteId": "_help_l2VkvOwUNfZj",
"oldTitle": "TLS Configuration",
"title": "TLS 설정"
},
{
"noteId": "_help_0hzsNCP31IAB",
"oldTitle": "Authentication",
"title": "인증"
},
{
"noteId": "_help_7DAiwaf8Z7Rz",
"oldTitle": "Multi-Factor Authentication",
"title": "다중 인증"
},
{
"noteId": "_help_cbkrhQjrkKrh",
"oldTitle": "Synchronization",
"title": "동기화"
},
{
"noteId": "_help_RDslemsQ6gCp",
"oldTitle": "Mobile Frontend",
"title": "모바일 화면"
},
{
"noteId": "_help_MtPxeAWVAzMg",
"oldTitle": "Web Clipper",
"title": "웹 클리퍼"
},
{
"noteId": "_help_n1lujUxCwipy",
"oldTitle": "Upgrading TriliumNext",
"title": "TriliumNext 업데이트"
},
{
"noteId": "_help_ODY7qQn5m2FT",
"oldTitle": "Backup",
"title": "백업"
},
{
"noteId": "_help_tAassRL4RSQL",
"oldTitle": "Data directory",
"title": "데이터 폴더"
},
{
"noteId": "_help_gh7bpGYxajRS",
"oldTitle": "Basic Concepts and Features",
"title": "기본 개념과 기능"
},
{
"noteId": "_help_Vc8PjrjAGuOp",
"oldTitle": "UI Elements",
"title": "화면 구성 요소"
},
{
"noteId": "_help_x0JgW8UqGXvq",
"oldTitle": "Vertical and horizontal layout",
"title": "세로 배치와 가로 배치"
},
{
"noteId": "_help_x3i7MxGccDuM",
"oldTitle": "Global menu",
"title": "전체 메뉴"
},
{
"noteId": "_help_oPVyFC7WL2Lp",
"oldTitle": "Note Tree",
"title": "노트 트리"
},
{
"noteId": "_help_YtSN43OrfzaA",
"oldTitle": "Note tree contextual menu",
"title": "노트 트리 메뉴"
},
{
"noteId": "_help_yTjUdsOi4CIE",
"oldTitle": "Multiple selection",
"title": "여러 노트 선택"
},
{
"noteId": "_help_BlN9DFI679QC",
"oldTitle": "Ribbon",
"title": "상단 리본"
},
{
"noteId": "_help_3seOhtN8uLIY",
"oldTitle": "Tabs",
"title": "탭"
},
{
"noteId": "_help_xYmIYSP6wE3F",
"oldTitle": "Launch Bar",
"title": "실행 도구 모음"
},
{
"noteId": "_help_8YBEPzcpUgxw",
"oldTitle": "Note buttons",
"title": "노트 버튼"
},
{
"noteId": "_help_4TIF1oA4VQRO",
"oldTitle": "Options",
"title": "설정"
},
{
"noteId": "_help_luNhaphA37EO",
"oldTitle": "Split View",
"title": "분할 보기"
},
{
"noteId": "_help_XpOYSgsLkTJy",
"oldTitle": "Floating buttons",
"title": "떠 있는 버튼"
},
{
"noteId": "_help_RnaPdbciOfeq",
"oldTitle": "Right Sidebar",
"title": "오른쪽 사이드바"
},
{
"noteId": "_help_r5JGHN99bVKn",
"oldTitle": "Recent Changes",
"title": "최근 변경 사항"
},
{
"noteId": "_help_ny318J39E5Z0",
"oldTitle": "Zoom",
"title": "화면 확대와 축소"
},
{
"noteId": "_help_BFs8mudNFgCS",
"oldTitle": "Notes",
"title": "노트"
},
{
"noteId": "_help_p9kXRFAkwN4o",
"oldTitle": "Note Icons",
"title": "노트 아이콘"
},
{
"noteId": "_help_0vhv7lsOLy82",
"oldTitle": "Attachments",
"title": "첨부 파일"
},
{
"noteId": "_help_IakOLONlIfGI",
"oldTitle": "Cloning Notes",
"title": "노트 복제"
},
{
"noteId": "_help_TBwsyfadTA18",
"oldTitle": "Branch prefix",
"title": "가지 접두사"
},
{
"noteId": "_help_bwg0e8ewQMak",
"oldTitle": "Protected Notes",
"title": "보호된 노트"
},
{
"noteId": "_help_MKmLg5x6xkor",
"oldTitle": "Archived Notes",
"title": "보관된 노트"
},
{
"noteId": "_help_vZWERwf8U3nx",
"oldTitle": "Note Revisions",
"title": "노트 수정 이력"
},
{
"noteId": "_help_aGlEvb9hyDhS",
"oldTitle": "Sorting Notes",
"title": "노트 정렬"
},
{
"noteId": "_help_NRnIZmSMc5sj",
"oldTitle": "Export as PDF",
"title": "PDF로 내보내기"
},
{
"noteId": "_help_CoFPLs3dRlXc",
"oldTitle": "Read-Only Notes",
"title": "읽기 전용 노트"
},
{
"noteId": "_help_0ESUbbAxVnoK",
"oldTitle": "Note List",
"title": "노트 목록"
},
{
"noteId": "_help_xWbu3jpNWapp",
"oldTitle": "Calendar View",
"title": "달력 보기"
},
{
"noteId": "_help_wArbEsdSae6g",
"oldTitle": "Navigation",
"title": "노트 탐색"
},
{
"noteId": "_help_kBrnXNG3Hplm",
"oldTitle": "Tree Concepts",
"title": "트리의 개념"
},
{
"noteId": "_help_MMiBEQljMQh2",
"oldTitle": "Note Navigation",
"title": "노트 이동"
},
{
"noteId": "_help_Ms1nauBra7gq",
"oldTitle": "Quick search",
"title": "빠른 검색"
},
{
"noteId": "_help_F1r9QtzQLZqm",
"oldTitle": "Jump to Note",
"title": "노트로 이동"
},
{
"noteId": "_help_eIg8jdvaoNNd",
"oldTitle": "Search",
"title": "검색"
},
{
"noteId": "_help_u3YFHC9tQlpm",
"oldTitle": "Bookmarks",
"title": "북마크"
},
{
"noteId": "_help_OR8WJ7Iz9K4U",
"oldTitle": "Note Hoisting",
"title": "노트 확대 보기"
},
{
"noteId": "_help_9sRHySam5fXb",
"oldTitle": "Workspaces",
"title": "작업 공간"
},
{
"noteId": "_help_xWtq5NUHOwql",
"oldTitle": "Similar Notes",
"title": "비슷한 노트"
},
{
"noteId": "_help_McngOG2jbUWX",
"oldTitle": "Search in note",
"title": "노트 안에서 찾기"
},
{
"noteId": "_help_A9Oc6YKKc65v",
"oldTitle": "Keyboard Shortcuts",
"title": "키보드 단축키"
},
{
"noteId": "_help_Wy267RK4M69c",
"oldTitle": "Themes",
"title": "테마"
},
{
"noteId": "_help_VbjZvtUek0Ln",
"oldTitle": "Theme Gallery",
"title": "테마 모음"
},
{
"noteId": "_help_mHbBMPDPkVV5",
"oldTitle": "Import & Export",
"title": "가져오기와 내보내기"
},
{
"noteId": "_help_Oau6X9rCuegd",
"oldTitle": "Markdown",
"title": "Markdown"
},
{
"noteId": "_help_syuSEKf2rUGr",
"oldTitle": "Evernote",
"title": "Evernote"
},
{
"noteId": "_help_GnhlmrATVqcH",
"oldTitle": "OneNote",
"title": "OneNote"
},
{
"noteId": "_help_rC3pL2aptaRE",
"oldTitle": "Zen mode",
"title": "집중 모드"
},
{
"noteId": "_help_s3YCWHBfmYuM",
"oldTitle": "Quick Start",
"title": "빠른 시작"
},
{
"noteId": "_help_i6dbnitykE5D",
"oldTitle": "FAQ",
"title": "자주 묻는 질문"
},
{
"noteId": "_help_KSZ04uQ2D1St",
"oldTitle": "Note Types",
"title": "노트 유형"
},
{
"noteId": "_help_iPIMuisry3hd",
"oldTitle": "Text",
"title": "텍스트"
},
{
"noteId": "_help_NwBbFdNZ9h7O",
"oldTitle": "Block quotes & admonitions",
"title": "인용문과 안내 상자"
},
{
"noteId": "_help_oSuaNgyyKnhu",
"oldTitle": "Bookmarks",
"title": "북마크"
},
{
"noteId": "_help_veGu4faJErEM",
"oldTitle": "Content language & Right-to-left support",
"title": "본문 언어와 오른쪽에서 왼쪽으로 쓰기"
},
{
"noteId": "_help_2x0ZAX9ePtzV",
"oldTitle": "Cut to subnote",
"title": "하위 노트로 잘라내기"
},
{
"noteId": "_help_UYuUB1ZekNQU",
"oldTitle": "Developer-specific formatting",
"title": "개발자용 서식"
},
{
"noteId": "_help_QxEyIjRBizuC",
"oldTitle": "Code blocks",
"title": "코드 블록"
},
{
"noteId": "_help_AgjCISero73a",
"oldTitle": "Footnotes",
"title": "각주"
},
{
"noteId": "_help_nRhnJkTT8cPs",
"oldTitle": "Formatting toolbar",
"title": "서식 도구 모음"
},
{
"noteId": "_help_Gr6xFaF6ioJ5",
"oldTitle": "General formatting",
"title": "일반 서식"
},
{
"noteId": "_help_AxshuNRegLAv",
"oldTitle": "Highlights list",
"title": "강조 표시 목록"
},
{
"noteId": "_help_mT0HEkOsz6i1",
"oldTitle": "Images",
"title": "이미지"
},
{
"noteId": "_help_0Ofbk1aSuVRu",
"oldTitle": "Image references",
"title": "이미지 참조"
},
{
"noteId": "_help_nBAXQFj20hS1",
"oldTitle": "Include Note",
"title": "노트 포함"
},
{
"noteId": "_help_CohkqWQC1iBv",
"oldTitle": "Insert buttons",
"title": "삽입 메뉴"
},
{
"noteId": "_help_oiVPnW8QfnvS",
"oldTitle": "Keyboard shortcuts",
"title": "편집 단축키"
},
{
"noteId": "_help_QEAPj01N5f7w",
"oldTitle": "Links",
"title": "링크"
},
{
"noteId": "_help_S6Xx8QIWTV66",
"oldTitle": "Lists",
"title": "목록"
},
{
"noteId": "_help_QrtTYPmdd1qq",
"oldTitle": "Markdown-like formatting",
"title": "Markdown식 자동 서식"
},
{
"noteId": "_help_YfYAtQBcfo5V",
"oldTitle": "Math Equations",
"title": "수식"
},
{
"noteId": "_help_dEHYtoWWi8ct",
"oldTitle": "Other features",
"title": "기타 기능"
},
{
"noteId": "_help_BFvAtE74rbP6",
"oldTitle": "Table of contents",
"title": "목차"
},
{
"noteId": "_help_NdowYOC1GFKS",
"oldTitle": "Tables",
"title": "표"
},
{
"noteId": "_help_6f9hih2hXXZk",
"oldTitle": "Code",
"title": "코드"
},
{
"noteId": "_help_m523cpzocqaD",
"oldTitle": "Saved Search",
"title": "저장된 검색"
},
{
"noteId": "_help_iRwzGnHPzonm",
"oldTitle": "Relation Map",
"title": "관계도"
},
{
"noteId": "_help_bdUJEHsAPYQR",
"oldTitle": "Note Map",
"title": "노트 지도"
},
{
"noteId": "_help_HcABDtFCkbFN",
"oldTitle": "Render Note",
"title": "렌더링 노트"
},
{
"noteId": "_help_GTwFsgaA0lCt",
"oldTitle": "Book",
"title": "책"
},
{
"noteId": "_help_s1aBHPd79XYj",
"oldTitle": "Mermaid Diagrams",
"title": "Mermaid 도표"
},
{
"noteId": "_help_RH6yLjjWJHof",
"oldTitle": "ELK layout",
"title": "ELK 배치"
},
{
"noteId": "_help_grjYqerjn243",
"oldTitle": "Canvas",
"title": "캔버스"
},
{
"noteId": "_help_1vHRoWCEjj0L",
"oldTitle": "Web View",
"title": "웹 보기"
},
{
"noteId": "_help_gBbsAeiuUxI5",
"oldTitle": "Mind Map",
"title": "마인드맵"
},
{
"noteId": "_help_81SGnPGMk7Xc",
"oldTitle": "Geo Map",
"title": "지리 지도"
},
{
"noteId": "_help_W8vYD3Q1zjCR",
"oldTitle": "File",
"title": "파일"
},
{
"noteId": "_help_BgmBlOIl72jZ",
"oldTitle": "Troubleshooting",
"title": "문제 해결"
},
{
"noteId": "_help_wy8So3yZZlH9",
"oldTitle": "Reporting issues",
"title": "문제 제보"
},
{
"noteId": "_help_x59R8J8KV5Bp",
"oldTitle": "Anonymized Database",
"title": "익명화한 데이터베이스"
},
{
"noteId": "_help_qzNzp9LYQyPT",
"oldTitle": "Error logs",
"title": "오류 로그"
},
{
"noteId": "_help_vdlYGAcpXAgc",
"oldTitle": "Synchronization fails with 504 Gateway Timeout",
"title": "504 오류로 동기화가 실패할 때"
},
{
"noteId": "_help_s8alTXmpFR61",
"oldTitle": "Refreshing the application",
"title": "앱 새로고침"
},
{
"noteId": "_help_pKK96zzmvBGf",
"oldTitle": "Theme development",
"title": "테마 개발"
},
{
"noteId": "_help_7NfNr5pZpVKV",
"oldTitle": "Creating a custom theme",
"title": "사용자 테마 만들기"
},
{
"noteId": "_help_WFGzWeUK6arS",
"oldTitle": "Customize the Next theme",
"title": "Next 테마 수정"
},
{
"noteId": "_help_WN5z4M8ASACJ",
"oldTitle": "Reference",
"title": "테마 개발 참고 자료"
},
{
"noteId": "_help_AlhDUqhENtH7",
"oldTitle": "Custom app-wide CSS",
"title": "앱 전체 사용자 CSS"
},
{
"noteId": "_help_tC7s2alapj8V",
"oldTitle": "Advanced Usage",
"title": "고급 사용법"
},
{
"noteId": "_help_zEY4DaJG4YT5",
"oldTitle": "Attributes",
"title": "속성"
},
{
"noteId": "_help_HI6GBBIduIgv",
"oldTitle": "Labels",
"title": "라벨"
},
{
"noteId": "_help_Cq5X6iKQop6R",
"oldTitle": "Relations",
"title": "관계"
},
{
"noteId": "_help_bwZpz2ajCEwO",
"oldTitle": "Attribute Inheritance",
"title": "속성 상속"
},
{
"noteId": "_help_OFXdgB2nNk1F",
"oldTitle": "Promoted Attributes",
"title": "주요 속성"
},
{
"noteId": "_help_KC1HB96bqqHX",
"oldTitle": "Templates",
"title": "템플릿"
},
{
"noteId": "_help_BCkXAVs63Ttv",
"oldTitle": "Note Map (Link map, Tree map)",
"title": "노트 지도와 연결 지도 및 트리 지도"
},
{
"noteId": "_help_R9pX4DGra2Vt",
"oldTitle": "Sharing",
"title": "공개 공유"
},
{
"noteId": "_help_Qjt68inQ2bRj",
"oldTitle": "Serving directly the content of a note",
"title": "노트 원문 제공"
},
{
"noteId": "_help_5668rwcirq1t",
"oldTitle": "Advanced Showcases",
"title": "고급 활용 예제"
},
{
"noteId": "_help_l0tKav7yLHGF",
"oldTitle": "Day Notes",
"title": "일일 노트"
},
{
"noteId": "_help_R7abl2fc6Mxi",
"oldTitle": "Weight Tracker",
"title": "체중 기록"
},
{
"noteId": "_help_xYjQUYhpbUEW",
"oldTitle": "Task Manager",
"title": "할 일 관리자"
},
{
"noteId": "_help_J5Ex1ZrMbyJ6",
"oldTitle": "Custom Request Handler",
"title": "사용자 요청 처리기"
},
{
"noteId": "_help_d3fAXQ2diepH",
"oldTitle": "Custom Resource Providers",
"title": "사용자 리소스 제공자"
},
{
"noteId": "_help_pgxEVkzLl1OP",
"oldTitle": "ETAPI (REST API)",
"title": "ETAPI와 REST API"
},
{
"noteId": "_help_9qPsTWBorUhQ",
"oldTitle": "API Reference",
"title": "API 참고 자료"
},
{
"noteId": "_help_47ZrP6FNuoG8",
"oldTitle": "Default Note Title",
"title": "기본 노트 제목"
},
{
"noteId": "_help_wX4HbRucYSDD",
"oldTitle": "Database",
"title": "데이터베이스"
},
{
"noteId": "_help_oyIAJ9PvvwHX",
"oldTitle": "Manually altering the database",
"title": "데이터베이스 직접 수정"
},
{
"noteId": "_help_YKWqdJhzi2VY",
"oldTitle": "SQL Console",
"title": "SQL 콘솔"
},
{
"noteId": "_help_6tZeKvSHEUiB",
"oldTitle": "Demo Notes",
"title": "기본 예제 노트"
},
{
"noteId": "_help_Gzjqa934BdH4",
"oldTitle": "Configuration (config.ini or environment variables)",
"title": "설정 파일과 환경 변수"
},
{
"noteId": "_help_c5xB8m4g2IY6",
"oldTitle": "Trilium instance",
"title": "Trilium 인스턴스"
},
{
"noteId": "_help_LWtBjFej3wX3",
"oldTitle": "Cross-Origin Resource Sharing (CORS)",
"title": "교차 출처 리소스 공유와 CORS"
},
{
"noteId": "_help_ivYnonVFBxbQ",
"oldTitle": "Bulk Actions",
"title": "일괄 작업"
},
{
"noteId": "_help_4FahAwuGTAwC",
"oldTitle": "Note source",
"title": "노트 소스"
},
{
"noteId": "_help_1YeN2MzFUluU",
"oldTitle": "Technologies used",
"title": "사용 기술"
},
{
"noteId": "_help_MI26XDLSAlCD",
"oldTitle": "CKEditor",
"title": "CKEditor"
},
{
"noteId": "_help_N4IDkixaDG9C",
"oldTitle": "MindElixir",
"title": "MindElixir"
},
{
"noteId": "_help_H0mM1lTxF9JI",
"oldTitle": "Excalidraw",
"title": "Excalidraw"
},
{
"noteId": "_help_MQHyy2dIFgxS",
"oldTitle": "Leaflet",
"title": "Leaflet"
},
{
"noteId": "_help_m1lbrzyKDaRB",
"oldTitle": "Note ID",
"title": "노트 ID"
},
{
"noteId": "_help_0vTSyvhPTAOz",
"oldTitle": "Internal API",
"title": "내부 API"
},
{
"noteId": "_help_z8O2VG4ZZJD7",
"oldTitle": "API Reference",
"title": "API 참고 자료"
},
{
"noteId": "_help_2mUhVmZK8RF3",
"oldTitle": "Hidden Notes",
"title": "숨겨진 노트"
},
{
"noteId": "_help_uYF7pmepw27K",
"oldTitle": "Metrics",
"title": "운영 지표"
},
{
"noteId": "_help_bOP3TB56fL1V",
"oldTitle": "grafana-dashboard.json",
"title": "Grafana 대시보드 예제 (grafana-dashboard.json)"
},
{
"noteId": "_help_LMAv4Uy3Wk6J",
"oldTitle": "AI",
"title": "AI"
},
{
"noteId": "_help_GBBMSlVSOIGP",
"oldTitle": "Introduction",
"title": "AI 기능 소개"
},
{
"noteId": "_help_WkM7gsEUyCXs",
"oldTitle": "AI Provider Information",
"title": "AI 제공자 안내"
},
{
"noteId": "_help_7EdTxPADv95W",
"oldTitle": "Ollama",
"title": "Ollama"
},
{
"noteId": "_help_vvUCN7FDkq7G",
"oldTitle": "Installing Ollama",
"title": "Ollama 설치"
},
{
"noteId": "_help_ZavFigBX9AwP",
"oldTitle": "OpenAI",
"title": "OpenAI"
},
{
"noteId": "_help_e0lkirXEiSNc",
"oldTitle": "Anthropic",
"title": "Anthropic"
},
{
"noteId": "_help_CdNpE2pqjmI6",
"oldTitle": "Scripting",
"title": "스크립트"
},
{
"noteId": "_help_yIhgI5H7A2Sm",
"oldTitle": "Frontend Basics",
"title": "프런트엔드 기초"
},
{
"noteId": "_help_es8OU2GuguFU",
"oldTitle": "Examples",
"title": "예제"
},
{
"noteId": "_help_TjLYAo3JMO8X",
"oldTitle": "\"New Task\" launcher button",
"title": "새 할 일 실행 버튼"
},
{
"noteId": "_help_7kZPMD0uFwkH",
"oldTitle": "Downloading responses from Google Forms",
"title": "Google 설문지 응답 내려받기"
},
{
"noteId": "_help_DL92EjAaXT26",
"oldTitle": "Using promoted attributes to configure scripts",
"title": "주요 속성으로 스크립트 설정"
},
{
"noteId": "_help_GPERMystNGTB",
"oldTitle": "Events",
"title": "이벤트"
},
{
"noteId": "_help_MgibgPcfeuGz",
"oldTitle": "Custom Widgets",
"title": "사용자 위젯"
},
{
"noteId": "_help_YNxAqkI5Kg1M",
"oldTitle": "Word count widget",
"title": "단어 수 위젯"
},
{
"noteId": "_help_SynTBQiBsdYJ",
"oldTitle": "Widget Basics",
"title": "위젯 기초"
},
{
"noteId": "_help_GLks18SNjxmC",
"oldTitle": "Script API",
"title": "스크립트 API"
},
{
"noteId": "_help_Q2z6av6JZVWm",
"oldTitle": "Frontend API",
"title": "프런트엔드 API"
},
{
"noteId": "_help_habiZ3HU8Kw8",
"oldTitle": "FNote",
"title": "프런트엔드 노트 객체 (FNote)"
},
{
"noteId": "_help_MEtfsqa5VwNi",
"oldTitle": "Backend API",
"title": "백엔드 API"
}
]
File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
<p><img style="aspect-ratio:1363/1364;" src="Introduction_image.png" width="1363"
height="1364" alt="노트에 관해 AI와 대화하는 예제"></p><p>Trilium의 AI 기능은 노트를 바탕으로 대화하고 정보를 찾도록 도와줍니다. 이 버전은 OpenAI와 Anthropic 및 Ollama 같은 제공자와의 대화뿐 아니라 도구 호출과 임베딩을 지원합니다.</p><p>설정의 AI/LLM 항목을 열고 기능을 켭니다.</p><p><img style="aspect-ratio:1916/1906;" src="5_Introduction_image.png" width="1916"
height="1906" alt="AI 설정 위치"></p><p><img style="aspect-ratio:1911/997;" src="1_Introduction_image.png" width="1911"
height="997" alt="AI 기능 켜기"></p><h2>임베딩</h2><p>임베딩은 노트의 의미를 수치로 표현한 자료입니다. 사람이 읽는 요약문과는 다릅니다. 코사인 유사도 같은 계산으로 대화에 관련된 노트를 찾아 AI에 전달하는 데 활용합니다. 이 버전에서는 OpenAI와 Voyage AI 및 Ollama로 임베딩을 만들 수 있습니다.</p><p>다음 예제는 직접 운영하는 Ollama를 사용합니다. 설치 방법은 <a class="reference-link"
href="#root/_help_vvUCN7FDkq7G">Ollama 설치</a>를 참고하세요. <a
href="https://ollama.com/search?c=embedding">Ollama 임베딩 모델 목록</a>에서 모델을 찾아 <code>pull</code> 명령으로 가져옵니다. 원문의 2025년 4월 예제는 <code>mxbai-embed-large</code>를 사용합니다.</p><p>제공자 탭에서 Ollama를 선택하고 기본 URL을 입력합니다. 같은 컴퓨터에서 실행하는 예제 주소는 <code>http://localhost:11434</code>입니다. 새로고침 버튼으로 모델 목록을 불러옵니다.</p><p><img style="aspect-ratio:1912/1075;" src="4_Introduction_image.png" width="1912"
height="1075" alt="Ollama 주소와 모델 목록 설정"></p><p>임베딩 모델 목록에서는 임베딩용 모델이 위쪽에 표시되고 일반 대화 모델과 구분선으로 나뉩니다.</p><p><img style="aspect-ratio:1232/959;" src="8_Introduction_image.png" width="1232"
height="959" alt="임베딩 모델 선택"></p><p>모델을 선택하면 임베딩 생성이 시작됩니다. 설정 위쪽의 통계에서 진행 상황을 확인합니다.</p><p><img style="aspect-ratio:1333/499;" src="7_Introduction_image.png" width="1333"
height="499" alt="임베딩 생성 통계"></p><p>생성이 시작되지 않으면 설정 아래쪽에서 모든 임베딩 다시 만들기를 누릅니다.</p><p><img style="aspect-ratio:1337/1490;" src="3_Introduction_image.png" width="1337"
height="1490" alt="모든 임베딩 다시 만들기"></p><p>생성에는 시간이 걸립니다. 노트를 만들거나 수정하거나 삭제하면 관련 임베딩도 갱신됩니다. 제공자나 모델을 바꾸면 전체 임베딩을 다시 만들어야 합니다.</p><h2>도구</h2><p>AI가 사용할 수 있도록 제공하는 함수입니다. 모델이 도구 이름과 인수를 요청하면 Trilium이 실행하고 결과를 대화에 전달합니다. 이 버전에는 다음 도구가 포함되어 있습니다.</p><ul><li><code>search_notes</code> — 의미 기반 검색</li><li><code>keyword_search</code> — 검색어 기반 검색</li><li><code>attribute_search</code> — 속성 검색</li><li><code>search_suggestion</code> — 검색 문법 지원</li><li><code>read_note</code> — 노트 본문 읽기</li><li><code>create_note</code> — 노트 만들기</li><li><code>update_note</code> — 노트 수정</li><li><code>manage_attributes</code> — 노트 속성 관리</li><li><code>manage_relationships</code> — 노트 사이의 관계 관리</li><li><code>extract_content</code> — 노트에서 내용 추출</li><li><code>calendar_integration</code> — 날짜 노트 검색과 생성 및 오늘의 노트 조회</li></ul><p>대화 중 도구가 실행되면 다음처럼 결과가 표시됩니다. 특정 도구를 직접 지시하지 않아도 모델이 필요에 따라 선택할 수 있습니다.</p><p><img style="aspect-ratio:1372/1591;" src="6_Introduction_image.png" width="1372"
height="1591" alt="대화 중 도구 실행 결과"></p><h2>대화 시작</h2><p>노트와 대화 버튼으로 시작합니다.</p><p><img style="aspect-ratio:1378/539;" src="2_Introduction_image.png" width="1378"
height="539" alt="노트와 대화 버튼"></p><p>버튼이 보이지 않으면 실행 도구 모음 설정에서 사용 가능한 실행 도구를 표시할 실행 도구 영역으로 옮기세요.</p><p><img style="aspect-ratio:1765/1287;" src="9_Introduction_image.png" width="1765"
height="1287" alt="대화 실행 도구 표시"></p>
@@ -0,0 +1,26 @@
<p>할 일 관리는 <a href="#root/_help_OFXdgB2nNk1F">주요 속성</a>과 <a
href="#root/_help_CdNpE2pqjmI6">스크립트</a>를 활용하는 <a href="#root/_help_wX4HbRucYSDD">기본 예제</a>입니다.</p><h2>동작 예시</h2><p><img src="Task Manager_task-manager.png" alt="할 일 관리 예제"></p><p>할 일과 완료된 일을 구분합니다. <code>doneDate</code>에 값이 있으면 완료된 일로 처리합니다. 아직 하지 않은 일은 장소와 태그로 분류하며 속성을 바꾸면 알맞은 위치로 자동 이동합니다.</p><p><a href="#root/_help_l0tKav7yLHGF">날짜별 노트</a>와도 연동합니다. 예정일인 <code>todoDate</code>와 완료일인 <code>doneDate</code>에 해당하는 날짜 노트 아래에 같은 작업을 <a href="#root/_help_IakOLONlIfGI">복제</a>하고 원본 예제에서는 TODO와 DONE <a href="#root/_help_kBrnXNG3Hplm">접두사</a>로 구분합니다.</p><h2>구현</h2><p>새 작업을 넣는 노트의 <code>~child:template</code> <a
href="#root/_help_zEY4DaJG4YT5">관계</a>가 작업 템플릿을 가리킵니다. <a href="#root/_help_bwZpz2ajCEwO">속성 상속</a>을 참고하세요.</p><h3>속성</h3><p>템플릿에서 예정일과 완료일 및 태그와 장소를 <a href="#root/_help_OFXdgB2nNk1F">주요 속성</a>으로 표시합니다. <code>~runOnAttributeChange</code>는 속성이 바뀔 때 실행할 <a href="#root/_help_GPERMystNGTB">이벤트</a> 처리기를 연결합니다. 이 <a href="#root/_help_CdNpE2pqjmI6">스크립트</a>는 완료일을 입력하면 완료 목록으로 옮기고 할 일과 장소 및 태그 목록에서 제거합니다.</p><h3>새 할 일 버튼</h3><pre><code class="language-text-x-trilium-auto">api.addButtonToToolbar({
title: '새 할 일',
icon: 'check',
shortcut: 'alt+n',
action: async () =&gt; {
// 노트 생성은 백엔드에서 처리합니다.
const taskNoteId = await api.runOnBackend(async () =&gt; {
const todoRootNote = await api.getNoteWithLabel('taskTodoRoot');
const {note} = await api.createNote(todoRootNote.noteId, '새 할 일', '');
return note.noteId;
});
// 생성한 노트를 바로 엽니다.
await api.activateNewNote(taskNoteId);
}
});</code></pre><h3>색상</h3><p>다음 CSS <a href="#root/_help_6f9hih2hXXZk">코드 노트</a>는 할 일을 빨간색으로 표시하고 완료한 일을 초록색으로 표시합니다.</p><pre><code class="language-text-x-trilium-auto">span.fancytree-node.todo .fancytree-title {
color: red !important;
}
span.fancytree-node.done .fancytree-title {
color: green !important;
}</code></pre><p>이 <a href="#root/_help_6f9hih2hXXZk">코드 노트</a>에 <code>#appCss</code> <a
href="#root/_help_zEY4DaJG4YT5">라벨</a>을 지정하면 시작할 때 적용됩니다. 이벤트 처리기는 상태에 따라 <code>#cssClass</code> 값으로 <code>todo</code>나 <code>done</code>을 지정합니다.</p>
@@ -0,0 +1,46 @@
<p><img src="Weight Tracker_image.png" alt="체중 기록 예제"></p><p>체중 기록은 <a href="#root/_help_GLks18SNjxmC">스크립트 API</a>를 활용하는 <a href="#root/_help_wX4HbRucYSDD">기본 예제</a>입니다. <code>weight</code>를 <a href="#root/_help_OFXdgB2nNk1F">주요 속성</a>으로 지정한 <a href="#root/_help_KC1HB96bqqHX">템플릿</a>에서 <a href="#root/_help_l0tKav7yLHGF">날짜별 노트</a>를 만들면 체중을 입력하고 시간에 따른 변화를 차트로 볼 수 있습니다.</p><h2>구현 방식</h2><p>체중 기록 화면은 HTML 표시 노트입니다. 자체 본문 대신 <a href="#root/_help_CdNpE2pqjmI6">스크립트</a>의 결과를 표시하는 영역을 제공합니다. <code>~renderNote</code> <a href="#root/_help_zEY4DaJG4YT5">관계</a>로 구현용 노트와 연결합니다.</p><p>구현에는 HTML과 JavaScript <a href="#root/_help_6f9hih2hXXZk">코드 노트</a>가 사용됩니다. <code>weight</code> 속성이 있는 노트를 모아 차트로 표시합니다. 차트 라이브러리 <a
href="https://www.chartjs.org/">Chart.js</a>는 Trilium에 내장되어 있지 않으므로 첨부 파일로 가져옵니다.</p><h3>코드</h3><p>다음 코드를 프런트엔드 JavaScript <a href="#root/_help_6f9hih2hXXZk">코드 노트</a>에 작성합니다.</p><pre><code class="language-text-x-trilium-auto">async function getChartData() {
const days = await api.runOnBackend(async () =&gt; {
const notes = api.getNotesWithLabel('weight');
const days = [];
for (const note of notes) {
const date = note.getLabelValue('dateNote');
const weight = parseFloat(note.getLabelValue('weight'));
if (date &amp;&amp; weight) {
days.push({ date, weight });
}
}
days.sort((a, b) =&gt; a.date &gt; b.date ? 1 : -1);
return days;
});
const datasets = [
{
label: "체중 (kg)",
backgroundColor: 'red',
borderColor: 'red',
data: days.map(day =&gt; day.weight),
fill: false,
spanGaps: true,
datalabels: {
display: false
}
}
];
return {
datasets: datasets,
labels: days.map(day =&gt; day.date)
};
}
const ctx = $("#canvas")[0].getContext("2d");
new chartjs.Chart(ctx, {
type: 'line',
data: await getChartData()
});</code></pre><h2>상단 버튼 숨기기</h2><p>체중 기록의 연결된 노트 중 버튼 구현 노트를 찾아 본문을 지우거나 주석으로 처리하세요. Trilium을 다시 시작하면 체중 기록 버튼이 표시되지 않습니다.</p>
@@ -0,0 +1,2 @@
<p>상속은 <a href="#root/_help_HI6GBBIduIgv">라벨</a>이나 <a href="#root/_help_Cq5X6iKQop6R">관계</a>를 여러 노트에 공통으로 적용하는 기능입니다. 주로 상위·하위 노트 사이에 적용하며 템플릿으로도 사용할 수 있습니다.</p><h2>일반 상속</h2><p><code>isInheritable</code>을 <code>true</code>로 지정하면 해당 속성을 현재 노트와 모든 하위 노트에 적용합니다. <a
class="reference-link" href="#root/_help_HI6GBBIduIgv">라벨</a>과 <a class="reference-link" href="#root/_help_Cq5X6iKQop6R">관계</a> 편집 화면에서 설정하거나 <code>#myLabel(inheritable)=value</code>처럼 작성할 수 있습니다.</p><p>예를 들어 <code>archived</code> 라벨의 상속을 켜면 하위 트리 전체를 검색 등의 목록에서 숨길 수 있습니다. 일반 상속은 모든 하위 노트에 적용됩니다. 일부 노트에서 개별적으로 바꿔야 한다면 복사 상속이나 템플릿 방식을 사용하세요.</p><h2>복사 상속</h2><p>속성 이름 앞에 <code>child:</code>를 붙이면 새 하위 노트에 해당 속성을 복사합니다. 복사된 속성은 독립적이며 노트를 다른 위치로 옮겨도 유지됩니다.</p><p><code>#child:exampleAttribute</code>를 상위 노트에 지정하면 새로 만드는 바로 아래 노트에 <code>#exampleAttribute</code>가 생깁니다. 관계는 <code>~child:myRelation</code>처럼 지정합니다. 기존 노트에는 소급 적용되지 않습니다. 무한한 하위 단계에 적용하려면 일반 상속이나 템플릿을 사용하세요.</p><h3>여러 단계로 복사하기</h3><p><code>#child:child:child:foo</code>를 지정하면 첫 단계에는 <code>#child:child:foo</code>가 생기고 다음 단계에는 <code>#child:foo</code>가 생기며 세 번째 단계에는 <code>#foo</code>가 생깁니다. 관계도 <code>~child:child:child:foo</code>로 같은 방식을 사용할 수 있습니다. 새로 만드는 노트에만 적용됩니다.</p><h2>템플릿 상속</h2><p><a class="reference-link" href="#root/_help_KC1HB96bqqHX">템플릿</a>의 속성도 물려받을 수 있습니다. 비슷한 구조와 역할을 가진 노트에 공통 설정을 유지할 때 유용합니다.</p>
@@ -0,0 +1,12 @@
<p>라벨은 이름과 선택적인 값을 가진 노트의 <a href="#root/_help_zEY4DaJG4YT5">속성</a>입니다.</p><h2>활용 방법</h2><p><code>#year=1999</code>와 <code>#genre="공상 과학"</code> 및 <code>#author="닐 스티븐슨"</code>처럼 분류 정보를 붙입니다. <a
class="reference-link" href="#root/_help_OFXdgB2nNk1F">주요 속성</a>으로 표시하면 편리합니다. 앱의 고급 기능을 설정하거나 <a class="reference-link" href="#root/_help_R7abl2fc6Mxi">체중 기록</a>의 <code>weight</code>처럼 스크립트에 필요한 정보를 담기도 합니다.</p><h2>편집 화면에서 추가</h2><p><a class="reference-link"
href="#root/_help_BlN9DFI679QC">상단 리본</a>의 소유한 속성에서 더하기 → 새 라벨 추가를 선택합니다. 노트나 소유한 속성에 초점이 있을 때 Alt+L로도 엽니다. 이름을 입력하고 필요하면 값을 지정합니다. 하위 노트에도 적용하려면 상속 가능을 선택하세요. <a class="reference-link" href="#root/_help_bwZpz2ajCEwO">속성 상속</a>을 참고하세요.</p><h2>직접 입력</h2><p><a class="reference-link"
href="#root/_help_BlN9DFI679QC">상단 리본</a>의 소유한 속성에 입력합니다.</p><ul><li><code>#myLabel</code> — 값 없는 라벨</li><li><code>#myLabel=value</code> — 값을 가진 라벨</li><li><code>#myLabel="안녕하세요 여러분"</code> — 공백이 있는 값은 따옴표로 감쌉니다.</li><li><code>#myLabel='"안녕하세요"라고 말하기'</code> — 큰따옴표가 들어 있으면 작은따옴표로 감쌉니다.</li><li><code>#myLabel(inheritable)</code> 또는 <code>#myLabel(inheritable)=value</code> — 상속 가능한 라벨</li></ul><h2>미리 정의된 라벨</h2><p>다음 라벨은 Trilium에서 특별한 기능을 수행합니다. 별표는 같은 접두사로 시작하는 여러 라벨을 뜻합니다.</p><ul><li><code>disableVersioning</code> — 자동 <a class="reference-link" href="#root/_help_vZWERwf8U3nx">수정 이력</a> 생성을 끕니다. 다시 받을 수 있는 대형 라이브러리 등에 유용합니다.</li><li><code>versioningLimit</code> — 전체 설정 대신 해당 노트의 최대 <a class="reference-link" href="#root/_help_vZWERwf8U3nx">수정 이력</a> 수를 지정합니다.</li><li><code>calendarRoot</code> — <a class="reference-link"
href="#root/_help_l0tKav7yLHGF">일일 노트</a>의 루트입니다. 하나만 지정합니다.</li><li><code>archived</code> — 기본 검색과 선택 창에서 제외합니다. <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서도 숨기도록 설정할 수 있습니다.</li><li><code>excludeFromExport</code> — 내보낼 때 해당 노트와 하위 항목을 제외합니다.</li><li><code>run</code>과 <code>runOnInstance</code> 및 <code>runAtHour</code> — <a class="reference-link" href="#root/_help_GPERMystNGTB">이벤트</a> 실행 설정입니다.</li><li><code>disableInclusion</code> — 상위 스크립트 실행에 포함하지 않습니다.</li><li><code>sorted</code> — 하위 노트를 제목순으로 유지합니다. 값에 다른 라벨 이름을 지정하면 그 값으로 정렬합니다. 해당 라벨이 없는 노트는 제목을 사용합니다.</li><li><code>sortDirection</code> — 자동 정렬 방향입니다. <code>ASC</code>는 기본 오름차순이고 <code>DESC</code>는 내림차순입니다.</li><li><code>sortFoldersFirst</code> — 자동 정렬할 때 하위 노트가 있는 항목을 먼저 모읍니다.</li><li><code>top</code> — 상위 노트에 자동 정렬이 설정되어 있어도 해당 노트를 맨 위에 둡니다.</li><li><code>hidePromotedAttributes</code> — 현재 노트의 <a class="reference-link" href="#root/_help_OFXdgB2nNk1F">주요 속성</a>을 숨깁니다. 상속용 속성을 정의한 상위 노트 등에 유용합니다.</li><li><code>readOnly</code> — 텍스트와 코드 및 Mermaid 등 지원하는 노트를 항상 <a href="#root/_help_CoFPLs3dRlXc">읽기 전용</a>으로 엽니다.</li><li><code>autoReadOnlyDisabled</code> — 자동 <a href="#root/_help_CoFPLs3dRlXc">읽기 전용</a> 전환을 끕니다.</li><li><code>appCss</code> — 앱에 불러올 CSS 노트입니다. <a class="reference-link"
href="#root/_help_AlhDUqhENtH7">앱 전체 사용자 CSS</a>를 참고하세요.</li><li><code>appTheme</code> — 설정에서 선택할 수 있는 전체 테마 CSS입니다. <a class="reference-link" href="#root/_help_pKK96zzmvBGf">테마 개발</a>을 참고하세요.</li><li><code>appThemeBase</code> — <code>next</code>와 <code>next-light</code> 및 <code>next-dark</code>로 자동·밝은·어두운 Next 테마를 기반으로 사용합니다. <a class="reference-link"
href="#root/_help_WFGzWeUK6arS">Next 테마 수정</a>을 참고하세요.</li><li><code>cssClass</code> — <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a> 항목에 추가할 CSS 클래스입니다. 템플릿에서도 사용할 수 있습니다.</li><li><code>iconClass</code> — 아이콘에 추가할 CSS 클래스입니다. 예: <code>bx bx-home</code>. Boxicons를 사용하며 템플릿에서도 지정할 수 있습니다.</li><li><code>pageSize</code> — <a class="reference-link"
href="#root/_help_0ESUbbAxVnoK">노트 목록</a>의 페이지당 항목 수입니다.</li><li><code>customRequestHandler</code> — <a class="reference-link" href="#root/_help_J5Ex1ZrMbyJ6">사용자 요청 처리기</a>입니다.</li><li><code>customResourceProvider</code> — <a class="reference-link" href="#root/_help_d3fAXQ2diepH">사용자 리소스 제공자</a>입니다.</li><li><code>widget</code> — 앱 구성 요소 트리에 넣을 <a class="reference-link" href="#root/_help_MgibgPcfeuGz">사용자 위젯</a>입니다.</li><li><code>searchHome</code> — 새 <a
class="reference-link" href="#root/_help_m523cpzocqaD">저장된 검색</a> 노트를 만들 위치입니다.</li><li><code>workspace</code> 및 관련 라벨 — <a class="reference-link" href="#root/_help_9sRHySam5fXb">작업 공간</a>을 설정합니다.</li><li><code>inbox</code> — 사이드바의 새 노트 버튼으로 만든 노트를 보관할 기본 위치입니다.</li><li><code>sqlConsoleHome</code> — <a class="reference-link" href="#root/_hidden/_help/_help_tC7s2alapj8V/_help_wX4HbRucYSDD/_help_oyIAJ9PvvwHX/_help__help_YKWqdJhzi2VY">SQL 콘솔</a> 노트의 기본 위치입니다.</li><li><code>bookmarked</code> — <a href="#root/_help_u3YFHC9tQlpm">북마크</a>로 지정합니다.</li><li><code>bookmarkFolder</code> — 하위 항목을 열 수 있는 <a class="reference-link" href="#root/_help_u3YFHC9tQlpm">북마크 폴더</a>로 표시합니다.</li><li><code>share*</code> — <a class="reference-link" href="#root/_help_R9pX4DGra2Vt">공개 공유</a> 설정입니다.</li><li><code>displayRelations</code>와 <code>hideRelations</code> — <a class="reference-link" href="#root/_help_iRwzGnHPzonm">관계도</a>와 <a class="reference-link" href="#root/_help_BCkXAVs63Ttv">노트 지도</a>에서 표시하거나 숨길 관계 이름을 쉼표로 구분해 지정합니다.</li><li><code>titleTemplate</code> — 새 하위 노트의 기본 제목입니다. JavaScript 템플릿 문자열로 계산하며 <code>now</code>와 <code>parentNote</code>를 사용할 수 있습니다. 예: <code>${parentNote.getLabel('authorName')}의 작품</code> 또는 <code>${now.format('YYYY-MM-DD HH:mm:ss')} 기록</code>. <a class="reference-link" href="#root/_help_47ZrP6FNuoG8">기본 노트 제목</a>을 참고하세요.</li><li><code>template</code> — 새 노트의 <a class="reference-link" href="#root/_help_KC1HB96bqqHX">템플릿</a> 선택 목록에 표시합니다.</li><li><code>toc</code> — <a class="reference-link" href="#root/_help_BFvAtE74rbP6">목차</a> 표시를 제어합니다. <code>#toc</code> 또는 <code>#toc=show</code>는 항상 표시하고 <code>#toc=false</code>는 숨깁니다.</li><li><code>color</code> — 트리와 링크 등의 노트 색입니다. <code>red</code>나 <code>#a13d5f</code> 같은 CSS 색상값을 사용합니다.</li><li><code>keyboardShortcut</code> — 해당 노트로 이동할 단축키입니다. 예: <code>ctrl+alt+e</code>. 변경 후 화면을 새로고침해야 합니다.</li><li><code>keepCurrentHoisting</code> — 현재 확대 범위 밖의 노트를 열어도 트리의 확대 범위를 유지합니다.</li><li><code>executeButton</code> — 현재 코드 노트 실행 버튼의 이름입니다.</li><li><code>executeDescription</code> — 실행 버튼과 함께 보여 줄 자세한 설명입니다.</li><li><code>excludeFromNoteMap</code> — <a class="reference-link"
href="#root/_help_bdUJEHsAPYQR">노트 지도</a>에서 제외합니다.</li><li><code>newNotesOnTop</code> — 새 하위 노트를 맨 위에 만듭니다.</li><li><code>hideHighlightWidget</code> — <a class="reference-link" href="#root/_help_AxshuNRegLAv">강조 표시 목록</a> 위젯을 숨깁니다.</li><li><code>hideChildrenOverview</code> — 해당 노트의 <a class="reference-link" href="#root/_help_0ESUbbAxVnoK">하위 노트 목록</a>을 숨깁니다.</li><li><code>printLandscape</code> — PDF를 가로 방향으로 내보냅니다.</li><li><code>printPageSize</code> — PDF 용지 크기입니다. <code>A0 A1 A2 A3 A4 A5 A6 Legal Letter Tabloid Ledger</code>를 지원합니다.</li><li><code>geolocation</code> — <a
class="reference-link" href="#root/_help_81SGnPGMk7Xc">지리 지도</a>에 표시할 위도와 경도입니다.</li><li><code>calendar:*</code> — <a class="reference-link" href="#root/_help_xWbu3jpNWapp">달력 보기</a> 설정입니다.</li><li><code>viewType</code> — 격자나 목록 등 <a class="reference-link"
href="#root/_help_0ESUbbAxVnoK">하위 노트 보기</a> 형식을 지정합니다.</li></ul>
@@ -0,0 +1 @@
<p>주요 속성은 자주 사용하는 <a href="#root/_help_zEY4DaJG4YT5">속성</a>을 노트의 주 화면에 입력란으로 표시하는 기능입니다.</p><p><img src="Promoted Attributes_promot.png" alt="주요 속성 입력란"></p><p>각 입력란은 일반 속성과 같은 값을 저장합니다. 검색이나 스크립트에서 사용할 속성을 매번 메뉴에서 찾지 않고 바로 확인하고 수정할 수 있습니다.</p><h2>속성 정의</h2><p>속성의 이름과 값은 문자열입니다. 속성 정의는 값을 글자나 날짜 등 어떤 형식으로 해석할지와 여러 값을 허용할지 및 주요 속성으로 표시할지를 지정합니다.</p><p><img src="Promoted Attributes_image.png" alt="속성 정의 예시"></p><p>실제 값을 저장하는 속성과 그 형식을 지정하는 속성은 별개입니다. 형식 정의에 <a href="#root/_help_bwZpz2ajCEwO">상속</a>을 설정하면 하위 트리 전체에 공통으로 적용하고 값은 각 노트에 따로 지정할 수 있습니다.</p><h3>역방향 관계</h3><p>배우자 관계처럼 양쪽에 같은 이름의 관계가 필요한 경우가 있습니다. 한 노트에서 다른 노트로 <code>isPartnerOf</code>를 연결했다면 반대 방향에도 같은 관계가 있어야 합니다.</p><p>부모와 자녀는 방향에 따라 이름이 다릅니다. 부모에서 자녀로는 <code>isParentOf</code>를 사용하고 반대쪽에는 <code>isChildOf</code>를 사용할 수 있습니다.</p><p>관계 정의에서 서로의 역방향 관계 이름을 지정하면 자동으로 관리할 수 있습니다. 부모·자녀 예제에서는 각 관계의 정의에 상대 관계 이름을 지정해야 합니다. 관계를 저장하면 대상 노트의 역방향 관계도 확인하고 생성합니다. 관계를 삭제하면 대응하는 역방향 관계도 삭제합니다.</p>
@@ -0,0 +1,5 @@
<p>관계는 <a href="#root/_help_HI6GBBIduIgv">라벨</a>과 비슷하지만 텍스트 값 대신 다른 노트를 가리킵니다.</p><h2>활용 방법</h2><ul><li>책 노트와 저자 노트를 연결하는 등 자료의 관계를 나타냅니다. <a class="reference-link" href="#root/_help_OFXdgB2nNk1F">주요 속성</a>으로 표시하면 더 편하게 사용할 수 있습니다.</li><li><a
class="reference-link" href="#root/_help_HcABDtFCkbFN">렌더링 노트</a>와 <a class="reference-link" href="#root/_help_R9pX4DGra2Vt">공개 공유</a> 및 <a
class="reference-link" href="#root/_help_KC1HB96bqqHX">템플릿</a>을 설정합니다.</li><li>노트의 이벤트나 조건에 맞춰 실행할 스크립트를 연결합니다.</li></ul><h2>편집 화면에서 만들기</h2><p><a class="reference-link"
href="#root/_help_BlN9DFI679QC">상단 리본</a>의 소유한 속성에서 더하기 버튼을 누르고 새 관계 추가를 선택합니다. 노트나 소유한 속성에 초점이 있을 때 Alt+L을 눌러도 편집 화면이 열립니다.</p><p>관계 이름과 대상 노트를 지정합니다. 관계에는 대상 노트가 반드시 있어야 합니다. 하위 노트에도 적용하려면 상속 가능을 선택하세요. <a class="reference-link" href="#root/_help_bwZpz2ajCEwO">속성 상속</a>을 참고하세요.</p><h2>직접 입력하기</h2><p><a class="reference-link"
href="#root/_help_BlN9DFI679QC">상단 리본</a>의 소유한 속성에서 <code>~myRelation=@</code>를 입력합니다. 자동 완성 목록에 대상 제목을 입력한 다음 Enter를 누르거나 원하는 노트를 선택합니다. <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서 노트를 복사했다면 <code>@</code> 없이 <code>=</code> 뒤에 붙여 넣을 수도 있습니다.</p><p>상속 가능한 관계는 <code>~myRelation</code> 대신 <code>~myRelation(inheritable)</code>로 입력합니다.</p><h2>미리 정의된 관계</h2><p>다음 관계는 Trilium에서 특별한 기능을 수행합니다. 이름 끝의 별표는 같은 접두사로 시작하는 여러 관계를 뜻합니다.</p><ul><li><code>runOn*</code> — <a class="reference-link" href="#root/_help_GPERMystNGTB">이벤트</a>에 따라 스크립트를 실행합니다.</li><li><code>template</code> — 상하위 관계가 없어도 속성을 상속합니다. 템플릿 규칙에 따라 비어 있는 인스턴스에 본문과 하위 트리를 추가합니다.</li><li><code>inherit</code> — 상하위 관계가 없어도 속성을 상속합니다. 비슷한 개념인 <a class="reference-link" href="#root/_help_KC1HB96bqqHX">템플릿</a>과 <a class="reference-link" href="#root/_help_bwZpz2ajCEwO">속성 상속</a>을 참고하세요.</li><li><code>renderNote</code> — <a class="reference-link" href="#root/_help_HcABDtFCkbFN">렌더링 노트</a>에서 표시할 HTML 또는 스크립트 코드 노트를 가리킵니다.</li><li><code>widget_relation</code> — 대상 노트를 실행하고 사이드바 위젯으로 표시합니다.</li><li><code>shareCss</code> — 공유 페이지에 넣을 CSS 노트입니다. 해당 노트도 공유 하위 트리에 있어야 합니다. 필요에 따라 <code>share_hidden_from_tree</code>와 <code>share_omit_default_css</code>를 함께 사용합니다.</li><li><code>shareJs</code> — 공유 페이지에 넣을 JavaScript 노트입니다. 해당 노트도 공유 하위 트리에 있어야 합니다. 필요하면 <code>share_hidden_from_tree</code>로 트리에서 숨깁니다.</li><li><code>shareTemplate</code> — 공유 노트 표시용 템플릿으로 사용할 임베디드 JavaScript 노트입니다. 지정하지 않으면 기본 템플릿을 사용합니다. 필요하면 <code>share_hidden_from_tree</code>로 숨깁니다.</li><li><code>shareFavicon</code> — 공유 페이지의 아이콘 노트입니다. 보통 공유 루트에 지정하고 상속 가능으로 설정합니다. 아이콘도 공유 하위 트리에 있어야 합니다. 필요하면 <code>share_hidden_from_tree</code>로 숨깁니다.</li></ul>
@@ -0,0 +1,4 @@
<p><img style="aspect-ratio:1425/654;" src="Bulk Actions_image.png" width="1425"
height="654" alt="일괄 작업 설정"></p><p>일괄 작업으로 여러 노트에 라벨을 추가하거나 지우고 스크립트를 실행할 수 있습니다.</p><h2>사용 방법</h2><p><a class="reference-link"
href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서 노트 하나를 선택하거나 <a class="reference-link" href="#root/_help_yTjUdsOi4CIE">여러 노트 선택</a> 방법으로 대상을 지정합니다. <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>의 마우스 오른쪽 메뉴에서 고급 → 일괄 작업 적용을 선택합니다.</p><p>기본 대상은 선택한 노트뿐입니다. 하위 노트도 처리하려면 선택한 노트의 하위 항목 포함을 선택하세요. 위쪽의 대상 노트 수가 갱신됩니다. 사용 가능한 작업에서 항목을 선택하고 선택한 작업 영역에서 세부 값을 지정합니다. 같은 유형의 작업을 여러 번 추가할 수 있으며 오른쪽 X로 제거합니다. 설정을 마친 뒤 일괄 작업 실행을 누릅니다. 마지막 설정은 다음에 창을 열 때 복원됩니다.</p><h2>라벨 작업</h2><p><a class="reference-link" href="#root/_help_HI6GBBIduIgv">라벨</a>을 다음과 같이 관리합니다.</p><ul><li>라벨 추가 — 같은 이름의 <a href="#root/_help_HI6GBBIduIgv">라벨</a>이 없으면 만들고 있으면 값을 바꿉니다. 새 값을 비우면 값 없는 라벨이 됩니다.</li><li>라벨 값 변경 — 해당 <a href="#root/_help_HI6GBBIduIgv">라벨</a>이 있는 노트만 처리합니다. 값을 비우면 기존 값이 지워집니다.</li><li>라벨 이름 변경 — 해당 <a href="#root/_help_HI6GBBIduIgv">라벨</a>의 이름만 바꾸고 값은 유지합니다.</li><li>라벨 삭제 — 같은 이름의 라벨을 값 유무와 관계없이 삭제합니다.</li></ul><h2>관계 작업</h2><p><a class="reference-link" href="#root/_help_Cq5X6iKQop6R">관계</a>의 추가와 대상 변경 및 이름 변경과 삭제를 지원합니다. 추가는 지정한 노트를 가리키는 관계를 만듭니다. 나머지 작업은 해당 관계가 있는 노트만 처리합니다. 이름을 바꿔도 대상 노트는 유지됩니다.</p><h2>노트 작업</h2><p>노트 이름 변경은 모든 대상의 제목을 지정한 값으로 바꿉니다. <a
class="reference-link" href="#root/_help_habiZ3HU8Kw8">FNote</a> 정보에 접근하는 템플릿 문자열도 사용할 수 있습니다. <code>새 항목: ${note.title}</code>은 제목 앞에 문구를 붙입니다. <code>${note.dateCreatedObj.format('MM-DD')}: ${note.title}</code>은 만든 날짜를 월·일 형식으로 붙입니다.</p><p>노트 이동은 지정한 상위 노트 아래로 옮깁니다. 간단한 이동은 <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서 잘라내기와 붙여넣기 또는 메뉴로 처리해도 됩니다. 노트 삭제는 대상을 삭제합니다. <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서 선택하고 Delete를 누르는 방법도 있습니다. 노트 수정 이력 삭제는 대상의 모든 <a class="reference-link" href="#root/_help_vZWERwf8U3nx">수정 이력</a>을 지웁니다.</p><h2>스크립트 실행</h2><p>복잡한 작업은 JavaScript로 작성할 수 있습니다. 다음 예제는 제목 뒤에 문구를 붙입니다.</p><pre><code class="language-application-javascript-env-backend">note.title = note.title + " - 추가 문구";</code></pre><p>다음 예제는 <code>#shareAlias</code> 라벨을 노트 제목으로 설정합니다.</p><pre><code class="language-application-javascript-env-backend">note.setLabel("shareAlias", note.title)</code></pre>
@@ -0,0 +1,26 @@
<p><a href="#root/_help_CdNpE2pqjmI6">스크립트</a>로 공개 REST 요청을 처리할 수 있습니다. 외부 서비스에서 제목과 본문을 보내 노트를 만드는 등의 연동에 사용합니다.</p><h2>외부 요청으로 노트 만들기</h2><p>다음은 백엔드 JavaScript <a href="#root/_help_6f9hih2hXXZk">코드 노트</a>예제입니다. 예시 비밀값을 그대로 공개 서비스에 사용하면 안 됩니다.</p><pre><code class="language-text-x-trilium-auto">const {req, res} = api;
const {secret, title, content} = req.body;
if (req.method == 'POST' &amp;&amp; secret === 'secret-password') {
// 노트를 저장할 상위 노트를 지정합니다.
// 이 코드 노트의 관계로 대상 상위 노트를 연결합니다.
// 간단한 예제에서는 노트 정보에서 확인한 고정 ID를 사용할 수도 있습니다.
const targetParentNoteId = api.currentNote.getRelationValue('targetNote');
const {note} = api.createTextNote(targetParentNoteId, title, content);
const notePojo = note.getPojo();
res.status(201).json(notePojo);
}
else {
res.send(400);
}</code></pre><p><code>#customRequestHandler=create-note</code> 라벨과 저장할 위치를 가리키는 <code>~targetNote</code> 관계를 지정합니다.</p><h3>요청 예시</h3><pre><code class="language-text-x-trilium-auto">POST http://my.trilium.org/custom/create-note
Content-Type: application/json
{
"secret": "secret-password",
"title": "인사",
"content": "안녕하세요."
}</code></pre><p><code>/custom</code> 아래 요청은 <code>customRequestHandler</code> <a href="#root/_help_zEY4DaJG4YT5">라벨</a>이 있는 노트에서 처리기를 찾습니다. 라벨 값은 경로에 대응하는 정규식입니다. 찾은 스크립트에는 Express의 <a href="https://expressjs.com/en/api.html#req">요청 객체</a>와 <a
href="https://expressjs.com/en/api.html#res">응답 객체</a>가 <code>api.req</code>와 <code>api.res</code>로 제공됩니다.</p><p>이 경로는 기본 인증을 자동으로 요구하지 않습니다. 처리기에서 인증을 구현해야 합니다. 예제는 POST 방식과 비밀값을 확인한 뒤 <a
href="#root/_help_GLks18SNjxmC">스크립트 API</a>로 노트를 만듭니다.</p><h2>파일 제공</h2><p>파일만 제공하려면 <code>customResourceProvider</code> 라벨에 경로 정규식을 지정할 수 있습니다. <a href="#root/_help_d3fAXQ2diepH">사용자 지정 리소스 제공</a>을 참고하세요.</p><h2>고급 사용</h2><p>요청과 응답 객체의 기능은 <a href="https://expressjs.com/en/api.html">Express 공식 문서</a>에서 확인할 수 있습니다.</p><h3>경로 매개변수</h3><pre><code class="language-text-x-trilium-auto">http://my.trilium.org/custom/notes/123</code></pre><p>마지막 숫자처럼 바뀌는 부분을 정규식으로 받을 수 있습니다.</p><pre><code class="language-text-x-trilium-auto">notes/([0-9]+)</code></pre><p>괄호로 묶은 일치 결과는 <code>api.pathParams</code>에 들어갑니다.</p><pre><code class="language-text-x-trilium-auto">const noteId = api.pathParams[0];</code></pre><p><code>?noteId=123</code> 같은 쿼리 매개변수는 <code>req.query.noteId</code>로 읽습니다.</p>
@@ -0,0 +1,13 @@
<p><img style="aspect-ratio:263/445;" src="Hidden Notes_image.png" width="263"
height="445" alt="숨겨진 노트 트리"></p><p>Trilium은 여러 기능의 정보를 실제 노트로 저장합니다. 덕분에 <a class="reference-link"
href="#root/_help_zEY4DaJG4YT5">속성</a>과 <a class="reference-link"
href="#root/_help_Cq5X6iKQop6R">관계</a> 및 <a class="reference-link"
href="#root/_help_eIg8jdvaoNNd">검색</a>과 <a class="reference-link"
href="#root/_help_QEAPj01N5f7w">링크</a>를 활용할 수 있습니다. 트리가 복잡해지거나 실수로 지우는 일을 줄이기 위해 기본적으로 숨겨 둡니다. 일반 노트처럼 <a class="reference-link"
href="#root/_help_wX4HbRucYSDD">데이터베이스</a>에 저장되지만 특별한 <a class="reference-link" href="#root/_help_m1lbrzyKDaRB">노트 ID</a>로 구분합니다.</p><h2>숨겨진 트리 열기</h2><p><a class="reference-link" href="#root/_help_x3i7MxGccDuM">전체 메뉴</a>에서 고급 → 숨겨진 하위 트리 표시를 선택합니다.</p><h2>구성</h2><ul><li><a class="reference-link" href="#root/_hidden/_help__globalNoteMap">노트 지도</a> — <a class="reference-link" href="#root/_help_bdUJEHsAPYQR">노트 지도</a> 기능을 <a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>에서 열 때 사용하는 노트입니다. 하위 노트를 만들어 지도 모음을 보관하고 다른 곳에서 연결하거나 <a href="#root/_help_u3YFHC9tQlpm">북마크</a>로 지정할 수 있습니다.</li><li><a class="reference-link" href="#root/_hidden/_help__sqlConsole">SQL 콘솔 기록</a> — <a class="reference-link"
href="#root/_help_YKWqdJhzi2VY">SQL 콘솔</a>에서 실행한 쿼리를 월별로 보관합니다. 결과는 저장하지 않습니다. <a class="reference-link" href="#root/_help_x3i7MxGccDuM">전체 메뉴</a> → 고급 → SQL 콘솔 기록 열기로도 접근합니다. 기록 처리에 영향을 주지 않도록 임의의 하위 노트는 만들지 않는 편이 좋습니다.</li><li><a class="reference-link" href="#root/_hidden/_help__search">검색 기록</a> — 전체 <a class="reference-link"
href="#root/_help_eIg8jdvaoNNd">검색</a>의 조건을 월별로 보관합니다. 결과 자체는 저장하지 않습니다. <a class="reference-link" href="#root/_help_x3i7MxGccDuM">전체 메뉴</a> → 고급 → 검색 기록 열기로 접근합니다. 임의의 하위 노트는 권장하지 않습니다.</li><li><a class="reference-link" href="#root/_hidden/_help__bulkAction">일괄 작업</a> — 마지막 <a class="reference-link" href="#root/_help_ivYnonVFBxbQ">일괄 작업</a> 설정을 각 <code>action</code> 라벨에 보관합니다. 하위 노트를 만들어도 특별한 기능은 없습니다.</li><li><a class="reference-link" href="#root/_hidden/_help__backendLog">백엔드 로그</a> — 서버의 <a class="reference-link"
href="#root/_help_qzNzp9LYQyPT">오류 로그</a>를 표시합니다. <a class="reference-link" href="#root/_help_x3i7MxGccDuM">전체 메뉴</a> → 고급 → 백엔드 로그 표시로도 엽니다.</li><li><a class="reference-link" href="#root/_hidden/_help__userHidden">사용자 숨김 영역</a> — <a href="#root/_help_CdNpE2pqjmI6">스크립트</a>가 화면에 직접 표시하지 않을 노트를 보관하는 공간입니다. ID는 <code>_userHidden</code>입니다.</li><li><a class="reference-link" href="#root/_hidden/_help__lbTplRoot">실행 도구 템플릿</a> — <a
class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>의 새 항목을 만드는 템플릿입니다. 하위 노트를 만들 수 없습니다. 일부 내용을 바꿀 수는 있지만 보통 필요하지 않습니다.</li><li><a class="reference-link" href="#root/_hidden/_help__share">공유 노트</a> — 위치와 관계없이 <a href="#root/_help_R9pX4DGra2Vt">공개 공유</a> 중인 노트를 모아 보여 줍니다. <a class="reference-link" href="#root/_help_x3i7MxGccDuM">전체 메뉴</a>의 공유 노트 하위 트리 표시로도 엽니다. 하위 노트는 만들 수 없습니다.</li><li><a class="reference-link" href="#root/_hidden/_help__lbRoot">실행 도구 모음</a> — 사용 가능하거나 화면에 표시 중인 <a class="reference-link"
href="#root/_help_xYmIYSP6wE3F">실행 도구</a>를 담습니다. <a class="reference-link" href="#root/_help_x3i7MxGccDuM">전체 메뉴</a>에서 실행 도구 모음 설정을 선택하거나 <a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>의 빈 곳을 마우스 오른쪽 버튼으로 눌러 설정합니다. 하위 노트는 만들 수 없습니다.</li><li><a class="reference-link" href="#root/_hidden/_help__options">설정</a> — <a class="reference-link" href="#root/_help_4TIF1oA4VQRO">설정 항목</a>을 저장합니다. <a class="reference-link" href="#root/_help_x3i7MxGccDuM">전체 메뉴</a>의 설정 또는 <a class="reference-link"
href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>의 설정 아이콘으로 엽니다.</li><li><a class="reference-link" href="#root/_hidden/_help__lbMobileRoot">모바일 실행 도구 모음</a> — 모바일 화면에서 사용하는 별도 도구 모음입니다. 모바일 화면에서 같은 방법으로 설정합니다.</li><li><a class="reference-link" href="#root/_hidden/_help__help">사용자 안내서</a> — 도움말 노트의 구조와 메타데이터를 담습니다. 본문은 앱 디렉터리의 파일에서 읽습니다.</li></ul>
@@ -0,0 +1,26 @@
<p>측정 지표 API는 Prometheus 같은 외부 모니터링 시스템에 Trilium 상태를 제공합니다.</p><h2>접속</h2><p><code>GET /etapi/metrics</code>로 요청합니다. ETAPI 토큰이 필요하며 기본 응답은 Prometheus 텍스트 형식입니다.</p><pre><code class="language-text-x-trilium-auto"># ETAPI 토큰 발급 예시
curl -X POST http://localhost:8080/etapi/auth/login \
-H "Content-Type: application/json" \
-d '{"password": "your_password"}'
</code></pre><h2>사용 예시</h2><pre><code class="language-text-x-trilium-auto">curl -H "Authorization: YOUR_ETAPI_TOKEN" \
http://localhost:8080/etapi/metrics
</code></pre><p>다음과 같은 형식으로 응답합니다. 지표 이름과 형식은 연동을 위해 유지합니다.</p><pre><code class="language-text-x-trilium-auto"># HELP trilium_info Trilium 인스턴스 정보
# TYPE trilium_info gauge
trilium_info{version="0.91.6",db_version="231",node_version="v18.17.0"} 1 1701432000
# HELP trilium_notes_total 삭제된 노트를 포함한 전체 노트 수
# TYPE trilium_notes_total gauge
trilium_notes_total 1234 1701432000
</code></pre><p>JSON으로 받으려면 다음처럼 요청합니다.</p><pre><code class="language-text-x-trilium-auto">curl -H "Authorization: YOUR_ETAPI_TOKEN" \
"http://localhost:8080/etapi/metrics?format=json"
</code></pre><h2>제공 지표</h2><ul><li><code>trilium_info</code> — 버전과 빌드 정보</li><li><code>trilium_notes_total</code> — 삭제된 노트를 포함한 전체 노트 수</li><li><code>trilium_notes_deleted</code> — 삭제된 노트 수</li><li><code>trilium_notes_active</code> — 활성 노트 수</li><li><code>trilium_notes_protected</code> — 보호 노트 수</li><li><code>trilium_attachments_total</code> — 전체 첨부 파일 수</li><li><code>trilium_attachments_active</code> — 활성 첨부 파일 수</li><li><code>trilium_revisions_total</code> — 수정 이력 수</li><li><code>trilium_branches_total</code> — 활성 가지 수</li><li><code>trilium_attributes_total</code> — 활성 속성 수</li><li><code>trilium_blobs_total</code> — 본문 데이터 레코드 수</li><li><code>trilium_etapi_tokens_total</code> — 활성 ETAPI 토큰 수</li><li><code>trilium_embeddings_total</code> — 노트 임베딩 수</li><li><code>trilium_notes_by_type</code> — 유형별 노트 수. type 라벨로 구분합니다.</li><li><code>trilium_attachments_by_type</code> — MIME 유형별 첨부 파일 수. mime_type 라벨로 구분합니다.</li><li><code>trilium_database_size_bytes</code> — 데이터베이스 크기. 바이트 단위입니다.</li><li><code>trilium_oldest_note_timestamp</code> — 가장 오래된 노트의 시각</li><li><code>trilium_newest_note_timestamp</code> — 가장 최근 노트의 시각</li><li><code>trilium_last_modified_timestamp</code> — 마지막 수정 시각</li></ul><h2>Prometheus 설정</h2><p><code>prometheus.yml</code>에 추가할 예시입니다.</p><pre><code class="language-text-x-trilium-auto">scrape_configs:
- job_name: 'trilium'
static_configs:
- targets: ['localhost:8080']
metrics_path: '/etapi/metrics'
bearer_token: 'YOUR_ETAPI_TOKEN'
scrape_interval: 30s
</code></pre><h2>오류 응답</h2><p>400은 지원하지 않는 format 값입니다. 401은 토큰이 없거나 유효하지 않다는 뜻이며 500은 서버 내부 오류입니다.</p><h2>Grafana 대시보드</h2><p><img style="aspect-ratio:2594/1568;" src="1_Metrics_image.png" width="2594"
height="1568" alt="Trilium 모니터링 대시보드"></p><p><a class="reference-link" href="#root/_help_bOP3TB56fL1V">Grafana 대시보드 JSON</a>을 가져오기 화면에 입력하세요.</p><p><img style="aspect-ratio:1881/282;" src="2_Metrics_image.png" width="1881"
height="282" alt="대시보드 가져오기 메뉴"></p><p>JSON을 붙여넣고 불러오기를 누릅니다.</p><p><img style="aspect-ratio:1055/830;" src="Metrics_image.png" width="1055"
height="830" alt="대시보드 JSON 입력"></p>
@@ -0,0 +1,16 @@
<h2>노트의 내부 형식</h2><p>본문을 저장하는 방식은 <a class="reference-link" href="#root/_help_KSZ04uQ2D1St">노트 유형</a>마다 다릅니다.</p><ul><li><a class="reference-link" href="#root/_help_iPIMuisry3hd">텍스트 노트</a>는 <a class="reference-link"
href="#root/_help_MI26XDLSAlCD">CKEditor</a>가 사용하는 HTML로 저장합니다. 안내 상자처럼 Trilium 전용 요소도 있습니다.</li><li><a class="reference-link" href="#root/_help_6f9hih2hXXZk">코드 노트</a>는 입력한 텍스트를 그대로 저장합니다.</li><li><a class="reference-link" href="#root/_help_81SGnPGMk7Xc">지리 지도</a>는 위치와 확대 비율 등의 JSON을 저장합니다.</li><li><a class="reference-link" href="#root/_help_grjYqerjn243">캔버스</a>는 <a
class="reference-link" href="#root/_help_H0mM1lTxF9JI">Excalidraw</a>의 JSON과 Trilium용 정보를 함께 저장합니다.</li><li><a class="reference-link" href="#root/_help_gBbsAeiuUxI5">마인드맵</a>은 <a class="reference-link"
href="#root/_help_N4IDkixaDG9C">MindElixir</a>의 JSON 형식을 사용합니다.</li></ul><p>일부 정보는 <a class="reference-link"
href="#root/_help_0vhv7lsOLy82">첨부 파일</a>에 저장합니다. <a class="reference-link"
href="#root/_help_grjYqerjn243">캔버스</a>는 사용자 라이브러리를 첨부하며 <a class="reference-link"
href="#root/_help_gBbsAeiuUxI5">마인드맵</a> 등은 다른 노트에 포함하거나 공유할 때 사용할 SVG 미리보기도 첨부합니다.</p><p>다음은 이 문서의 HTML 형식을 설명하는 예제입니다.</p><pre><code class="language-text-x-trilium-auto">&lt;h2&gt;
노트의 내부 형식
&lt;/h2&gt;
&lt;p&gt;
본문을 저장하는 방식은 다음 유형에 따라 다릅니다.&amp;nbsp;
&lt;a class="reference-link" href="#root/_help_KSZ04uQ2D1St"&gt;
노트 유형
&lt;/a&gt;
.
&lt;/p&gt;</code></pre><h2>소스 보기</h2><p><a class="reference-link" href="#root/_help_8YBEPzcpUgxw">노트 메뉴</a>에서 노트 소스를 선택하면 새 탭에서 열립니다. 텍스트 노트처럼 일부 유형은 읽기 편하도록 들여쓰기를 적용합니다.</p><p><img src="Note source_image.png" alt="노트 소스 화면"></p><h2>소스 수정</h2><p>소스 보기 화면에서 직접 편집할 수는 없습니다. 수정하려면 노트 유형을 일반 텍스트나 JSON 또는 HTML 코드로 바꾸고 경고를 확인한 뒤 본문을 고치세요. 작업 후에는 원래 유형으로 되돌립니다.</p><p>형식을 잘못 수정하면 노트가 표시되지 않을 수 있습니다. 먼저 이전 버전을 저장하세요. 문제가 생기면 소스를 다시 수정하거나 이전 버전으로 복원합니다. 화면이 정상으로 돌아오지 않으면 새로고침이 필요할 수 있습니다.</p>
@@ -0,0 +1,12 @@
<p>선택한 노트를 누구나 읽을 수 있는 웹문서로 공개합니다. 공유 화면은 읽기 전용입니다.</p><p><img style="aspect-ratio:1144/660;" src="Sharing_image.png" width="1144"
height="660" alt="공유 페이지"></p><h2>기능과 제한</h2><p>제목 검색과 모바일 화면을 지원합니다. 브라우저 설정에 따라 밝은 모드와 어두운 모드를 적용하며 직접 전환한 설정도 기억합니다. 트리를 접거나 펼치고 로고를 바꿀 수 있습니다. 이전·다음 노트 이동과 마지막 수정 날짜도 표시합니다.</p><ul><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_iPIMuisry3hd">텍스트</a> — 목차와 수식을 표시합니다. 언어를 지정한 코드 블록은 구문 강조를 지원하지만 자동 감지는 지원하지 않습니다. 노트 포함과 본문 안의 Mermaid 도표는 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_6f9hih2hXXZk">코드</a> — 고정폭 글꼴로 본문을 보여 주지만 구문 강조는 없습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_m523cpzocqaD">저장된 검색</a> — 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_iRwzGnHPzonm">관계도</a> — 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_bdUJEHsAPYQR">노트 지도</a> — 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_HcABDtFCkbFN">렌더링 노트</a> — 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_GTwFsgaA0lCt">책</a> — 하위 노트를 정해진 형식으로 표시합니다. 달력 등 고급 보기는 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_s1aBHPd79XYj">Mermaid 도표</a> — 벡터 이미지로 표시합니다. 추가 조작은 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_grjYqerjn243">캔버스</a> — 벡터 이미지로 표시합니다. 추가 조작은 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_1vHRoWCEjj0L">웹 보기</a> — 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_gBbsAeiuUxI5">마인드맵</a> — 벡터 이미지로 표시합니다. 추가 조작은 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_81SGnPGMk7Xc">지리 지도</a> — 지원하지 않습니다.</li><li><a class="reference-link" href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_W8vYD3Q1zjCR">파일</a> — 내려받기를 지원합니다.</li></ul><p>공유 트리는 정적인 구조이며 보호된 노트는 공유할 수 없습니다.</p><h2>공유하기</h2><p><a class="reference-link"
href="#root/_help_WOcw2SLH6tbX">서버 설치</a>가 필요합니다. 노트 화면에서 공유 스위치를 켜면 접근할 URL이 나타납니다.</p><p><img src="Sharing_share-single-note.png" alt="노트 공유 스위치"></p><p>표시된 링크를 브라우저에서 엽니다. 서버 주소 설정에 따라 <code>localhost</code> 주소가 보일 수도 있습니다. 외부 접속에는 외부에서 접근 가능한 서버 주소가 필요합니다.</p><h3>하위 트리</h3><p>노트를 공유하면 그 아래의 하위 노트도 함께 공유됩니다. 공유 노트 하위 트리 표시에서 전체 공개 목록을 확인할 수 있습니다.</p><h3>접근 범위</h3><p>별도 인증을 설정하지 않은 공유 문서는 URL을 아는 누구나 열 수 있습니다. 무작위 주소는 접근 제어를 대신하지 않습니다. 공개할 자료인지 확인하세요.</p><h3>암호 설정</h3><p><code>#shareCredentials="username:password"</code> 형식으로 사용자 이름과 암호를 지정합니다. 하위 노트와 이미지에도 적용하려면 <a href="#root/_help_bwZpz2ajCEwO">상속 가능</a>으로 설정합니다.</p><h2>공유 화면 꾸미기</h2><p>CSS <a class="reference-link"
href="#root/_help_6f9hih2hXXZk">코드 노트</a>를 만들고 <code>~shareCss</code> 관계로 연결합니다. 하위 트리 전체에 적용하려면 관계를 상속 가능으로 설정합니다. CSS 노트에 <code>#shareHiddenFromTree</code>를 추가하면 탐색 트리에서 숨깁니다. <code>#shareOmitDefaultCss</code>는 <a
href="#root/_help_Wy267RK4M69c">기본 스타일</a>을 제외합니다.</p><h3>JavaScript</h3><p><code>~shareJs</code> 관계로 스크립트를 넣습니다. <code>fetchNote()</code>로 노트 정보를 읽을 수 있습니다. 다음 예제는 상위 노트의 속성을 출력합니다.</p><pre><code class="language-application-javascript-env-backend">const currentNote = await fetchNote();
const parentNote = await fetchNote(currentNote.parentNoteIds[0]);
for (const attr of parentNote.attributes) {
console.log(attr.type, attr.name, attr.value);
}</code></pre><h3>읽기 쉬운 주소</h3><p>보통 주소 끝에는 노트 ID가 붙습니다. <code>#shareAlias=highlighting</code>을 지정하면 <code>http://domain.tld/share/highlighting</code>처럼 사용할 수 있습니다. 별칭은 중복되지 않아야 하며 슬래시로 하위 경로를 만드는 방식은 지원하지 않습니다.</p><h3>공유 목록 관리</h3><p>공유 노트 영역에서 목록을 확인하고 이동이나 복제로 공유 상태를 관리할 수 있습니다.</p><p><img src="Sharing_shared-list.png" alt="공유 노트 목록"></p><h3>아이콘과 시작 페이지</h3><p><code>~shareFavicon</code> 관계로 <code>.ico</code> 같은 아이콘 파일 노트를 지정합니다. <code>#shareRoot</code>가 있는 노트는 <code>http://domain.tld/share</code>의 시작 페이지가 됩니다. <code>#shareIndex</code>를 함께 사용하면 공유 루트 목록을 보여 줄 수 있습니다.</p><h2>속성 안내</h2><ul><li><code>shareHiddenFromTree</code> — 탐색 트리에서만 숨깁니다. URL로는 여전히 접근할 수 있습니다.</li><li><code>shareExternalLink</code> — 공유 트리에서 외부 웹사이트 링크로 사용합니다.</li><li><code>shareAlias</code> — <code>https://your_trilium_host/share/[your_alias]</code> 주소의 별칭입니다.</li><li><code>shareOmitDefaultCss</code> — 기본 공유 CSS를 제외합니다.</li><li><code>shareRoot</code> — <code>/share</code>의 시작 노트입니다.</li><li><code>shareDescription</code> — HTML 설명 메타 태그에 넣을 문구입니다.</li><li><code>shareRaw</code> — HTML 틀 없이 원본 내용을 제공합니다. 속성 없이 사용하는 <a
class="reference-link" href="#root/_help_Qjt68inQ2bRj">노트 원문 제공</a> 방법도 있습니다.</li><li><code>shareDisallowRobotIndexing</code> — 검색 로봇에 색인 제외를 요청합니다. <code>X-Robots-Tag: noindex</code> 헤더와 <code>noindex, follow</code> 메타 태그를 설정합니다.</li><li><code>shareCredentials</code> — <code>username:password</code> 형식의 인증 정보입니다. 하위 노트와 이미지에도 적용하려면 상속 가능으로 설정합니다.</li><li><code>shareIndex</code> — 공유 중인 모든 루트 노트를 나열합니다.</li></ul><h2>제작에 도움을 준 프로젝트</h2><p>0.95.0부터 기본 적용된 공유 테마는 <a href="https://github.com/zerebos/trilium.rocks">Trilium Rocks!</a>를 바탕으로 합니다. 원작자는 <a
href="https://github.com/zerebos">zerebos</a>입니다. 모바일 화면과 밝기 전환 및 접을 수 있는 트리 등을 제공합니다.</p>
@@ -0,0 +1 @@
<h2>편집기 구성</h2><p>CKEditor는 <a href="#root/_help_iPIMuisry3hd">텍스트 노트</a>에서 사용하는 편집기입니다. 편집하는 화면과 결과가 같은 방식으로 표시됩니다. 공식 사이트는 <a href="https://ckeditor.com/">ckeditor.com</a>입니다.</p><p>CKEditor는 상용 제품이지만 핵심 코드는 오픈 소스로 제공됩니다. <a href="https://ckeditor.com/docs/ckeditor5/latest/features/index.html">공식 기능 안내</a>에 설명된 기능 중 일부를 Trilium에서 사용합니다. 모든 기능이 활성화된 것은 아닙니다.</p><h2>유료 기능</h2><p>일부 기능은 별도의 상용 라이선스가 필요합니다. 원문 작성 당시에는 Trilium에서 이 기능들을 사용할 수 없었으며 <a href="https://ckeditor.com/docs/ckeditor5/latest/features/slash-commands.html">슬래시 명령</a> 같은 일부 기능의 사용 가능성을 CKEditor 팀과 논의 중이라고 설명했습니다.</p><h2>플러그인</h2><p>플러그인을 작성하면 편집기에 새로운 기능을 추가할 수 있습니다. Trilium에서는 다음 플러그인을 사용하거나 필요한 부분을 수정해 사용합니다.</p><ul><li><a href="https://github.com/isaul32/ckeditor5-math">CKEditor 5 수식 플러그인</a> — 수식 입력</li><li><a href="https://github.com/ckeditor/ckeditor5-mermaid">Mermaid 플러그인</a> — 본문 안의 Mermaid 도표</li><li><a href="https://github.com/mlewand/ckeditor5-keyboard-marker">키보드 키 표시 플러그인</a> — 단축키 서식</li><li><a href="https://github.com/ThomasAitken/ckeditor5-footnotes">각주 플러그인</a> — 각주</li></ul><p>Trilium 전용 기능도 플러그인으로 구현했습니다.</p><ul><li><a class="reference-link" href="#root/_help_2x0ZAX9ePtzV">하위 노트로 잘라내기</a></li><li><a class="reference-link" href="#root/_help_nBAXQFj20hS1">노트 포함</a></li><li>노트 연결을 위한 언급 기능</li><li><a class="reference-link" href="#root/_help_Oau6X9rCuegd">Markdown</a></li><li><a href="#root/_help_QEAPj01N5f7w">참조 링크</a></li><li><a href="#root/_help_NwBbFdNZ9h7O">안내 상자</a> — <a href="https://github.com/aarkue/ckeditor5-admonition">기존 안내 상자 플러그인</a>과 도구 모음 아이콘에서 아이디어를 얻어 별도로 구현했습니다.</li></ul>
@@ -0,0 +1,2 @@
<p>템플릿은 다른 노트의 기본 구조를 정하는 노트입니다. 템플릿을 적용받는 노트에는 다음 효과가 있습니다.</p><ul><li>템플릿의 모든 속성을 <a href="#root/_help_bwZpz2ajCEwO">상속</a>합니다. 상속 가능으로 표시하지 않은 속성도 대상 노트에는 적용됩니다. 대상 노트의 하위 노트에는 상속 가능한 속성만 이어집니다.</li><li>대상 노트의 본문이 비어 있으면 템플릿 본문을 복사합니다.</li><li>템플릿의 하위 노트를 그 아래 단계까지 별도의 사본으로 복사합니다.</li></ul><h2>예제</h2><p>책 템플릿에는 출간 연도와 저자 같은 <a href="#root/_help_OFXdgB2nNk1F">주요 속성</a>을 넣고 주제와 결론 등의 독후감 틀을 작성할 수 있습니다. 인상 깊은 구절과 요약용 하위 노트도 함께 만들 수 있습니다.</p><p><img src="Templates_template.png" alt="책 템플릿"></p><h2>템플릿 적용 노트</h2><p>메뉴에서 템플릿을 선택해 노트를 만들 수 있습니다.</p><p><img src="Templates_template-create-.png" alt="하위 노트 템플릿 선택"></p><p>선택 목록에 나오게 하려면 템플릿 노트에 <code>#template</code> 라벨을 지정하세요. 대상 노트를 연결하는 <code>~template</code> 관계와는 다릅니다. <a href="#root/_help_9sRHySam5fXb">작업 공간</a>에서만 표시하려면 <code>#workspaceTemplate</code>을 사용합니다.</p><p>이미 만든 노트도 <code>~template</code> 관계를 추가하거나 바꿔 템플릿을 지정할 수 있습니다. 새 하위 노트의 기본 템플릿은 <code>~child:template</code>로 지정합니다. <code>~child:child:template</code>처럼 여러 단계에 적용할 수도 있습니다.</p><p>복사 상속은 노트를 만드는 시점에 적용됩니다. 상위 노트의 설정을 나중에 바꿔도 기존 하위 노트에 복사되어 있는 단계별 설정이 자동으로 갱신되지는 않습니다.</p><h2>추가 활용</h2><p><code>#iconClass</code>와 <code>#cssClass</code>를 템플릿에 지정하면 관련 노트의 아이콘과 모양을 통일할 수 있습니다. <a href="#root/_help_wX4HbRucYSDD">사용 예제</a>의 <a href="#root/_help_iRwzGnHPzonm">관계 지도</a>와 <a
href="#root/_help_xYjQUYhpbUEW">할 일 관리</a> 및 <a href="#root/_help_l0tKav7yLHGF">날짜별 노트</a>를 참고하세요.</p><p><a href="#root/_help_47ZrP6FNuoG8">기본 노트 제목</a>의 제목 템플릿과 함께 사용할 수도 있습니다. 노트 템플릿에 <code>#titleTemplate</code>을 지정하세요.</p>
@@ -0,0 +1 @@
<aside class="admonition warning"><p>더 이상 제공되거나 정상 작동하지 않는 Evernote Legacy를 경유하는 과거의 이전 방법입니다. 현재 사용할 수 있는 절차로 안내하는 문서가 아닙니다.</p></aside><h2>OneNote 자료 준비</h2><ul><li>OneNote 태그는 이미지로 가져와질 수 있으므로 필요하면 이모지로 바꿉니다.</li><li>제목 서식을 사용하고 불필요한 공백을 정리합니다.</li><li>매우 긴 페이지는 짧은 노트와 하위 노트로 나누는 편이 편리합니다.</li><li>번호 목록 사이의 불필요한 빈 줄을 없앱니다. 가져온 뒤 번호가 다시 1부터 시작하는 문제를 줄일 수 있습니다.</li></ul><h2>과거의 이전 절차</h2><p><a href="https://web.archive.org/web/20230327110646/https://help.evernote.com/hc/en-us/articles/360052560314">Evernote Legacy 보관 문서</a>를 참고한 방법입니다. 당시에는 계정이 필요했지만 인터넷 연결 없이 가져올 수 있었으며 Evernote 서버에 노트를 동기화하지 않는 방식으로 설명되었습니다. 파일 → 가져오기 → OneNote에서 전자 필기장과 구역을 선택했습니다.</p><p>여러 구역을 한 번에 가져오면 폴더가 합쳐질 수 있습니다. 순서는 유지되므로 이후 다시 나눌 수 있습니다. 가져온 전자 필기장을 오른쪽 클릭해 노트 내보내기를 선택하고 ENEX로 저장합니다.</p><h3>ENEX 정리</h3><p>OneNote 페이지 머리말을 제거하려면 텍스트 편집기에서 정규식 <code>.&lt;div.*&gt;&lt;h1</code>을 찾아 <code>&lt;h1</code>로 바꾸는 방법이 원문에 소개되어 있습니다. 원본을 보관하고 바뀌는 범위를 확인하세요.</p><h3>Trilium으로 가져오기</h3><p>상위 노트를 오른쪽 클릭해 가져오기를 선택하고 ENEX 파일을 지정합니다. 큰 파일은 몇 분이 걸릴 수 있습니다. 파일마다 반복하세요.</p><h2>가져온 뒤 확인할 내용</h2><ul><li>가운데 정렬이 왼쪽 정렬로 바뀔 수 있습니다.</li><li>OneNote 내부 링크는 자동으로 Trilium 노트에 연결되지 않습니다. onenote://를 찾아 대상 노트로 다시 연결해야 합니다. 원문의 문단 연결 관련 제한은 당시 버전 기준입니다.</li><li>글자색과 강조 및 일반 서식은 대체로 유지됩니다.</li><li>기존 수정 이력은 가져오지 못합니다. 이후 수정은 Trilium에서 기록합니다.</li><li>노트 순서는 유지되지만 하위 구조는 다시 정리해야 할 수 있습니다.</li><li>OneNote 구역은 Evernote 태그가 되어 Trilium 속성으로 들어옵니다. 필요하지 않으면 Evernote 내보내기에서 제외합니다.</li><li>Created with OneNote라는 문구가 필요 없으면 가져오기 전에 ENEX에서 찾아 지울 수 있습니다.</li><li>일부 링크는 클릭할 수 없는 상태로 들어올 수 있습니다.</li><li>원문에서는 파일과 화면 캡처 및 첨부 파일이 보존된다고 설명합니다.</li></ul>
@@ -0,0 +1,2 @@
<p>일부 단축키는 트리나 편집기 등 특정 위치에서만 작동합니다. 기본 키는 버전에 따라 다를 수 있으므로 설정 → 단축키에서 현재 값을 확인하세요. <code>global:</code> 접두사는 앱에 초점이 없어도 동작하는 전역 단축키를 지정하며 앱을 다시 시작해야 적용됩니다.</p><h2>노트 탐색</h2><ul><li>↑와 ↓ — 목록에서 위아래 노트로 이동합니다. Ctrl+Shift+↑와 Ctrl+Shift+↓는 편집기에서도 작동합니다.</li><li>←와 → — 하위 트리를 접거나 펼칩니다.</li><li>Alt+←와 Alt+→ — 방문 기록의 이전과 다음으로 이동합니다.</li><li>Ctrl+J — <a href="#root/_help_MMiBEQljMQh2">노트로 이동</a> 창을 엽니다.</li><li>Ctrl+. — 트리의 현재 노트로 이동합니다.</li><li>Backspace — 상위 노트로 이동합니다.</li><li>Alt+C — 트리 전체를 접습니다.</li><li>Alt+- — 하위 트리를 접습니다.</li></ul><p><code>#keyboardShortcut</code> <a href="#root/_help_zEY4DaJG4YT5">라벨</a>에 키 조합을 지정하면 해당 노트로 바로 이동할 수 있습니다. 새로고침 후 적용됩니다. <a href="#root/_help_MMiBEQljMQh2">노트 탐색 예제</a>를 참고하세요.</p><h2>탭</h2><p>노트 링크를 Ctrl을 누른 채 클릭하거나 마우스 가운데 버튼으로 누르면 새 탭에서 엽니다. 데스크톱 앱에서는 Ctrl+T로 새 탭을 열고 Ctrl+W로 닫습니다. Ctrl+Tab과 Ctrl+Shift+Tab으로 다음·이전 탭을 선택합니다.</p><h2>노트 만들기</h2><p>Ctrl+O는 현재 노트 다음에 새 노트를 만듭니다. Ctrl+P는 하위 노트를 만듭니다. F2는 현재 가지의 <a href="#root/_help_MMiBEQljMQh2">접두사</a>를 편집합니다.</p><h2>이동과 복제</h2><ul><li>Ctrl+↑와 Ctrl+↓ — 목록 순서를 바꿉니다.</li><li>Ctrl+←와 Ctrl+→ — 상위·하위 단계로 옮깁니다.</li><li>Shift+↑와 Shift+↓ — 선택 범위를 늘립니다.</li><li>Ctrl+A — 같은 단계의 노트를 모두 선택합니다.</li><li>Shift를 누른 채 클릭 — 여러 노트를 선택합니다.</li><li>Ctrl+C — <a href="#root/_help_IakOLONlIfGI">복제</a>할 노트를 복사합니다.</li><li>Ctrl+X — 옮길 노트를 잘라냅니다.</li><li>Ctrl+V — 현재 노트 아래에 붙입니다. 복사했으면 복제하고 잘라냈으면 이동합니다.</li><li>Delete — 선택한 노트와 하위 트리를 삭제합니다.</li></ul><h2>편집</h2><p><a class="reference-link" href="#root/_help_iPIMuisry3hd">텍스트 노트</a>의 <a class="reference-link" href="#root/_help_oiVPnW8QfnvS">편집 단축키</a>와 <a
class="reference-link" href="#root/_help_QrtTYPmdd1qq">Markdown식 자동 서식</a>도 참고하세요. 트리에서 Enter를 누르면 제목으로 이동하고 제목에서 Enter를 누르면 본문으로 이동합니다. Ctrl+.은 트리로 돌아갑니다.</p><h2>실행 화면</h2><ul><li>F5 또는 Ctrl+R — 프런트엔드 새로고침</li><li>Ctrl+Shift+I — 개발자 도구</li><li>Ctrl+F — 찾기</li><li>Ctrl+-와 Ctrl+= — 축소와 확대</li><li>Alt+O — SQL 콘솔</li><li>Alt+M — 원문에 기록된 방해 요소 숨김 단축키. 최신 집중 모드 키는 설정에서 확인하세요.</li><li>F11 — 전체 화면</li><li>Ctrl+S — 트리의 <a href="#root/_help_eIg8jdvaoNNd">검색</a> 창 전환</li><li>Alt+A — 노트 <a href="#root/_help_zEY4DaJG4YT5">속성</a> 창</li></ul>
@@ -0,0 +1,10 @@
<p><img style="aspect-ratio:987/725;" src="Search_image.png" width="987"
height="725" alt="노트 검색 화면"></p><p>제목과 본문 및 <a href="#root/_help_zEY4DaJG4YT5">속성</a>을 검색합니다. 검색 조건을 저장하면 트리에 검색 노트가 생기고 결과가 하위 항목으로 나타납니다.</p><h2>검색 열기</h2><p><a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>의 검색 버튼을 누릅니다. 특정 하위 트리만 찾으려면 <a class="reference-link" href="#root/_help_YtSN43OrfzaA">노트 트리 메뉴</a>의 하위 트리에서 검색 또는 Ctrl+Shift+S를 사용합니다. <a href="#root/_help_A9Oc6YKKc65v">단축키</a>로도 검색 화면을 열 수 있습니다.</p><h2>사용 방법</h2><p>검색어를 입력합니다. 일반 단어뿐 아니라 속성과 노트 정보로 조건을 지정할 수 있습니다. 상위 노트를 지정하면 해당 노트와 하위 항목만 찾습니다. <a href="#root/_help_OR8WJ7Iz9K4U">확대해서 보는 노트</a>나 <a href="#root/_help_9sRHySam5fXb">작업 공간</a>에서 열면 이 값이 미리 채워질 수 있습니다. 전체를 검색하려면 비웁니다. 깊이로 탐색할 하위 단계를 제한할 수 있습니다.</p><p>검색을 누르면 아래에 결과가 표시됩니다. 작업을 추가한 경우에는 검색 후 작업 실행 버튼을 사용할 수 있습니다. 노트로 저장은 조건을 <a class="reference-link" href="#root/_help_m523cpzocqaD">저장된 검색</a> 노트로 만듭니다.</p><h2>검색 옵션</h2><p>검색 옵션 추가에서 항목을 선택하고 세부 값을 지정합니다. 오른쪽 X로 제거합니다.</p><ul><li>검색 스크립트 — 직접 검색을 처리할 <a class="reference-link" href="#root/_help_6f9hih2hXXZk">코드 노트</a>를 지정합니다.</li><li>빠른 검색 — 본문을 제외하고 제목과 조건에 지정한 속성·관계를 검색합니다. 큰 <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a>에서 속도를 높일 수 있습니다.</li><li>보관된 노트 포함 — 평소 제외하는 <a class="reference-link" href="#root/_help_MKmLg5x6xkor">보관된 노트</a>도 찾습니다.</li><li>정렬 기준 — 관련성 대신 만든 날짜나 제목 등을 사용합니다. 오름차순과 내림차순도 지정합니다.</li><li>결과 수 제한 — 최대 개수를 지정합니다. 제한을 넘는 결과는 표시되지 않습니다.</li><li>디버그 — 검색식을 해석한 정보를 서버 <a
class="reference-link" href="#root/_help_qzNzp9LYQyPT">로그</a>에 기록합니다. 복잡한 조건의 문제를 분석할 때 사용합니다.</li><li>작업 — 검색 결과에 라벨이나 관계 추가 등을 적용합니다. 같은 종류를 여러 번 추가할 수 있습니다. <a class="reference-link"
href="#root/_help_ivYnonVFBxbQ">일괄 작업</a>과 같은 동작을 제공하며 <a class="reference-link"
href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서 직접 대상을 고르는 대신 검색 결과를 사용합니다. 먼저 검색으로 대상을 확인한 뒤 검색 후 작업 실행을 누르세요.</li></ul><h2>기본 검색 예제</h2><ul><li><code>반지 톨킨</code> — 두 단어가 모두 있는 노트를 찾습니다.</li><li><code>"반지의 제왕" 톨킨</code> — 따옴표 안의 문구는 그대로 일치해야 합니다.</li><li><code>note.content *=* 반지 OR note.content *=* 톨킨</code> — 본문에 둘 중 하나가 있는 노트를 찾습니다.</li><li><code>탑 #book</code> — 탑이라는 단어와 <code>book</code> 라벨이 모두 있어야 합니다.</li><li><code>탑 #book or #author</code> — 탑이라는 단어가 있고 두 라벨 중 하나가 있어야 합니다.</li><li><code>탑 #!book</code> — 탑이라는 단어가 있으면서 <code>book</code> 라벨은 없는 노트입니다.</li><li><code>#book #publicationYear = 1954</code> — 책 라벨이 있고 출판 연도 값이 1954인 노트입니다.</li><li><code>#genre *=* 판타지</code> — 장르 값에 판타지가 포함된 노트입니다. <code>*=*</code>는 포함하며 <code>=*</code>는 시작하고 <code>*=</code>는 끝나는 조건입니다. <code>!=</code>는 같지 않음입니다.</li><li><code>#book #publicationYear &gt;= 1950 #publicationYear &lt; 1960</code> — 1950년대에 출판된 책을 찾습니다.</li><li><code>#dateNote &gt;= TODAY-30</code> — 30일 전 이후의 날짜 노트를 찾습니다. 상대값은 초 단위 <code>NOW</code>와 일 단위 <code>TODAY</code> 및 월 단위 <code>MONTH</code>와 연 단위 <code>YEAR</code>를 지원합니다.</li><li><code>~author.title *=* 톨킨</code> — 저자 관계의 대상 제목에 톨킨이 포함된 노트를 찾습니다.</li><li><code>#publicationYear %= '19[0-9]{2}'</code> — 정규식으로 출판 연도를 검색합니다. 이 기능은 0.52부터 지원합니다.</li></ul><h2>고급 예제</h2><p><code>~author.relations.son.title = '크리스토퍼 톨킨'</code>은 저자 관계를 따라간 노트에서 다시 <code>son</code> 관계를 따라갔을 때 제목이 일치하는 노트를 찾습니다. 예를 들어 책의 <code>author</code>가 J. R. R. 톨킨을 가리키고 그 노트의 <code>son</code>이 크리스토퍼 톨킨을 가리키는 구조입니다.</p><p><code>~author.title *= 톨킨 OR (#publicationDate &gt;= 1954 AND #publicationDate &lt;= 1960)</code>처럼 논리 연산과 괄호를 사용할 수 있습니다. 식 전체가 괄호로 시작할 때는 앞에 <code>#</code> 또는 <code>~</code> 구분자가 필요합니다.</p><ul><li><code>note.parents.title = '책'</code> — 바로 위 노트 제목이 책인 항목</li><li><code>note.parents.parents.title = '책'</code> — 두 단계 위 노트 제목이 책인 항목</li><li><code>note.ancestors.title = '책'</code> — 상위 경로에 책이라는 노트가 있는 항목</li><li><code>note.children.title = '하위 노트'</code> — 지정한 제목의 하위 노트가 있는 항목</li></ul><h2>노트 정보로 검색</h2><p><code>note.</code> 뒤에 속성명을 붙입니다. 예: <code>note.type = code AND note.mime = 'application/json'</code>. 사용할 수 있는 정보는 다음과 같습니다.</p><p><code>noteId dateModified dateCreated isProtected type title text content rawContent ownedLabelCount labelCount ownedRelationCount relationCount ownedRelationCountIncludingLinks relationCountIncludingLinks ownedAttributeCount attributeCount targetRelationCount targetRelationCountIncludingLinks parentCount childrenCount isArchived contentSize noteSize revisionCount</code></p><h3>정렬과 결과 수 제한</h3><pre><code class="language-text-x-trilium-auto">#author=톨킨 orderBy #publicationDate desc, note.title limit 10</code></pre><p>저자 라벨 값이 톨킨인 노트를 찾아 출판 날짜 내림차순으로 정렬합니다. 날짜가 같으면 제목을 기준으로 정렬하고 처음 10개만 표시합니다.</p><h3>부정 조건</h3><pre><code class="language-text-x-trilium-auto">#book AND not(note.ancestors.title = '톨킨')</code></pre><p>톨킨이라는 노트의 하위 트리에 속하지 않는 책 노트를 찾습니다.</p><h2>검색식의 구성</h2><p>라벨과 관계의 전체 문법은 다음과 같습니다.</p><pre><code class="language-text-x-trilium-auto">note.labels.publicationYear = 1954</code></pre><pre><code class="language-text-x-trilium-auto">note.relations.author.title *=* 톨킨</code></pre><p>자주 사용하는 형태는 짧게 쓸 수 있습니다.</p><pre><code class="language-text-x-trilium-auto">#publicationYear = 1954
~author.title *=* 톨킨</code></pre><h3>본문 검색과 속성 검색의 구분</h3><p><code>톨킨 #book</code>에서 톨킨은 본문 검색어이고 <code>#book</code>은 속성 조건입니다. <code>#</code>와 <code>~</code> 및 <code>note.</code> 같은 문법으로 구분합니다. 일반 텍스트로 찾으려면 따옴표로 감싸거나 역슬래시로 이스케이프합니다.</p><pre><code class="language-text-x-trilium-auto">"note.txt"
\#hash
#myLabel = '"안녕하세요"라고 말하기'</code></pre><h3>특수문자와 따옴표</h3><p>작은따옴표와 큰따옴표 및 백틱을 지원합니다.</p><pre><code class="language-text-x-trilium-auto">"note.txt"
\#hash
#myLabel = '"안녕하세요"라고 말하기'</code></pre><h3>값의 형 변환</h3><p>라벨은 문자열로 저장되지만 숫자 비교 연산에서는 숫자로 변환합니다. 다음 예제는 만든 날짜가 2019년 5월로 시작하는 노트를 찾습니다.</p><pre><code class="language-text-x-trilium-auto">note.dateCreated =* '2019-05'</code></pre><p><code>#publicationYear &gt;= 1960</code>은 출판 연도를 숫자로 비교합니다.</p><h2>URL로 검색 실행</h2><p>검색어를 <a href="https://meyerweb.com/eric/tools/dencoder/">URL 인코딩</a>한 뒤 주소에 넣으면 앱을 열면서 검색할 수 있습니다. 예: <code>http://localhost:8080/#?searchString=abc</code></p>
@@ -0,0 +1,6 @@
<p>노트는 Trilium에서 정보를 담는 기본 단위입니다. 주요 구성 요소는 제목과 본문입니다.</p><h3>노트 유형</h3><p>주로 사용하는 유형은 서식 있는 <a class="reference-link"
href="#root/_help_iPIMuisry3hd">텍스트 노트</a>입니다. 그림과 도표에는 <a class="reference-link" href="#root/_help_grjYqerjn243">캔버스</a>와 <a
class="reference-link" href="#root/_help_s1aBHPd79XYj">Mermaid 도표</a>를 사용할 수 있습니다. <a class="reference-link"
href="#root/_help_m523cpzocqaD">저장된 검색</a>과 <a class="reference-link"
href="#root/_help_HcABDtFCkbFN">HTML 표시 노트</a> 같은 고급 유형도 있으며 <a class="reference-link" href="#root/_help_CdNpE2pqjmI6">스크립트</a>와 함께 활용할 수 있습니다.</p><p>별도의 폴더 유형은 없습니다. 모든 노트는 하위 노트를 가질 수 있어 폴더 역할을 할 수 있습니다.</p><h3>최상위 노트</h3><p>노트 트리의 시작점인 최상위 노트가 하나 있습니다. 다른 모든 노트는 그 아래에 놓입니다.</p><h3>트리 구조</h3><p>노트 자체와 트리에서의 위치 정보는 별도로 관리됩니다. <a class="reference-link" href="#root/_help_IakOLONlIfGI">노트 복제</a>를 참고하세요. 파일 시스템과 비슷하지만 하나의 노트에 본문과 하위 노트가 함께 있을 수 있습니다. 하위 노트가 없는 노트를 말단 노트라고 합니다.</p><h3>삭제와 복원</h3><p>처음 삭제할 때는 제목과 본문 및 속성을 바로 지우지 않고 삭제 상태로 표시해 숨깁니다. 기본적으로 7일 동안 <a class="reference-link" href="#root/_help_r5JGHN99bVKn">최근 변경 사항</a>에서 삭제 취소 링크로 복원할 수 있습니다.</p><p>복원하면 본문과 속성도 되살아납니다. 같은 작업으로 삭제한 하위 노트도 함께 복원됩니다. 복원할 위치가 있어야 하므로 상위 노트부터 복원해야 합니다. 여러 차례에 걸쳐 삭제했다면 삭제한 순서의 반대로 복원하세요.</p><p>보관 기간이 지나면 제목과 본문 및 수정 이력과 속성이 영구 삭제됩니다. 이후에는 <a class="reference-link"
href="#root/_help_ODY7qQn5m2FT">백업</a>이 있어야 복구할 수 있습니다. 기본 7일인 보관 기간은 설정에서 바꿀 수 있습니다.</p><h2>관련 문서</h2><p><a class="reference-link" href="#root/_help_CoFPLs3dRlXc">읽기 전용 노트</a></p>
@@ -0,0 +1,2 @@
<h2>여러 위치에 놓기</h2><p>트리로 지식을 정리하다 보면 같은 노트를 여러 주제 아래에 두고 싶을 때가 있습니다. 예를 들어 기술 아래에 프로그래밍과 운영체제를 만들고 프로그래밍에는 Kotlin과 JavaScript를 두며 운영체제에는 Linux와 Windows를 둘 수 있습니다.</p><p>여기에 <a href="https://en.wikipedia.org/wiki/Bash_(Unix_shell)">Bash</a>를 공부한 기록을 넣는다면 프로그래밍 언어이면서 Linux 셸이기도 하므로 한 위치만 고르기 어렵습니다.</p><h2>복제의 의미</h2><p>Trilium은 같은 노트에 여러 상위 노트를 연결할 수 있습니다. 이를 복제라고 부릅니다. 별도의 사본을 만드는 것이 아니라 하나의 노트를 여러 위치에서 참조합니다. 따라서 한쪽에서 수정하면 다른 위치에서도 같은 내용을 보여 줍니다.</p><p>Bash 노트를 프로그래밍 아래와 Linux 아래에 함께 놓으면 됩니다. 하위 노트도 같은 구조와 내용을 공유합니다.</p><h3>만드는 방법</h3><p><img src="Cloning Notes_create-clone.gif" alt="노트 복제 예시"></p><p>오른쪽 클릭 메뉴나 링크 추가 창으로 만들 수 있습니다. <kbd>Ctrl</kbd>+<kbd>C</kbd>와 <kbd>Ctrl</kbd>+<kbd>V</kbd> <a
href="#root/_help_A9Oc6YKKc65v">단축키</a>도 사용할 수 있습니다. 상단 리본의 노트 경로에서 연결된 모든 위치를 확인하세요. 트리 제목 옆의 별표는 다른 위치에도 있는 노트임을 뜻합니다.</p><h2>복제된 노트 삭제</h2><p>다른 위치에도 있는 노트라면 현재 위치의 연결만 제거하고 노트 자체와 다른 연결은 유지합니다. 마지막 연결을 삭제하면 노트 자체를 삭제합니다. 하위 노트에도 같은 규칙을 적용하므로 다른 위치에 연결된 하위 노트는 남습니다.</p>
@@ -0,0 +1,3 @@
<p><img src="Export as PDF_image.png" alt="PDF로 내보내기 메뉴"></p><p>Trilium 데스크톱 앱에서는 노트를 PDF로 내보낼 수 있습니다. 서버와 모바일 PWA에서는 기술적인 제약으로 이 항목이 표시되지 않습니다.</p><p>노트 제목 오른쪽의 <img src="1_Export as PDF_image.png" alt="노트 메뉴 버튼">을 누르고 PDF로 내보내기를 선택한 뒤 저장 위치를 지정하세요.</p><h2>내보낸 파일 열기</h2><p>저장이 끝나면 운영체제의 기본 프로그램으로 PDF를 엽니다. Linux의 GNOME 환경에서는 추천 프로그램 목록을 사용하므로 예상과 다른 프로그램이 열릴 수 있습니다. 다음 명령으로 PDF 연결 프로그램을 확인한 뒤 원하는 프로그램으로 설정하세요.</p><pre><code class="language-text-x-trilium-auto">gio mime application/pdf</code></pre><h2>표시 문제 보고하기</h2><p>표가 잘 맞지 않거나 글자가 잘리는 문제가 있다면 <a
href="#root/_help_wy8So3yZZlH9">문제를 보고</a>해 주세요. <img src="1_Export as PDF_image.png" alt="노트 메뉴 버튼"> → 노트 내보내기 → 이 노트와 모든 하위 노트 → HTML을 ZIP으로 내보내기로 재현용 자료를 만들 수 있습니다. 공유할 자료에 개인 정보가 없는지 확인하세요.</p><h2>가로 방향</h2><p>별도의 내보내기 설정 창은 없지만 <code>#printLandscape</code> <a class="reference-link" href="#root/_help_zEY4DaJG4YT5">속성</a>을 추가하면 해당 노트를 가로 방향으로 출력할 수 있습니다.</p><h2>용지 크기</h2><p>기본 용지는 Letter입니다. <code>#printPageSize</code> 값으로 <code>A0</code>부터 <code>A6</code>까지 지정할 수 있습니다. <code>Legal</code>과 <code>Letter</code> 및 <code>Tabloid</code>와 <code>Ledger</code>도 지원합니다.</p><h2>단축키</h2><p><a class="reference-link"
href="#root/_help_4TIF1oA4VQRO">설정</a>의 단축키에서 <code>exportAsPdf</code>에 원하는 키 조합을 지정할 수 있습니다.</p>
@@ -0,0 +1,8 @@
<p>하위 노트가 있으면 본문 끝에 목록이 표시되어 쉽게 이동할 수 있습니다.</p><h2>설정</h2><p>특정 노트에서 숨기려면 <code>hideChildrenOverview</code> <a
href="#root/_help_zEY4DaJG4YT5">라벨</a>을 지정하세요. 격자 보기 등은 성능을 위해 여러 페이지로 나눠 표시합니다. <code>pageSize</code>로 한 페이지의 노트 수를 정할 수 있습니다.</p><h2>보기 방식</h2><p>기본은 격자 보기입니다. <a class="reference-link"
href="#root/_help_GTwFsgaA0lCt">책 노트</a>에서는 <a class="reference-link"
href="#root/_help_BlN9DFI679QC">상단 리본</a>으로 바꿀 수 있습니다. 다른 노트 유형도 <code>#viewType</code> 속성으로 직접 지정할 수 있습니다.</p><h3>격자 보기</h3><p><img style="aspect-ratio:1025/655;" src="1_Note List_image.png" width="1025"
height="655" alt="격자 보기"></p><p>하위 노트를 카드처럼 배치합니다. <a class="reference-link" href="#root/_help_iPIMuisry3hd">텍스트 노트</a>는 마우스 휠로 본문을 조금 더 볼 수 있습니다. <a class="reference-link" href="#root/_help_6f9hih2hXXZk">코드 노트</a>에는 구문 강조를 적용합니다. <a class="reference-link" href="#root/_help_W8vYD3Q1zjCR">파일 노트</a>는 오디오와 동영상 및 PDF 미리보기를 제공합니다. 본문이 없는 노트는 하위 노트 목록을 대신 표시합니다.</p><h3>목록 보기</h3><p><img style="aspect-ratio:1013/526;" src="Note List_image.png" width="1013"
height="526" alt="목록 보기"></p><p>각 노트를 한 줄로 표시하며 기본적으로 제목과 아이콘만 보입니다. 펼치면 본문과 하위 노트를 확인할 수 있으며 더 아래 단계도 펼칠 수 있습니다.</p><h3>달력 보기</h3><p><img style="aspect-ratio:1090/598;" src="2_Note List_image.png" width="1090"
height="598" alt="달력 보기"></p><p>하위 노트를 시작일이 있는 일정으로 표시합니다. 종료일도 지정할 수 있으며 일정을 옮기거나 새로 만들 수 있습니다. <a class="reference-link"
href="#root/_help_xWbu3jpNWapp">달력 보기 안내</a>를 참고하세요.</p>
@@ -0,0 +1,6 @@
<p><img style="aspect-ratio:767/606;" src="4_Calendar View_image.png" width="767"
height="606" alt="책 노트의 달력 보기"></p><p>시작 날짜가 있는 하위 노트를 일정으로 표시합니다. 종료 날짜도 지정할 수 있습니다. 주 보기는 요일별 열에 시간 지정 일정과 종일 일정을 표시합니다. 월 보기는 한 달의 일정을 보여 주며 종일 일정을 만들 수 있습니다. 연 보기는 한 해를 한눈에 보여 줍니다. 목록 보기는 한 달의 일정을 순서대로 나열합니다. 일정 생성과 이동도 지원합니다.</p><h2>달력 만들기</h2><p>노트 트리에서 다음에 노트 삽입 또는 하위 노트 삽입을 선택하고 책 유형으로 만듭니다.</p><p><img src="2_Calendar View_image.png" alt="책 노트 만들기"></p><p>상단 리본의 책 속성에서 보기 유형을 달력으로 바꿉니다.</p><p><img src="3_Calendar View_image.png" alt="달력 보기 선택"></p><h2>일정 만들기</h2><p>날짜를 누르고 새 노트 제목을 입력합니다. 창을 닫거나 Esc를 누르면 만들지 않습니다. 여러 날짜를 끌어 선택하면 시작일과 종료일을 함께 지정합니다.</p><p><img src="Calendar View_image.png" alt="여러 날짜를 선택해 일정 만들기"></p><p>책 노트에 <code>~child:template</code> 관계가 있으면 새 일정에 해당 템플릿을 적용합니다.</p><h2>일정 조작</h2><p>마우스를 올리면 노트 정보가 나타납니다.</p><p><img src="7_Calendar View_image.png" alt="일정 미리보기"></p><p>왼쪽 버튼은 현재 화면에서 열고 가운데 버튼은 새 탭에서 엽니다. 오른쪽 메뉴에서는 분할 화면이나 새 창으로 열 수 있습니다. 일정을 끌어 날짜를 바꾸거나 오른쪽 가장자리를 끌어 기간을 바꿉니다.</p><h2>달력 설정</h2><ul><li><code>#calendar:hideWeekends</code> — 값과 관계없이 토요일과 일요일을 숨깁니다.</li><li><code>#calendar:weekNumbers</code> — 주 번호를 표시합니다.</li><li><code>#calendar:view</code> — <code>timeGridWeek</code>는 주 보기이며 <code>dayGridMonth</code>는 월 보기입니다. <code>multiMonthYear</code>는 연 보기이고 <code>listMonth</code>는 목록 보기입니다. 다른 값은 기본 월 보기로 처리합니다. 화면에서 보기를 바꾸면 값도 갱신됩니다.</li><li><code>~child:template</code> — 달력에서 만드는 노트의 템플릿입니다.</li></ul><p>한 주의 시작 요일은 앱 설정에서 일요일이나 월요일로 지정합니다.</p><h2>일정별 속성</h2><ul><li><code>#startDate</code> — 시작일입니다. <code>YYYY-MM-DD</code> 형식으로 입력합니다.</li><li><code>#endDate</code> — 종료일입니다. 해당 날짜까지 포함하며 하루 일정에서는 생략할 수 있습니다.</li><li><code>#startTime</code> — 24시간제의 시:분 형식입니다. 없으면 종일 일정으로 처리합니다.</li><li><code>#endTime</code> — 종료 시각입니다. 종료일이 없으면 시작일 기준입니다.</li><li><code>#color</code> — <code>red</code>나 <code>#FF0000</code> 같은 색을 지정합니다. 트리의 노트 색에도 적용합니다.</li><li><code>#calendar:color</code> — 달력의 일정 색만 바꿉니다.</li><li><code>#iconClass</code> — 제목 왼쪽에 노트 아이콘을 표시합니다.</li><li><code>#calendar:title</code> — 제목 대신 표시할 라벨이나 관계 이름을 지정합니다. 앞에 <code>#</code> 또는 <code>~</code>를 붙이지 않습니다.</li><li><code>#calendar:displayedAttributes</code> — 달력에 표시할 속성 이름을 쉼표로 나열합니다. 관계는 대상 노트 제목을 표시합니다.</li></ul><p><img src="9_Calendar View_image.png" alt="일정에 속성 표시"></p><p>예: <code>#weight="70" #Mood="좋음" #calendar:displayedAttributes="weight,Mood"</code>. 관계 예: <code>~assignee=@담당자 #calendar:displayedAttributes="assignee"</code>.</p><p><code>#calendar:startDate</code>에 <code>expiryDate</code>처럼 다른 라벨 이름을 지정하면 그 값을 시작일로 사용합니다. 이름 앞에 <code>#</code>를 붙이지 않습니다. 지정한 라벨이 없으면 기본 속성을 사용합니다. 같은 방식으로 <code>#calendar:endDate</code>와 <code>#calendar:startTime</code> 및 <code>#calendar:endTime</code>도 바꿀 수 있습니다.</p><h2>작동 방식</h2><p><img src="11_Calendar View_image.png" alt="날짜 속성과 달력 일정"></p><p>보통 <code>#startDate</code>가 있는 하위 노트를 표시하고 필요하면 <code>#endDate</code>를 사용합니다. 각 노트에서 날짜를 쉽게 편집하려면 책 노트에 다음 속성을 추가합니다.</p><pre><code class="language-text-x-trilium-auto">#viewType=calendar #label:startDate(inheritable)="promoted,alias=시작일,single,date"
#label:endDate(inheritable)="promoted,alias=종료일,single,date"
#hidePromotedAttributes </code></pre><p><img src="10_Calendar View_image.png" alt="주요 속성으로 날짜 편집"></p><p>일지 밖의 일반 달력은 여러 단계의 하위 노트까지 찾아 일정을 표시합니다.</p><h2>일지와 함께 사용</h2><p>일지 루트의 유형을 책으로 바꾸고 달력 보기를 선택합니다. <code>#calendarRoot</code> 또는 <code>#workspaceCalendarRoot</code>를 감지하면 다음과 같이 동작합니다.</p><ul><li><code>startDate</code> 대신 <code>dateNote</code>로 날짜를 읽습니다.</li><li>빈 영역을 끌어 선택하거나 일정 길이를 바꾸는 조작은 사용할 수 없습니다.</li><li>빈 날짜를 누르면 해당 일일 노트를 열고 없으면 만듭니다.</li><li>일일 노트의 바로 아래 노트는 날짜 속성이 없어도 표시합니다. 그보다 더 아래 단계는 표시하지 않습니다.</li></ul><p><img src="8_Calendar View_image.png" width="1217" height="724" alt="일지의 달력 보기"></p><h2>다른 속성을 일정 제목으로 사용</h2><p>달력 노트가 아닌 일정 노트에 <code>#calendar:title</code>을 지정합니다. 값에는 표시할 라벨 이름을 입력합니다. 템플릿 등으로 상속해도 됩니다. 해당 라벨이 없으면 노트 제목을 사용합니다.</p><pre><code class="language-text-x-trilium-auto">#startDate=2025-02-11 #endDate=2025-02-13 #name="내 휴가" #calendar:title="name"</code></pre><p><img style="aspect-ratio:445/124;" src="5_Calendar View_image.png" width="445"
height="124" alt="라벨 값을 일정 제목으로 표시"></p><h3>관계의 대상 제목 사용</h3><p>관계 이름도 지정할 수 있습니다. 같은 이름의 관계가 여러 개면 하나의 노트에서 여러 일정으로 표시됩니다.</p><pre><code class="language-text-x-trilium-auto">#startDate=2025-02-14 #endDate=2025-02-15 ~for=@김민수 ~for=@이서연 #calendar:title="for"</code></pre><p><img src="6_Calendar View_image.png" width="294" height="151" alt="여러 관계 대상을 일정으로 표시"></p><p>대상 노트에도 <code>#calendar:title</code>을 지정해 별도 라벨 값을 표시할 수 있습니다. 이 단계에서는 관계를 다시 따라가지 않습니다. 관계가 순환해 무한 반복되는 일을 막기 위한 제한입니다.</p><pre><code class="language-text-x-trilium-auto">#calendar:title="shortName" #shortName="민수"</code></pre><p><img style="aspect-ratio:296/150;" src="1_Calendar View_image.png" width="296"
height="150" alt="대상 노트의 짧은 이름 표시"></p>
@@ -0,0 +1 @@
<p>민감한 자료를 보관할 때 노트 보호 기능을 사용할 수 있습니다. 보호된 노트는 암호화되므로 <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a> 파일만으로 본문을 읽을 수 없습니다.</p><p>보호 노트를 열려면 비밀번호로 보호 세션을 시작해야 합니다. 기본적으로 10분 동안 사용하지 않으면 세션이 끝납니다. 보호 노트를 편집하는 동안에는 시간이 연장되며 일반 노트로 이동하면 유휴 시간이 계산됩니다.</p><p>보호 기능은 내용을 숨기는 기능입니다. 보호 세션 밖에서도 노트를 옮기거나 삭제할 수 있으므로 삭제 방지 기능과는 다릅니다.</p><h2>보호 설정</h2><p>기본적으로 노트는 보호되지 않습니다. 제목 옆 방패 아이콘으로 설정하세요.</p><p><img src="Protected Notes_protecting.gif" alt="보호 노트 설정과 열기"></p><h2>암호화 범위</h2><p>제목과 본문 및 이미지와 첨부 파일은 암호화합니다. 트리 구조와 수정 시각 같은 메타데이터 및 <a href="#root/_help_zEY4DaJG4YT5">속성</a>은 암호화하지 않습니다. 보호 노트가 있다는 사실과 위치는 보일 수 있습니다.</p><h2>암호화 과정</h2><p>다음은 이 버전의 원문에 설명된 처리 과정입니다.</p><ul><li>입력한 비밀번호를 검증용 <a href="https://en.wikipedia.org/wiki/Scrypt">scrypt</a>와 <a href="https://en.wikipedia.org/wiki/Salt_(cryptography)">솔트</a>로 확인합니다.</li><li>다른 솔트로 비밀번호를 다시 처리해 데이터 키를 여는 값을 만듭니다. scrypt는 비밀번호 추측 비용을 높이는 <a href="https://en.wikipedia.org/wiki/Key_stretching">키 강화</a>에 사용됩니다.</li><li>생성한 값으로 실제 데이터 암호화 키를 복호화합니다. 이 키는 <a href="https://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES-128</a>과 무작위 <a href="https://en.wikipedia.org/wiki/Initialization_vector">초기화 벡터</a>를 사용해 암호화되어 있습니다. 데이터 키는 <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a> 초기화 시 무작위로 만들며 비밀번호를 바꿀 때는 데이터 키를 다시 암호화합니다.</li><li>데이터 키로 제목과 본문을 복호화합니다. 원문은 AES-128의 <a href="https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation">CBC 모드</a>를 사용하며 매 암호화 작업마다 다른 초기화 벡터를 생성해 암호문과 함께 저장한다고 설명합니다.</li></ul><h2>공유</h2><p>보호 노트는 일반 노트처럼 공개 공유할 수 없습니다. 올바른 비밀번호로 보호 세션을 시작해야 내용을 볼 수 있습니다.</p>
@@ -0,0 +1,4 @@
<p><a class="reference-link" href="#root/_help_iPIMuisry3hd">텍스트</a>와 <a
class="reference-link" href="#root/_help_6f9hih2hXXZk">코드</a> 등 일부 노트는 읽기 전용으로 설정할 수 있습니다. 편집할 수 없는 화면으로 열리지만 필요하면 일시적으로 편집 모드로 전환할 수 있습니다.</p><h2>자동 읽기 전용</h2><p>매우 긴 노트는 편집기 성능을 위해 자동으로 읽기 전용으로 열립니다. 노트별로 해제할 수 있으며 <a class="reference-link"
href="#root/_help_4TIF1oA4VQRO">설정</a>의 <a class="reference-link" href="#root/_hidden/_options/_help__optionsTextNotes">텍스트 노트</a>와 <a
class="reference-link" href="#root/_hidden/_options/_help__optionsCodeNotes">코드 노트</a>에서 적용 기준 글자 수를 바꿀 수 있습니다.</p><h2>노트별 설정</h2><p><a class="reference-link" href="#root/_help_BlN9DFI679QC">상단 리본</a> → 기본 속성 → 편집 가능 여부에서 선택합니다.</p><ul><li>자동 — 기본적으로 편집할 수 있지만 정해진 크기를 넘으면 읽기 전용으로 엽니다.</li><li>읽기 전용 — 크기와 관계없이 읽기 전용으로 엽니다. 필요하면 잠시 편집할 수 있습니다.</li><li>항상 편집 가능 — 크기에 따른 자동 읽기 전용 전환을 사용하지 않습니다.</li></ul><p>편집 가능 여부가 표시되지 않으면 해당 유형은 읽기 전용 설정을 지원하지 않습니다. <a href="#root/_help_zEY4DaJG4YT5">라벨</a>로 직접 지정할 수도 있습니다. <code>readOnly</code>는 읽기 전용이며 <code>autoReadOnlyDisabled</code>는 항상 편집 가능입니다.</p><h2>잠시 편집하기</h2><p><a class="reference-link" href="#root/_help_XpOYSgsLkTJy">떠 있는 버튼</a> 영역의 <img src="Read-Only Notes_image.png" alt="편집 버튼">을 누르면 편집할 수 있습니다. 다른 노트로 이동한 뒤 다시 열면 읽기 전용으로 돌아갑니다.</p><h2>유형별 동작</h2><p><a class="reference-link" href="#root/_help_s1aBHPd79XYj">Mermaid 도표</a>는 읽기 전용일 때 코드를 숨기고 도표를 전체 영역에 표시합니다. <a class="reference-link" href="#root/_help_XpOYSgsLkTJy">떠 있는 버튼</a>에서 편집 잠금을 켜거나 끌 수 있습니다.</p>
@@ -0,0 +1,2 @@
<h2>직접 정렬하기</h2><p><a class="reference-link"
href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서 상위 노트를 오른쪽 클릭하고 고급 → 노트 정렬을 선택하세요. 현재 노트만 정렬하며 이후 추가되는 노트까지 자동으로 정렬하지는 않습니다.</p><p>제목과 생성일 및 수정일을 기준으로 오름차순이나 내림차순으로 정렬할 수 있습니다. 폴더를 먼저 표시하거나 특정 언어의 규칙에 따른 자연 정렬을 선택할 수도 있습니다.</p><h2>자동 정렬</h2><p>상위 노트에 다음 <a href="#root/_help_zEY4DaJG4YT5">라벨</a>을 지정합니다.</p><ul><li><code>#sorted</code> — 자동 정렬을 켭니다. 값으로 정렬 기준을 지정할 수도 있습니다.</li><li><code>#sortDirection=desc</code> — 내림차순으로 정렬합니다. 기본값은 오름차순입니다.</li><li><code>#sortFoldersFirst</code> — 하위 노트가 있는 노트를 먼저 표시합니다.</li></ul><p>정렬은 다음 우선순위를 따릅니다. 앞선 기준이 같을 때 다음 기준을 적용합니다.</p><ul><li><code>#top</code>이 있는 하위 노트를 맨 위에 둡니다.</li><li><code>#bottom</code>이 있는 하위 노트를 맨 아래에 둡니다. 이 기능은 0.62부터 지원합니다.</li><li>상위 노트의 <code>#sorted</code> 값을 기준으로 정렬합니다. 값이 없으면 제목순입니다. <code>title</code>과 <code>dateModified</code> 및 <code>dateCreated</code>는 각각 제목과 수정일 및 생성일을 뜻합니다. 다른 값은 하위 노트의 라벨 이름으로 해석합니다. 예를 들어 상위 노트에 <code>#sorted=myOrder</code>를 지정하고 하위 노트에 <code>#myOrder=001</code>과 <code>#myOrder=002</code>를 지정할 수 있습니다.</li><li>다른 기준으로 구분되지 않으면 마지막으로 제목순을 적용합니다.</li></ul><p>자동 정렬은 문자열로 비교합니다. 예를 들어 <code>1</code>은 <code>2</code>보다 앞에 오지만 <code>10</code>도 <code>2</code>보다 앞에 옵니다. 날짜를 <code>YYYY-MM-DD</code> 형식으로 작성하면 시간순과 문자열 순서가 일치합니다.</p>
@@ -0,0 +1,57 @@
<h2>기본 테마</h2><p>기본값은 밝은 테마입니다. 왼쪽 위 앱 메뉴에서 설정 → 모양을 열면 어두운 테마나 다른 테마로 바꿀 수 있습니다.</p><p><img src="Themes_dark-theme.png" alt="어두운 테마"></p><h2>CSS로 테마 만들기</h2><p><a href="#root/_help_6f9hih2hXXZk">코드 노트</a>를 만들고 언어를 CSS로 지정합니다. <a href="#root/_help_zEY4DaJG4YT5">속성</a>에 <code>#appTheme=my-theme-name</code>을 추가합니다. <code>my-theme-name</code>은 원하는 테마 이름으로 바꿉니다. 본문에 다음과 같은 스타일을 작성합니다.</p><pre><code class="language-text-x-trilium-auto">@font-face {
font-family: 'Raleway';
font-style: normal;
font-weight: 400;
src: url('/custom/fonts/raleway.woff2') format('woff2');
}
:root {
--main-font-family: 'Raleway' !important;
--main-font-size: normal;
--tree-font-family: inherit;
--tree-font-size: normal;
--detail-font-family: inherit;
--detail-font-size: normal;
--detail-text-font-family: 'Garamond' !important;
--main-background-color: #404552;
--main-text-color: #AFB8C6;
--main-border-color: #AFB8C6;
--accented-background-color: #383C4A;
--more-accented-background-color: #2F343F;
--header-background-color: #383C4A;
--button-background-color: #2F343F;
--button-disabled-background-color: #404552;
--button-border-color: #333;
--button-text-color: #AFB8C6;
--button-border-radius: 2px;
--primary-button-background-color: #6c757d;
--primary-button-text-color: white;
--primary-button-border-color: #6c757d;
--muted-text-color: #86919F;
--input-text-color: #AFB8C6;
--input-background-color: #404552;
--hover-item-text-color: white;
--hover-item-background-color: #4877B1;
--active-item-text-color: white;
--active-item-background-color: #4877B1;
--menu-text-color: #AFB8C6;
--menu-background-color: #383C4A;
--tooltip-background-color: #383C4A;
--link-color: lightskyblue;
--modal-background-color: #404552;
--modal-backdrop-color: black;
--scrollbar-border-color: rgba(175, 184, 198, 0.5);
}
body .note-detail-text {
font-size: 120%;
}
body .CodeMirror {
filter: invert(100%) hue-rotate(180deg);
}</code></pre><h3>테마 적용</h3><p>설정 → 모양의 테마 목록에서 <code>#appTheme</code> <a href="#root/_help_zEY4DaJG4YT5">라벨</a>에 지정한 이름을 선택합니다. CSS를 수정한 뒤에는 Ctrl+R로 화면을 새로고침합니다.</p><h3>공유와 가져오기</h3><p>원문에서 안내하는 테마 내보내기 형식은 <code>.tar</code>입니다. 외부 테마에는 실행 가능한 스크립트가 들어 있을 수 있으므로 신뢰할 수 있는 출처인지 확인하세요. 기본 예제에는 강철빛 파랑 테마가 있습니다.</p><p><img src="Themes_steel-blue.png" alt="강철빛 파랑 테마"></p><h2>화면 일부에 CSS 적용</h2><p>테마와 별개로 특정 요소만 꾸밀 수도 있습니다. CSS <a class="reference-link"
href="#root/_help_6f9hih2hXXZk">코드 노트</a>를 만들고 <code>#appCss</code> <a href="#root/_help_zEY4DaJG4YT5">라벨</a>을 추가한 다음 스타일을 작성합니다.</p><pre><code class="language-text-x-trilium-auto">/* 특정 화면 요소에 적용할 CSS */
.tree-item {
color: #ff6347; /* 트리 항목의 글자색 변경 */
}</code></pre><p>앱 화면이 시작될 때 <code>appCss</code>가 지정된 모든 노트의 CSS를 불러옵니다. 수정한 뒤 Ctrl+R로 새로고침하세요.</p><p><img src="Themes_image.png" alt="노트 트리에 사용자 스타일 적용"></p><h3>특정 노트 꾸미기</h3><p><code>cssClass</code> <a href="#root/_help_zEY4DaJG4YT5">속성</a>의 값에 CSS 클래스 이름을 지정합니다. <code>iconClass</code>에는 <a href="https://boxicons.com">Box Icons</a>의 아이콘 클래스나 직접 만든 클래스를 지정할 수 있습니다. PNG 이미지 노트처럼 특정 유형에 적용하려면 <code>type-image mime-image-png</code> 같은 클래스를 사용합니다.</p><h3>다른 사용자의 테마</h3><p><a class="reference-link" href="#root/_help_VbjZvtUek0Ln">테마 모음</a>에서 커뮤니티가 만든 테마를 살펴보세요.</p><h3>기본 파일 경로</h3><p>기본 이미지 등을 참조할 때 버전 번호 대신 <code>vX</code> 별칭을 사용하면 업데이트에 대응하기 쉽습니다. 예를 들어 <code>/assets/v0.57.0-beta/images/icon-grey.png</code> 대신 <code>/assets/vX/images/icon-grey.png</code>를 사용합니다.</p>
@@ -0,0 +1 @@
<p>사용자가 만들어 공개한 테마 목록입니다.</p><h2>기존 테마 기반</h2><p>원래 Trilium 테마를 바탕으로 만든 자료이며 새 버전과의 호환성은 각 프로젝트에서 확인해야 합니다.</p><table><thead><tr><th>테마</th><th>제작자</th></tr></thead><tbody><tr><td><a href="https://github.com/tobealive/trilium-midnight-theme">미드나이트 (Midnight)</a></td><td><a href="https://github.com/tobealive">tobealive</a></td></tr><tr><td><a href="https://github.com/tobealive/trilum-eote-theme">EOTE</a></td><td><a href="https://github.com/tobealive">tobealive</a></td></tr><tr><td><a href="https://github.com/Abourass/TriliumThemes">Trilium 테마 모음</a></td><td><a href="https://github.com/Abourass">Abourass</a></td></tr><tr><td><a href="https://github.com/ZMonk91/Material-Dark-Trilium">머티리얼 다크 (MaterialDark)</a></td><td><a href="https://github.com/ZMonk91">ZMonk91</a></td></tr><tr><td><a href="https://github.com/jaroet/trilium-theme-lightslategray">밝은 슬레이트 회색 (lightslategray)</a></td><td><a href="https://github.com/jaroet">jaroet</a></td></tr><tr><td><a href="https://github.com/raphwriter/trilium-theme-melon">멜론 4 (melon-4)</a></td><td><a href="https://github.com/raphwriter">raphwriter</a></td></tr><tr><td><a href="https://github.com/Engr-AllanG/trilium-themes">네온 다크 (Neon_Dark)</a></td><td><a href="https://github.com/Engr-AllanG">Engr-AllanG</a></td></tr><tr><td><a href="https://github.com/Engr-AllanG/trilium-themes">코더 다크 (Coder_Dark)</a></td><td><a href="https://github.com/Engr-AllanG">Engr-AllanG</a></td></tr><tr><td><a href="https://github.com/idelem/trilium-theme-velvet">벨벳 (velvet)</a></td><td><a href="https://github.com/idelem">idelem</a></td></tr><tr><td><a href="https://github.com/SADAVA/trilium-notes-theme-dark-plus">다크 플러스 (Dark Plus)</a></td><td><a href="https://github.com/SADAVA">SADAVA</a></td></tr><tr><td><a href="https://github.com/WKSu/trilium-solarized-theme">솔라라이즈드 (Solarized)</a></td><td><a href="https://github.com/WKSu">WKSu</a></td></tr><tr><td><a href="https://github.com/en3r0/Trilium-Nord-Theme">노르드 (Nord)</a></td><td><a href="https://github.com/en3r0">en3r0</a></td></tr><tr><td><a href="https://github.com/AllanZyne/trilium-bear-theme">베어 노트 밝은 테마</a></td><td><a href="https://github.com/AllanZyne">AllanZyne</a></td></tr><tr><td><a href="https://github.com/AllanZyne/trilium-bear-theme">베어 노트 어두운 테마</a></td><td><a href="https://github.com/AllanZyne">AllanZyne</a></td></tr><tr><td><a href="https://github.com/Sebiann/miku-hatsune-trilium-theme">하츠네 미쿠</a></td><td><a href="https://github.com/Sebiann">Sebiann</a></td></tr><tr><td><a href="https://github.com/cwilliams5/Midnight-Trilium-Dark-Mode">미드나이트 (Midnight)</a></td><td><a href="https://github.com/cwilliams5">cwilliams5</a></td></tr><tr><td><a href="https://github.com/SiriusXT/trilium-theme-blue">파랑 — 밝은 테마</a></td><td><a href="https://github.com/SiriusXT">SiriusXT</a></td></tr><tr><td><a href="https://github.com/SiriusXT/trilium-theme-blue">파랑 — 어두운 테마</a></td><td><a href="https://github.com/SiriusXT">SiriusXT</a></td></tr></tbody></table><p>만든 테마를 목록에 소개하려면 <a href="https://github.com/TriliumNext/Notes/discussions/categories/show-and-tell">작품 소개 게시판</a>에 글을 남기세요.</p>
@@ -0,0 +1,5 @@
<h2>위치</h2><p>선택한 <a href="#root/_help_x0JgW8UqGXvq">화면 배치</a>에 따라 왼쪽에 세로로 표시하거나 위쪽에 가로로 표시합니다.</p><h2>용어</h2><ul><li>실행 버튼 — 실행 도구 모음에 배치하는 버튼입니다.</li><li>사용 가능한 실행 버튼 — 현재 숨겨져 있지만 추가할 수 있는 버튼입니다.</li><li>표시 중인 실행 버튼 — 현재 도구 모음에 있는 버튼입니다.</li></ul><h2>설정 열기</h2><p>도구 모음의 빈 곳을 오른쪽 클릭하거나 <a href="#root/_help_x3i7MxGccDuM">전체 메뉴</a>에서 실행 도구 모음 설정을 선택하세요. 새 탭의 <a href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에 버튼 목록이 나타납니다.</p><p><img src="Launch Bar_image.png" alt="실행 도구 모음 설정"></p><p>사용 가능한 실행 버튼과 표시 중인 실행 버튼을 펼쳐 확인하세요. 항목의 오른쪽 클릭 메뉴로 다른 목록으로 이동하거나 끌어서 옮길 수 있습니다. 트리에서 순서를 바꾸면 도구 모음에도 반영됩니다. 키보드 조작은 <a href="#root/_help_oPVyFC7WL2Lp">노트 트리 안내</a>를 참고하세요.</p><h2>꾸미기와 초기화</h2><p>제목과 <a
href="#root/_help_p9kXRFAkwN4o">아이콘</a>은 일반 노트처럼 바꿀 수 있습니다. 버튼이나 도구 모음 전체를 오른쪽 클릭하고 초기화를 선택하면 해당 부분을 기본 구성으로 되돌립니다.</p><h3>새 버튼 만들기</h3><p>두 목록 중 하나를 오른쪽 클릭해 다음 유형을 선택하세요.</p><ul><li>노트 실행 버튼 — <code>target</code>에 열 노트를 지정합니다. <code>hoistedNote</code>로 <a
href="#root/_help_OR8WJ7Iz9K4U">하위 트리 표시 범위</a>를 지정할 수 있으며 <code>keyboardShortcut</code>으로 단축키를 정할 수 있습니다.</li><li>스크립트 실행 버튼 — <code>script</code>에 실행할 <a
href="#root/_help_CdNpE2pqjmI6">스크립트</a>를 지정하고 필요하면 단축키를 설정합니다.</li><li>사용자 위젯 — 버튼 영역에 직접 만든 위젯을 표시합니다. <a
href="#root/_help_SynTBQiBsdYJ">위젯 기본 안내</a>를 참고하세요.</li><li>간격 — 버튼 사이에 빈 공간을 넣어 구분합니다.</li></ul><p>각 항목은 미리 정의된 <a href="#root/_help_OFXdgB2nNk1F">주요 속성</a>으로 설정합니다.</p>
@@ -0,0 +1,11 @@
<p><img style="aspect-ratio:372/760;" src="1_Note tree contextual menu_.png"
width="372" height="760" alt="노트 트리 메뉴"></p><p><a
class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서 마우스 오른쪽 버튼을 누르면 열립니다. 노트 하나에 사용하거나 <a class="reference-link"
href="#root/_help_yTjUdsOi4CIE">여러 노트를 선택</a>한 뒤 사용할 수 있습니다. 오른쪽 버튼으로 누른 노트도 보통 대상에 포함됩니다. 여러 노트를 선택하면 함께 처리할 수 있는 메뉴만 활성화됩니다.</p><h2>기본 메뉴</h2><ul><li>새 탭에서 열기 — 노트 하나를 새 <a href="#root/_help_3seOhtN8uLIY">탭</a>에 엽니다.</li><li>새 분할 화면에서 열기 — 현재 탭 오른쪽에 노트를 엽니다.</li><li>노트 확대 보기 — 트리에 해당 노트와 하위 항목만 표시합니다. <a class="reference-link"
href="#root/_help_OR8WJ7Iz9K4U">노트 확대 보기</a>를 참고하세요.</li><li>다음에 노트 삽입 — 같은 단계에 지정한 <a href="#root/_help_KSZ04uQ2D1St">유형</a>의 노트를 만듭니다. 사용 가능한 <a class="reference-link" href="#root/_help_KC1HB96bqqHX">템플릿</a>도 목록 끝에 표시됩니다.</li><li>하위 노트 삽입 — 선택한 노트 아래에 만듭니다.</li><li>하위 트리 보호 — 현재 노트와 모든 하위 노트를 <a
class="reference-link" href="#root/_help_bwg0e8ewQMak">보호</a>합니다. 하위 트리 보호 해제는 보호를 풉니다.</li><li>잘라내기 — 노트를 클립보드에 넣습니다. 붙여넣기로 옮깁니다.</li><li>복사·복제 — 붙여넣기로 같은 노트를 다른 위치에도 배치합니다. <a class="reference-link"
href="#root/_help_IakOLONlIfGI">복제된 노트</a>는 한곳에서 수정하면 모든 위치에 반영됩니다. 따로 편집할 사본은 하위 트리 사본 만들기를 사용합니다.</li><li>안에 붙여넣기 — 현재 노트의 하위 노트로 붙입니다. 다음에 붙여넣기는 같은 단계에 붙입니다.</li><li>이동할 위치 선택 — 대상을 지정하는 창을 엽니다.</li><li>복제할 위치 선택 — <a href="#root/_help_IakOLONlIfGI">복제</a> 대상을 지정하는 창을 엽니다.</li><li>삭제 — 확인 창을 거쳐 삭제합니다. 모든 복제본도 삭제를 선택하면 <a class="reference-link"
href="#root/_help_IakOLONlIfGI">다른 위치의 복제본</a>도 지웁니다. 영구 삭제를 선택하면 <a class="reference-link" href="#root/_help_r5JGHN99bVKn">최근 변경 사항</a>에서 복원할 수 없습니다.</li><li>노트로 가져오기 — <a href="#root/_help_mHbBMPDPkVV5">가져오기</a> 창을 열고 자료를 하위 노트로 넣습니다.</li><li>내보내기 — 선택한 노트의 <a href="#root/_help_mHbBMPDPkVV5">내보내기</a> 창을 엽니다.</li><li>하위 트리에서 검색 — 현재 노트와 하위 항목만 찾도록 상위 노트 조건이 지정된 <a class="reference-link" href="#root/_help_eIg8jdvaoNNd">검색</a>을 엽니다.</li></ul><h2>고급 메뉴</h2><p><img style="aspect-ratio:289/355;" src="Note tree contextual menu_.png"
width="289" height="355" alt="노트 트리의 고급 메뉴"></p><ul><li>일괄 작업 적용 — <a class="reference-link" href="#root/_help_ivYnonVFBxbQ">일괄 작업</a> 창에서 <a class="reference-link" href="#root/_help_yTjUdsOi4CIE">여러 노트</a>에 라벨 추가나 이동 등을 적용합니다.</li><li>가지 접두사 편집 — <a href="#root/_help_IakOLONlIfGI">복제본</a>을 구분할 <a class="reference-link" href="#root/_help_TBwsyfadTA18">접두사</a>를 지정합니다.</li><li>첨부 파일로 변환 — 상위 노트의 <a class="reference-link" href="#root/_help_0vhv7lsOLy82">첨부 파일</a>로 바꿉니다. 외부에서 가져왔거나 이전 버전에서 만든 이미지 <a class="reference-link"
href="#root/_help_W8vYD3Q1zjCR">파일 노트</a>에 유용합니다.</li><li>하위 트리 사본 만들기 — 노트와 하위 항목을 별도로 복사합니다. <a class="reference-link" href="#root/_help_IakOLONlIfGI">복제</a>와 달리 원본과 독립적으로 편집합니다. 반복해서 만들려면 <a class="reference-link"
href="#root/_help_KC1HB96bqqHX">템플릿</a>도 고려하세요.</li><li>하위 트리 펼치기와 접기 — <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>의 모든 하위 항목을 펼치거나 접습니다.</li><li>정렬 기준 선택 — 하위 노트를 한 번 정렬합니다. 자동 정렬은 <a class="reference-link" href="#root/_help_zEY4DaJG4YT5">속성</a>으로 설정합니다. <a class="reference-link" href="#root/_help_aGlEvb9hyDhS">노트 정렬</a>을 참고하세요.</li><li>노트 경로 복사 — 현재 가지의 전체 경로를 URL 조각으로 복사합니다. 예: <code>#root/Hb2E70L7HPuf/4sRFgMZhYFts/2IVuShedRJ3U/LJVMvKXOFv7n</code>. <a class="reference-link" href="#root/_help_QEAPj01N5f7w">링크</a> 만들기와 <a class="reference-link" href="#root/_help_wArbEsdSae6g">노트 이동</a>에 사용합니다.</li><li>하위 트리의 최근 변경 사항 — 해당 노트와 하위 항목의 <a class="reference-link" href="#root/_help_r5JGHN99bVKn">최근 변경 사항</a>만 보여 줍니다.</li></ul>
@@ -0,0 +1,5 @@
<p><img src="Ribbon_image.png" alt="상단 리본"></p><p>상단 리본에서 현재 노트의 설정과 속성을 바꾸고 정보를 확인할 수 있습니다.</p><h2>설정과 서식</h2><p><a href="#root/_help_4TIF1oA4VQRO">설정</a> → 모양 → 리본 위젯에서 노트를 열 때 자동으로 펼칠 항목을 선택할 수 있습니다. 고정 <a href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>을 사용하면 편집 버튼도 여기에 표시됩니다.</p><h2>기본 속성</h2><ul><li><a href="#root/_help_KSZ04uQ2D1St">노트 유형</a> — 보통 빈 노트에서 변경합니다. 고급 사용자는 유형을 잠시 바꿔 <a href="#root/_help_4FahAwuGTAwC">소스</a>를 편집할 수도 있습니다.</li><li><a href="#root/_help_bwg0e8ewQMak">노트 보호</a> — 암호화와 보호 세션 사용 여부입니다.</li><li>편집 가능 여부 — 큰 노트에서 자동으로 <a href="#root/_help_CoFPLs3dRlXc">읽기 전용</a>을 사용하거나 항상 읽기 전용 또는 항상 편집 가능으로 지정합니다.</li><li><a href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>에 <a href="#root/_help_u3YFHC9tQlpm">북마크</a>로 표시할지 선택합니다.</li><li><a href="#root/_help_WOcw2SLH6tbX">서버 인스턴스</a>에서 <a href="#root/_help_R9pX4DGra2Vt">공개 공유</a>할지 선택합니다.</li><li><a href="#root/_help_KC1HB96bqqHX">템플릿</a>으로 사용할지 선택합니다.</li><li><a
href="#root/_help_veGu4faJErEM">본문 언어</a> — 맞춤법 검사와 오른쪽에서 왼쪽으로 쓰기에 사용합니다.</li></ul><h2>소유한 속성</h2><p>노트에 직접 지정한 라벨과 관계를 편집합니다. <a href="#root/_help_zEY4DaJG4YT5">속성</a>을 참고하세요. 오른쪽 더하기 버튼으로 입력하거나 <a href="#root/_help_OFXdgB2nNk1F">주요 속성</a>의 형식을 정의할 수 있습니다.</p><h2>상속된 속성</h2><p><a
href="#root/_help_bwZpz2ajCEwO">상속</a>으로 적용된 항목을 확인합니다. 이 화면에서는 수정할 수 없습니다.</p><h2>노트 경로</h2><p>노트가 놓인 모든 위치를 표시하며 <a href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>처럼 새 위치로 <a
href="#root/_help_IakOLONlIfGI">복제</a>할 수 있습니다.</p><h2>노트 지도</h2><p>현재 노트의 관계와 하위 구조를 표시합니다. 관련 <a href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>도 확인할 수 있습니다.</p><h2>유사한 노트</h2><p><a href="#root/_help_xWtq5NUHOwql">비슷한 노트 목록</a>을 표시합니다.</p><h2>노트 정보</h2><p><a href="#root/_help_m1lbrzyKDaRB">내부 ID</a>와 <a href="#root/_help_KSZ04uQ2D1St">노트 유형</a> 및 MIME 유형을 표시합니다. 생성일과 수정일 및 <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a>의 예상 용량과 하위 노트 수·용량도 확인할 수 있습니다.</p><h2>편집한 노트</h2><p><a href="#root/_help_l0tKav7yLHGF">날짜별 노트</a>를 열면 그날 편집한 노트를 표시합니다. <a
class="reference-link" href="#root/_hidden/_options/_help__optionsAppearance">모양 설정</a>의 리본 위젯에서 자동 표시를 끌 수 있습니다.</p>
@@ -0,0 +1,2 @@
<h2>화면 배치</h2><p>두 가지 배치 중에서 선택할 수 있습니다.</p><h3>세로 배치</h3><ul><li><a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>을 화면 왼쪽에 세로로 표시합니다.</li><li>탭은 <a class="reference-link"
href="#root/_help_oPVyFC7WL2Lp">노트 트리</a> 오른쪽 영역의 위에 표시합니다.</li><li><a class="reference-link" href="#root/_help_Ms1nauBra7gq">빠른 검색</a>은 <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a> 위에 있습니다.</li><li><a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>는 <a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a> 아래의 <img src="5_Vertical and horizontal la.png" alt="트리 접기 버튼">으로 접을 수 있습니다.</li><li><a class="reference-link" href="#root/_help_x3i7MxGccDuM">전체 메뉴</a>는 <a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a> 위의 <img src="4_Vertical and horizontal la.png" alt="메뉴 버튼">으로 엽니다.</li></ul><p><img src="3_Vertical and horizontal la.png" alt="세로 배치 화면"></p><h3>가로 배치</h3><ul><li><a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>을 화면 위에 가로로 표시합니다.</li><li>탭이 화면 위에서 전체 너비를 사용하므로 더 많은 탭을 한 번에 표시할 수 있습니다.</li><li><a class="reference-link" href="#root/_help_Ms1nauBra7gq">빠른 검색</a>은 <a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>에 포함됩니다. 위치를 바꾸거나 제거할 수 있습니다.</li><li><a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>는 첫 탭 왼쪽의 <img src="1_Vertical and horizontal la.png" alt="트리 접기 버튼">으로 접습니다.</li><li><a class="reference-link" href="#root/_help_x3i7MxGccDuM">전체 메뉴</a>는 <a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a> 끝의 <img src="Vertical and horizontal la.png" alt="메뉴 버튼">으로 엽니다.</li></ul><p><img src="2_Vertical and horizontal la.png" alt="가로 배치 화면"></p><h2>배치 바꾸기</h2><p><a class="reference-link" href="#root/_help_4TIF1oA4VQRO">설정</a> → 모양 → 배치에서 선택하세요. 선택하면 창을 다시 불러와 즉시 적용합니다.</p>
@@ -0,0 +1,2 @@
<h2>macOS 지원</h2><p>기존 Trilium Notes와 달리 TriliumNext는 macOS 사용 환경도 개선하고 있습니다. 운영체제에 따른 문제가 있으면 <a href="#root/_help_wy8So3yZZlH9">오류를 보고</a>해 주세요.</p><h2>번역 지원</h2><p>기존 앱에는 다국어 지원이 없었지만 TriliumNext에는 번역 기능이 추가되었습니다. 번역 기여를 환영합니다.</p><h2>여러 사용자</h2><p>이 버전은 한 사람이 사용하는 노트 앱을 전제로 합니다. 원문 개발자는 사용자 관리와 권한 및 충돌 처리와 실시간 공동 편집의 구현 범위가 크고 개인 기록이라는 중심 기능에서 벗어난다고 설명했습니다. 단일 사용자에게 허용되는 <a
href="#root/_help_CdNpE2pqjmI6">스크립트</a>도 다중 사용자 환경에서는 다른 사용자의 데이터에 접근하는 보안 문제가 될 수 있습니다.</p><h2>여러 데이터베이스</h2><p>한 프로세스는 하나의 <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a>만 엽니다. 두 프로세스를 실행하고 <a href="#root/_help_tAassRL4RSQL">데이터 폴더</a>와 포트를 각각 지정할 수 있습니다. 다음은 원문의 실행 예제이며 사용하는 버전의 포트 환경 변수 이름을 확인하세요.</p><pre><code class="language-text-x-trilium-auto">TRILIUM_DATA_DIR=/home/me/path/to/data/dir TRILIUM_PORT=12345 trilium </code></pre><p>실행 스크립트나 별칭으로 저장할 수 있습니다. 두 번째 인스턴스는 다른 폴더와 포트를 사용해야 합니다.</p><h2>파일 동기화 서비스 사용</h2><p>열려 있는 데이터베이스를 Dropbox와 Google Drive 또는 OneDrive로 동기화하면 파일이 손상될 수 있습니다. 다음과 같은 오류가 나타날 수 있습니다.</p><pre><code class="language-text-x-trilium-auto">SqliteError: database disk image is malformed</code></pre><p>지원하는 방식은 Trilium의 <a href="#root/_help_cbkrhQjrkKrh">동기화 서버</a>를 사용하는 것입니다.</p><h2>개별 파일 대신 데이터베이스를 사용하는 이유</h2><p>개별 파일은 다른 도구와 연동하기 쉽지만 Trilium의 구조를 그대로 표현하기 어렵습니다. 그래서 SQLite <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a>를 사용합니다.</p><ul><li><a href="#root/_help_IakOLONlIfGI">복제</a>는 같은 하위 트리를 여러 위치에 두는 기능입니다. 일반적인 파일·폴더 구조만으로 표현하기 어렵습니다.</li><li>Trilium의 노트는 본문과 하위 노트를 함께 가질 수 있습니다.</li><li>노트 순서를 사용자가 직접 지정합니다.</li><li><a href="#root/_help_zEY4DaJG4YT5">속성</a>을 저장하고 검색해야 합니다. 파일 시스템 확장 속성은 운영체제마다 지원이 다릅니다.</li><li>노트 사이의 연결과 <a href="#root/_help_BCkXAVs63Ttv">노트 지도</a>를 빠르게 조회해야 합니다. 파일만 사용하면 별도의 색인 자료가 필요합니다.</li><li>트랜잭션을 사용하면 노트와 메타데이터의 변경을 일관되게 처리하기 쉽습니다.</li></ul>
@@ -0,0 +1,7 @@
<p>Trilium은 <a
class="reference-link" href="#root/_help_wX4HbRucYSDD">데이터베이스</a>의 일간과 주간 및 월간 백업을 만들며 새 버전으로 변환하기 전에도 백업합니다. 서로 다른 시점의 백업을 최대 4개 보관합니다. 기본 위치는 <a href="#root/_help_tAassRL4RSQL">데이터 폴더</a> 아래의 <code>backup</code>입니다.</p><p>기본 백업만으로 모든 상황을 대비할 수는 없습니다. <a class="reference-link"
href="#root/_help_wX4HbRucYSDD">데이터베이스</a>를 다른 컴퓨터나 별도의 저장소에도 보관할 수 있습니다. <a class="reference-link" href="#root/_help_cbkrhQjrkKrh">동기화</a>는 데이터를 여러 기기에 복제하지만 변경 사항도 전달하므로 독립된 과거 백업과는 역할이 다릅니다.</p><h2>백업 복원</h2><p>주간 백업을 복원하는 순서입니다. 메뉴 → Trilium 정보에서 <a href="#root/_help_tAassRL4RSQL">데이터 폴더</a>를 확인하세요. 아래에서는 <code>~/trilium-data</code>라고 가정합니다.</p><ul><li><code>~/trilium-data/backup/backup-weekly.db</code>가 복원할 <a
class="reference-link" href="#root/_help_wX4HbRucYSDD">데이터베이스</a> 백업인지 확인합니다.</li><li>Trilium을 종료합니다.</li><li>현재 <code>document.db</code>와 <code>document.db-wal</code> 및 <code>document.db-shm</code>을 별도 위치에 보관한 뒤 데이터 폴더에서 제거합니다. 뒤의 두 파일은 자동 생성되는 보조 파일입니다.</li><li>주간 백업을 <code>~/trilium-data/document.db</code>로 복사합니다.</li><li>Trilium 실행 계정이 읽고 쓸 수 있도록 소유자와 권한을 확인합니다. 권한 지정 예시는 <code>chmod 600 document.db</code>입니다.</li><li>Trilium을 다시 시작합니다.</li></ul><p>여러 기기가 동기화 중이라면 함께 복원할 범위를 확인해야 합니다. 다른 기기에 더 최신 데이터가 남아 있으면 복원한 과거 데이터에 다시 동기화될 수 있습니다.</p><h2>자동 백업 끄기</h2><p><a href="#root/_help_tAassRL4RSQL">데이터 폴더</a>의 <code>config.ini</code>에서 끌 수 있지만 별도 백업 수단 없이 끄는 것은 권장하지 않습니다.</p><pre><code class="language-text-x-trilium-auto">[General]
; 다른 설정
# true로 지정하면 자동 백업을 끕니다.
noBackup=true</code></pre><p><a href="#root/_help_Gzjqa934BdH4">환경 변수</a>로 설정할 수도 있습니다. <a href="https://github.com/TriliumNext/Notes/blob/master/config-sample.ini">설정 예제 파일</a>을 참고하세요.</p>
@@ -0,0 +1,18 @@
<p>데이터 폴더에는 다음 자료가 들어 있습니다.</p><ul><li><code>document.db</code> — <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a></li><li><code>config.ini</code> — 접속 포트 등 인스턴스 설정</li><li><code>backup</code> — 자동 <a href="#root/_help_ODY7qQn5m2FT">백업</a></li><li><code>log</code> — 실행 로그</li></ul><h2>위치 확인</h2><p>왼쪽 위 메뉴의 Trilium 정보에서 현재 데이터 폴더를 확인할 수 있습니다.</p><p><img src="Data directory_image.png" alt="데이터 폴더 위치"></p><p>기본 폴더 이름은 <code>trilium-data</code>입니다. Linux에서는 <code>/home/[사용자]/.local/share</code> 아래에 둡니다. Windows에서는 <code>C:\Users\[사용자]\AppData\Roaming</code> 아래이며 macOS에서는 <code>/Users/[사용자]/Library/Application Support</code> 아래입니다. 해당 경로를 사용할 수 없으면 사용자 홈 폴더를 사용합니다. Docker도 컨테이너 사용자 홈 아래에 데이터 폴더를 둡니다.</p><p>노트와 설정은 이 폴더에 모여 있습니다. 실행 중 데이터베이스를 단순 복사하는 대신 일관성이 보장되는 백업 방법을 사용하세요.</p><h3>위치 바꾸기</h3><p><code>TRILIUM_DATA_DIR</code> 환경 변수로 지정할 수 있습니다. Linux 예시입니다.</p><pre><code class="language-text-x-trilium-auto">export TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data</code></pre><h4>macOS</h4><p>로그인할 때마다 적용하려면 <code>~/Library/LaunchAgents</code>에 plist 파일을 만듭니다. 직접 설정하려면 <code>launchctl setenv TRILIUM_DATA_DIR &lt;경로&gt;</code>를 사용합니다. 아래는 원문에 남아 있는 값 목록입니다. XML 태그가 빠져 있어 완전한 plist 파일로 사용할 수는 없습니다.</p><pre><code class="language-text-x-trilium-auto">
Label
set.trilium.env
RunAtLoad
ProgramArguments
launchctl
setenv
TRILIUM_DATA_DIR
/Users/YourUserName/Library/Application Support/trilium-data
</code></pre><h3>실행할 때만 지정하기</h3><p>Trilium 프로세스에만 환경 변수를 지정하면 서로 다른 <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a>를 사용하거나 이동식 설치를 구성할 수 있습니다.</p><pre><code class="language-text-x-trilium-auto">TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data trilium</code></pre><p>필요하면 이 명령을 실행 스크립트로 저장하세요.</p><h3>개별 경로 지정</h3><p><code>TRILIUM_DOCUMENT_PATH</code>는 DB 파일 경로입니다. <code>TRILIUM_BACKUP_DIR</code>은 백업 폴더이며 <code>TRILIUM_LOG_DIR</code>은 로그 폴더입니다. <code>TRILIUM_ANONYMIZED_DB_DIR</code>은 익명화 DB 폴더이며 <code>TRILIUM_CONFIG_INI_PATH</code>는 설정 파일 경로입니다. 지정하지 않으면 데이터 폴더 안의 기본 위치를 사용합니다.</p>
@@ -0,0 +1,9 @@
<p>서버에 설치하면 여러 기기에서 <a href="#root/_help_cbkrhQjrkKrh">동기화</a>하거나 웹브라우저로 접속할 수 있습니다.</p><h2>설치 방식</h2><ul><li><a href="#root/_help_rWX5eY045zbE">Docker 설치</a> — AMD64와 ARM용 이미지를 제공합니다.</li><li><a href="#root/_help_3tW6mORuTHnB">서버 패키지 설치</a></li><li><a href="https://www.pikapods.com/pods?run=trilium-next">PikaPods 관리형 호스팅</a></li><li><a href="#root/_help_J1Bb6lVlwU5T">수동 설치</a></li><li><a href="#root/_help_DCmT6e7clMoP">Kubernetes</a></li><li><a href="https://www.cloudron.io/store/com.github.trilium.cloudronapp.html">Cloudron</a></li><li><a href="https://homelabos.com/docs/software/trilium/">HomelabOS</a></li><li><a href="#root/_help_moVgBcoxE3EK">NixOS 모듈</a></li></ul><p>서버 버전에는 일반 웹 화면과 <a href="#root/_help_RDslemsQ6gCp">모바일 화면</a>이 포함됩니다.</p><h2>설정</h2><p>포트와 <a href="#root/_help_l2VkvOwUNfZj">TLS</a> 등은 기본적으로 <a href="#root/_help_tAassRL4RSQL">데이터 폴더</a>의 <code>config.ini</code>에서 설정합니다. 새 설정 파일이 필요하다면 제공된 <code>config-sample.ini</code>를 참고하세요. 기존 파일을 덮어쓰지 않도록 확인합니다. <a href="#root/_help_Gzjqa934BdH4">환경 변수</a>도 사용할 수 있습니다.</p><h3>데이터 위치</h3><p>설정과 <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a> 등은 <a href="#root/_help_tAassRL4RSQL">데이터 폴더</a>에 있습니다. 위치는 다음처럼 지정할 수 있습니다.</p><pre><code class="language-text-x-trilium-auto">export TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data</code></pre><h3>업로드 제한</h3><p>이 버전의 기본 제한은 250MB입니다. 다음 환경 변수는 제한을 해제합니다.</p><pre><code class="language-text-x-trilium-auto">export TRILIUM_NO_UPLOAD_LIMIT=true </code></pre><p>제한을 유지하면서 늘리려면 다음처럼 최대 크기를 지정하세요.</p><pre><code class="language-text-x-trilium-auto">export MAX_ALLOWED_FILE_SIZE_MB=450</code></pre><h3>인증</h3><p><a class="reference-link" href="#root/_help_0hzsNCP31IAB">인증 설정</a>을 참고하세요.</p><h2>역방향 프록시</h2><h3>Nginx</h3><p>다음은 요청을 Trilium으로 전달하는 설정 예시입니다.</p><pre><code class="language-text-x-trilium-auto">location /trilium/ {
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_cache_bypass $http_upgrade;
}</code></pre><p>Nginx 자체의 본문 크기 제한도 별도로 적용됩니다. 다음은 제한을 해제하는 예시이며 필요한 최대 크기를 지정할 수도 있습니다.</p><pre><code class="language-text-x-trilium-auto"># 0은 제한 없음입니다. 기본값은 1M입니다.
client_max_body_size 0;</code></pre><h3>Apache</h3><p><a href="#root/_help_fDLvzOx29Pfg">Apache 프록시 설정</a>을 참고하세요.</p>
@@ -0,0 +1,21 @@
<p>서버 패키지는 Trilium 코드와 Node.js 모듈 및 실행 환경을 함께 담은 압축 파일입니다.</p><h2>실행 순서</h2><p>SSH로 서버에 접속한 뒤 <a href="https://github.com/TriliumNext/Notes/releases">릴리스 페이지</a>에서 <code>TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz</code>처럼 Server가 포함된 파일을 내려받으세요. wget이나 curl을 사용할 수 있습니다.</p><p><code>tar -xf TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz</code>로 압축을 풀고 생성된 서버 폴더로 이동한 뒤 <code>./trilium.sh</code>를 실행합니다. 브라우저에서 <code>http://[서버주소]:8080</code>을 열면 초기 설정 화면이 나타납니다.</p><p>SSH 연결을 닫아도 실행을 유지하려면 현재 실행을 종료한 뒤 <code>nohup ./trilium.sh &amp;</code>로 실행하거나 systemd 서비스를 설정하세요.</p><h2>systemd 자동 시작</h2><p>압축을 풀고 프로그램을 옮깁니다.</p><pre><code class="language-text-x-trilium-auto">tar -xvf TriliumNextNotes-Server-[VERSION]-linux-x64.tar.xz
sudo mv trilium-linux-x64-server /opt/trilium</code></pre><p>서비스 파일을 만듭니다.</p><pre><code class="language-text-x-trilium-auto">sudo nano /etc/systemd/system/trilium.service</code></pre><p>실행 사용자와 그룹을 실제 계정으로 바꾸어 다음 내용을 저장합니다.</p><pre><code class="language-text-x-trilium-auto">[Unit]
Description=Trilium 백그라운드 서비스
After=syslog.target network.target
[Service]
User=xxx
Group=xxx
Type=simple
ExecStart=/opt/trilium/trilium.sh
WorkingDirectory=/opt/trilium/
TimeoutStopSec=20
# KillMode=process는 오류를 일으킬 수 있습니다. 설명: https://www.freedesktop.org/software/systemd/man/systemd.kill.html
Restart=always
[Install]
WantedBy=multi-user.target</code></pre><p>저장한 뒤 서비스를 활성화하고 시작합니다.</p><pre><code class="language-text-x-trilium-auto">sudo systemctl enable --now -q trilium</code></pre><p>브라우저에서 서버의 8080 포트에 접속해 초기 설정 화면을 확인하세요.</p><h2>자주 발생하는 문제</h2><h3>시스템 라이브러리 버전</h3><pre><code class="language-text-x-trilium-auto">Error: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /var/www/virtual/.../node_modules/@mlink/scrypt/build/Release/scrypt.node)
at Object.Module._extensions..node (module.js:681:18)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)</code></pre><p>이와 같은 오류는 실행에 필요한 시스템 라이브러리 버전이 없다는 뜻입니다. 운영체제를 지원되는 버전으로 업데이트하거나 다른 <a href="#root/_help_WOcw2SLH6tbX">서버 설치 방식</a>을 사용하세요.</p><h2>TLS</h2><p>안전한 연결을 위해 <a href="#root/_help_l2VkvOwUNfZj">TLS 설정</a>을 확인하세요.</p>
@@ -0,0 +1,33 @@
<p>이 문서는 설치된 버전에 포함된 Docker 설치 안내입니다. 예제의 버전과 네트워크 주소는 환경에 맞게 바꿔야 합니다. AMD64와 ARMv7 및 ARM64/v8용 이미지는 <a
href="https://hub.docker.com/r/triliumnext/notes/">Docker Hub</a>에서 확인할 수 있습니다.</p><h2>준비</h2><p>Docker를 먼저 설치합니다. <a href="https://docs.docker.com/engine/install/">Docker 설치 안내</a>를 참고하세요. 일반 이미지는 초기 실행에 루트 권한이 필요합니다. SMB/CIFS 공유를 데이터 폴더로 사용하는 경우에는 <a
href="https://github.com/TriliumNext/Notes/issues/415#issuecomment-2344824400">관련 문제 해결 안내</a>에 따라 <code>nobrl</code>과 <code>noperm</code> 마운트 옵션이 필요할 수 있습니다.</p><h2>Docker Compose로 실행</h2><p>Compose 파일을 받습니다.</p><pre><code class="language-text-x-trilium-auto">wget https://raw.githubusercontent.com/TriliumNext/Notes/master/docker-compose.yml</code></pre><p><code>docker-compose.yml</code>을 열어 설정을 확인합니다. 원문 예제의 기본 데이터 경로는 <code>~/trilium-data</code>이며 포트는 8080입니다. 다음 명령으로 백그라운드에서 시작합니다.</p><pre><code class="language-text-x-trilium-auto">docker compose up -d</code></pre><h2>Docker 명령으로 실행</h2><p><a href="https://hub.docker.com/r/triliumnext/notes/tags">배포된 태그 목록</a>에서 원하는 버전을 선택합니다. 아래 버전은 원문의 예제입니다.</p><pre><code class="language-text-x-trilium-auto">docker pull triliumnext/notes:v0.91.6</code></pre><p><code>latest</code>는 나중에 새 이미지를 받을 때 버전이 달라질 수 있습니다. 동기화하는 인스턴스의 호환성을 유지하려면 버전을 고정하는 편이 좋습니다. 호스트에 데이터 폴더를 만들고 컨테이너에서 쓸 수 있도록 마운트합니다.</p><h3>같은 컴퓨터에서만 접속</h3><p><code>[VERSION]</code>을 실제 태그로 바꿉니다. 테스트나 리버스 프록시 뒤에서 운영할 때 사용할 수 있습니다.</p><pre><code class="language-text-x-trilium-auto">sudo docker run -t -i -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/notes:[VERSION]</code></pre><p><code>docker ps</code>로 상태를 확인하고 브라우저에서 <code>127.0.0.1:8080</code>을 엽니다.</p><h3>로컬 네트워크 연결 예제</h3><p>다음 macvlan 예제의 인터페이스와 주소 범위는 실제 네트워크에 맞춰야 합니다.</p><pre><code class="language-text-x-trilium-auto">docker network create -d macvlan -o parent=eth0 --subnet 192.168.2.0/24 --gateway 192.168.2.254 --ip-range 192.168.2.252/27 mynet</code></pre><pre><code class="language-text-x-trilium-auto">docker run --net=mynet -d -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/notes:[VERSION]</code></pre><p>일반 이미지에서 데이터의 사용자와 그룹 ID는 <code>USER_UID</code>와 <code>USER_GID</code>로 지정합니다.</p><pre><code class="language-text-x-trilium-auto">docker run --net=mynet -d -p 127.0.0.1:8080:8080 -e "USER_UID=1001" -e "USER_GID=1001" -v ~/trilium-data:/home/node/trilium-data triliumnext/notes:[VERSION]</code></pre><p>컨테이너 주소를 확인한 뒤 로컬 네트워크에서 접속합니다.</p><pre><code class="language-text-x-trilium-auto">docker ps
docker inspect [container_name]</code></pre><h3>모든 인터페이스에서 접속</h3><p>다음 예제는 호스트의 모든 인터페이스에 포트를 엽니다. 외부 공개 범위는 방화벽과 프록시 설정도 함께 확인해야 합니다.</p><pre><code class="language-text-x-trilium-auto">docker run -d -p 0.0.0.0:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/notes:[VERSION]</code></pre><p><code>docker ps</code>에서 ID를 확인하고 <code>docker stop &lt;CONTAINER ID&gt;</code>로 중지합니다.</p><h3>데이터 경로 변경</h3><pre><code class="language-text-x-trilium-auto">-v ~/YourOwnDirectory:/home/node/trilium-data triliumnext/notes:[VERSION]</code></pre><p>콜론 앞은 호스트의 경로이고 뒤는 컨테이너 안의 경로입니다. <a href="https://docs.docker.com/storage/volumes/">Docker 볼륨 개요</a>와 <a href="https://docs.docker.com/storage/volumes/">볼륨 사용 안내</a>를 참고하세요.</p><h2>리버스 프록시</h2><p><a href="#root/_help_ud6MShXL4WpO">Nginx</a> 또는 <a href="#root/_help_fDLvzOx29Pfg">Apache</a> 안내를 참고하세요.</p><h3>실행 사용자와 시간대</h3><p>일반 이미지는 <code>--user</code> 대신 <code>USER_UID</code>와 <code>USER_GID</code>를 사용합니다. 시간대가 맞지 않으면 <code>TZ</code>에 <a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones">시간대 식별자</a>를 지정합니다. 한국은 <code>Asia/Seoul</code>입니다.</p><h2>일반 사용자로 실행하는 이미지</h2><p><code>rootless</code> 계열은 컨테이너 안에서 루트가 아닌 <code>trilium</code> 사용자로 앱을 실행합니다. 데이터 경로는 일반 이미지와 다른 <code>/home/trilium/trilium-data</code>입니다. Debian과 Alpine 기반 변형을 제공합니다.</p><pre><code class="language-text-x-trilium-auto"># Debian 기반 이미지
docker pull triliumnext/notes:rootless
# Alpine 기반 이미지
docker pull triliumnext/notes:rootless-alpine</code></pre><p>일반 사용자로 실행하면 앱 프로세스의 권한을 줄일 수 있습니다. 호스트에서 Docker 데몬 자체를 비루트로 실행하는 설정과는 구분해야 합니다. 이미지 빌드 시 사용자를 만들고 별도 진입 스크립트 없이 실행합니다. 이 이미지에서는 <code>--user</code>로 UID와 GID를 지정할 수 있습니다.</p><h3>Compose 예제</h3><pre><code class="language-text-x-trilium-auto"># 기본 UID/GID로 실행 (1000:1000)
docker-compose -f docker-compose.rootless.yml up -d
# 호스트 사용자에 맞춘 UID/GID로 실행
TRILIUM_UID=$(id -u) TRILIUM_GID=$(id -g) docker-compose -f docker-compose.rootless.yml up -d
# 데이터 폴더 지정
TRILIUM_DATA_DIR=/path/to/your/data TRILIUM_UID=$(id -u) TRILIUM_GID=$(id -g) docker-compose -f docker-compose.rootless.yml up -d
</code></pre><h3>Docker 명령 예제</h3><pre><code class="language-text-x-trilium-auto"># 이미지 빌드
docker build -t triliumnext/notes:rootless -f apps/server/Dockerfile.rootless .
# 기본 UID/GID로 실행 (1000:1000)
docker run -d --name trilium -p 8080:8080 -v ~/trilium-data:/home/trilium/trilium-data triliumnext/notes:rootless
# 지정한 UID/GID로 실행
docker run -d --name trilium -p 8080:8080 --user $(id -u):$(id -g) -v ~/trilium-data:/home/trilium/trilium-data triliumnext/notes:rootless
</code></pre><h3>환경 변수와 권한</h3><p><code>TRILIUM_UID</code>와 <code>TRILIUM_GID</code>는 Compose 설정을 통해 프로세스 ID를 지정하는 데 사용합니다. <code>TRILIUM_DATA_DIR</code>의 적용 위치는 사용한 Compose 파일을 확인하세요. 위 예제에서는 데이터 경로를 지정하는 변수로 사용합니다. 호스트 데이터 폴더의 소유권과 쓰기 권한이 실행 사용자에 맞아야 합니다.</p><pre><code class="language-text-x-trilium-auto"># 데이터 폴더의 소유자가 UID 1001과 GID 1001인 예제:
TRILIUM_UID=1001 TRILIUM_GID=1001 docker-compose -f docker-compose.rootless.yml up -d
</code></pre><p>프로세스는 시작할 때 지정한 UID/GID로 실행합니다. 기존 방식의 <code>usermod</code>나 <code>groupmod</code> 진입 스크립트를 사용하지 않으며 실행 중 스스로 사용자 ID를 바꾸지 않습니다.</p><h3>이미지 종류</h3><p>원문의 Debian 변형은 Bullseye Slim을 기반으로 하며 <code>apps/server/Dockerfile.rootless</code>를 사용합니다. Alpine 변형은 크기가 작지만 환경에 따라 호환성 차이가 있을 수 있으며 <code>apps/server/Dockerfile.alpine.rootless</code>를 사용합니다.</p><h3>사용자 지정 이미지 빌드</h3><pre><code class="language-text-x-trilium-auto"># UID/GID를 지정한 Debian 기반 이미지
docker build --build-arg USER=myuser --build-arg UID=1001 --build-arg GID=1001 \
-t triliumnext/notes:rootless-custom -f apps/server/Dockerfile.rootless .
# UID/GID를 지정한 Alpine 기반 이미지
docker build --build-arg USER=myuser --build-arg UID=1001 --build-arg GID=1001 \
-t triliumnext/notes:alpine-rootless-custom -f apps/server/Dockerfile.alpine.rootless .
</code></pre><p>빌드 인수 <code>USER</code>의 기본값은 <code>trilium</code>입니다. <code>UID</code>와 <code>GID</code>의 기본값은 각각 1000입니다.</p>
@@ -0,0 +1,35 @@
<p>Trilium 서버 주소인 <code>trilium.yourdomain.com</code>에 DNS A 레코드를 설정한 환경을 가정합니다. 아래 도메인과 버전 및 경로는 실제 환경에 맞게 바꾸세요.</p><h2>컨테이너 준비</h2><pre><code class="language-text-x-trilium-auto"> docker pull triliumnext/notes:[VERSION]
docker create --name trilium -t -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data triliumnext/notes:[VERSION]</code></pre><h2>Apache 프록시 설정</h2><p>HTTPS와 HTTP 프록시 및 WebSocket 모듈을 활성화합니다.</p><pre><code class="language-text-x-trilium-auto"> a2enmod ssl
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel</code></pre><p>인증서를 발급합니다. 예제 도메인은 실제 서비스 주소로 바꾸세요. 원문은 독립 실행 방식으로 발급하고 생성된 인증서 경로를 기록하도록 안내합니다.</p><pre><code class="language-text-x-trilium-auto"> sudo certbot certonly -d trilium.mydomain.com</code></pre><p>가상 호스트 설정 파일을 만듭니다. <code>apachectl -S</code>로 서버 설정 위치를 확인할 수 있습니다.</p><pre><code class="language-text-x-trilium-auto"> sudo nano /etc/apache2/sites-available/trilium.yourdomain.com.conf</code></pre><p>다음은 원문의 설정 조각입니다. 완전한 가상 호스트 파일은 아니므로 기존 HTTP와 HTTPS VirtualHost 블록에 맞게 구성해야 합니다.</p><pre><code class="language-text-x-trilium-auto">
ServerName http://trilium.yourdomain.com
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
ServerName https://trilium.yourdomain.com
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:8080/$1 [P,L]
AllowEncodedSlashes NoDecode
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
SSLCertificateFile /etc/letsencrypt/live/trilium.yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/trilium.yourdomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</code></pre><p><code>sudo a2ensite trilium.yourdomain.com.conf</code>로 활성화하고 설정을 검사한 뒤 <code>sudo systemctl reload apache2</code>로 다시 불러옵니다.</p><h2>부팅 시 컨테이너 시작</h2><p><code>/lib/systemd/system/trilium.service</code>에 다음 서비스 정의를 작성하는 예시입니다.</p><pre><code class="language-text-x-trilium-auto"> [Unit]
Description=Trilium 서버
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a trilium
ExecStop=/usr/bin/docker stop -t 2 trilium
[Install]
WantedBy=local.target</code></pre><p>서비스 설정을 다시 읽고 활성화한 뒤 시작합니다.</p><pre><code class="language-text-x-trilium-auto"> sudo systemctl daemon-reload
sudo systemctl enable trilium.service
sudo systemctl start trilium.service</code></pre>
@@ -0,0 +1,51 @@
<p>Ubuntu 18.04를 기준으로 작성된 과거의 Nginx 역방향 프록시 예제입니다. 기존 웹 서버 제거와 TLS 설정이 포함되어 있으므로 현재 환경을 확인한 뒤 사용하세요. 아래 설정은 당시 원문을 보존한 것이며 최신 보안 설정을 뜻하지 않습니다.</p><h2>Nginx 설치</h2><p>원문은 Nginx를 설치하고 Apache2를 제거하는 순서로 설명합니다. Apache에서 다른 서비스를 제공 중이라면 그대로 실행하면 안 됩니다.</p><pre><code class="language-text-x-trilium-auto">sudo apt-get install nginx
sudo apt-get remove apache2</code></pre><h2>설정 파일</h2><pre><code class="language-text-x-trilium-auto">cd /etc/nginx/conf.d
vim default.conf</code></pre><p>Trilium 주소와 도메인 및 인증서 경로를 환경에 맞게 지정하세요. 원문에 포함된 TLS 1.0과 1.1은 오래된 프로토콜입니다.</p><pre><code class="language-text-x-trilium-auto"># Trilium 실행 주소
upstream trilium {
zone trilium 64k;
server 127.0.0.1:8080; # 실제 호스트와 포트로 변경
keepalive 2;
}
# 프록시와 HTTPS 설정
server {
listen 443 ssl;
server_name trilium.example.net; # 프로토콜을 제외한 도메인으로 변경
ssl_certificate /etc/ssl/note/example.crt; # 인증서 파일 경로로 변경
ssl_certificate_key /etc/ssl/note/example.net.key; # 개인 키 파일 경로로 변경
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log; # 접근 로그 저장 경로 확인
location / {
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://trilium;
proxy_read_timeout 90;
}
}
# HTTP 요청을 HTTPS로 전환
server {
listen 80;
server_name trilium.example.net; # 실제 도메인으로 변경
return 301 https://$server_name$request_uri;
}</code></pre><h2>별도 경로에서 제공하기</h2><p>여러 인스턴스를 다른 경로로 제공하려면 location을 조정할 수 있습니다. <code>proxy_pass</code> 끝에 슬래시가 없다면 location 경로의 끝에도 슬래시를 붙이지 않습니다. <code>proxy_cookie_path</code>도 같은 경로로 지정하면 여러 인스턴스에 각각 로그인 상태를 유지할 수 있습니다.</p><pre><code class="language-text-x-trilium-auto"> location /trilium/instance-one {
rewrite /trilium/instance-one/(.*) /$1 break;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://trilium;
proxy_cookie_path / /trilium/instance-one;
proxy_read_timeout 90;
}
</code></pre><p>마지막 예제의 쿠키 경로 지시문에는 원문에서 빠진 세미콜론을 보완했습니다. 실제 설정을 적용하기 전에 Nginx 구문 검사가 필요합니다.</p>
@@ -0,0 +1 @@
<p>다중 인증은 비밀번호 외에 추가 확인 수단을 요구합니다. 비밀번호가 유출되더라도 다른 사람이 접속하기 어렵게 합니다. 이 버전에서는 OpenID와 TOTP를 동시에 사용할 수 없습니다.</p><h2>인증 방식</h2><p>OpenID는 Google 같은 외부 서비스 계정으로 신원을 확인하는 방식입니다. TOTP는 인증 앱에서 짧은 시간마다 바뀌는 일회용 코드를 생성하는 방식입니다. 일반적으로 30초마다 코드가 바뀝니다.</p><h2>설정</h2><p>다중 인증은 서버 인스턴스에서 설정합니다. 원문 작성 당시에는 다중 인증이 켜진 서버와 새 데스크톱 앱의 최초 동기화에 문제가 있어 최초 동기화 동안만 끄는 임시 방법을 안내했습니다. 이는 해당 버전의 제약에 관한 설명입니다.</p><h3>TOTP</h3><ul><li>메뉴 → 설정 → 다중 인증을 엽니다.</li><li>다중 인증 사용을 켜고 시간 기반 일회용 비밀번호 방식을 선택합니다.</li><li>TOTP 비밀 키 생성 버튼을 누릅니다.</li><li>생성한 키를 사용할 인증 앱에 등록합니다.</li><li>복구 코드를 생성해 안전한 곳에 보관합니다.</li><li>인증 앱을 사용할 수 없을 때 복구 코드를 한 번씩 사용할 수 있습니다. 사용한 코드는 설정에 사용 시각이 기록됩니다.</li><li>설정을 마친 뒤 새로고침하면 다시 로그인해야 합니다.</li></ul><h3>OpenID</h3><p>먼저 인증 제공자에 애플리케이션을 등록합니다. Google은 <a href="https://developers.google.com/identity/openid-connect/openid-connect">공식 OpenID 연결 안내</a>를 참고하세요.</p><p><code>config.ini</code>에 <code>oauthBaseUrl</code>과 <code>oauthClientId</code> 및 <code>oauthClientSecret</code>을 지정합니다. <a class="reference-link" href="#root/_help_Gzjqa934BdH4">설정 안내</a>를 참고하세요. 환경 변수 <code>TRILIUM_OAUTH_BASE_URL</code>과 <code>TRILIUM_OAUTH_CLIENT_ID</code> 및 <code>TRILIUM_OAUTH_CLIENT_SECRET</code>도 사용할 수 있습니다.</p><p>서버를 다시 시작한 뒤 설정 → 다중 인증에서 사용을 켜고 OAuth/OpenID 방식을 선택하세요. 페이지를 새로고침한 뒤 제공자 계정으로 로그인합니다.</p><p>기본 제공자는 Google입니다. 다른 제공자는 <code>oauthIssuerBaseUrl</code>과 <code>oauthIssuerName</code> 및 <code>oauthIssuerIcon</code>으로 지정합니다. 대응하는 환경 변수는 <code>TRILIUM_OAUTH_ISSUER_BASE_URL</code>과 <code>TRILIUM_OAUTH_ISSUER_NAME</code> 및 <code>TRILIUM_OAUTH_ISSUER_ICON</code>입니다. 이름과 아이콘은 로그인 화면의 제공자 표시에도 필요합니다.</p>
@@ -0,0 +1,9 @@
<p>이 문서는 <a href="#root/_help_WOcw2SLH6tbX">서버 설치</a>에서 Trilium 자체에 TLS를 설정하는 방법을 설명합니다. Nginx 같은 역방향 프록시에서 HTTPS 연결을 처리하는 방식도 사용할 수 있습니다. 원문에 연결된 <a href="https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04">역방향 프록시 설정 예제</a>는 특정 Ubuntu 버전 기준입니다.</p><h2>인증서 준비</h2><p>신뢰할 수 있는 인증 기관이 서명한 인증서를 사용하는 것이 일반적입니다. <a href="https://letsencrypt.org">Let’s Encrypt</a>는 무료 인증서를 제공하며 Certbot 등의 도구로 발급과 갱신을 자동화할 수 있습니다. 자체 서명 인증서도 가능하지만 접속하는 기기마다 신뢰 설정이 필요합니다.</p><h2>config.ini 설정</h2><p><a href="#root/_help_tAassRL4RSQL">데이터 폴더</a>의 설정 파일에 인증서와 키 경로를 지정합니다.</p><pre><code class="language-text-x-trilium-auto">[Network]
port=8080
# HTTPS를 사용하려면 true로 지정합니다. false는 HTTP입니다.
https=true
# 인증서 경로입니다. 자체 서명 인증서 생성 예시는 bash bin/generate-cert.sh입니다.
# https=true일 때 사용합니다.
certPath=/[username]/.acme.sh/[hostname]/fullchain.cer
keyPath=/[username]/.acme.sh/[hostname]/example.com.key</code></pre><p><a href="#root/_help_Gzjqa934BdH4">환경 변수 설정</a>으로 같은 값을 전달할 수도 있습니다. 예제 경로는 ACME 도구를 사용한 환경의 예시이며 실제 파일 위치에 맞게 바꿔야 합니다. Docker에서는 컨테이너가 접근할 수 있는 마운트 경로를 지정하세요. 설정 후 Trilium을 다시 시작하고 HTTPS 주소로 접속합니다.</p><h2>자체 서명 인증서</h2><p>데스크톱 앱은 자체 서명 인증서를 기본적으로 신뢰하지 않습니다. 원문에는 다음처럼 인증서 검증을 끄는 방법도 소개되어 있습니다.</p><pre><code class="language-text-x-trilium-auto">export NODE_TLS_REJECT_UNAUTHORIZED=0
trilium</code></pre><p>Windows의 <code>trilium-no-cert-check.bat</code>도 같은 용도의 시작 스크립트입니다. 인증서 검증을 끄면 서버의 신원을 확인하지 못하므로 연결 보안이 약해집니다. 이 설명은 기능 안내이며 이 한글화 작업에서는 해당 설정을 변경하지 않습니다.</p>
@@ -0,0 +1 @@
<p>데스크톱 앱은 데이터를 로컬에 저장해 인터넷 연결 없이 사용할 수 있습니다. 서버와 동기화를 설정하면 여러 데스크톱 앱이 하나의 중앙 서버와 연결됩니다.</p><p><img src="Synchronization_image.png" alt="중앙 서버와 여러 클라이언트의 동기화 구조"></p><p>설정 후에는 자동으로 계속 동기화합니다.</p><h2>동기화 설정</h2><p>서버에는 유효한 <a href="#root/_help_l2VkvOwUNfZj">TLS 인증서</a>를 사용해 HTTPS로 연결하세요.</p><h3>기존 데스크톱 데이터를 새 서버로 보내기</h3><p>서버를 설치하되 초기화하지 않은 상태로 둡니다. 기존 데스크톱 앱의 설정 → 동기화에서 서버 주소를 지정하고 저장하세요.</p><p><img src="Synchronization_sync-confi.png" alt="동기화 설정"></p><p>동기화 시험을 누르면 연결을 확인하고 서버로 데이터를 보냅니다. 전송 중에도 앱을 사용할 수 있습니다. 서버에 로그인 화면이 나타나면 초기 동기화가 끝난 것입니다.</p><h3>기존 서버에서 새 데스크톱으로 받기</h3><p><a href="#root/_help_poXkQfguuA0U">데스크톱 앱을 설치</a>하고 초기 설정에서 동기화 서버 사용을 선택하세요.</p><p><img src="Synchronization_sync-init.png" alt="서버에서 동기화하는 초기 설정"></p><p>서버 주소와 해당 버전에서 요구하는 인증 정보를 입력하고 설정 완료를 누릅니다.</p><p><img src="Synchronization_sync-in-pr.png" alt="초기 동기화 진행"></p><p>완료하면 앱 화면으로 이동합니다.</p><h2>프록시</h2><p>설정 → 동기화에서 프록시를 직접 지정할 수 있습니다. 인증이 필요한 프록시는 지원하지 않습니다. 따로 지정하지 않으면 시스템 프록시 설정을 사용합니다.</p><h2>문제 해결</h2><h3>시간</h3><p>서버와 클라이언트의 시각 차이는 5분 이내여야 합니다.</p><h3>인증서</h3><p>자체 서명 인증서나 회사 프록시 때문에 인증서 검증이 실패할 수 있습니다. 원문에는 다음 환경 변수로 검증을 끄는 방법도 소개되어 있습니다.</p><pre><code class="language-text-x-trilium-auto">export NODE_TLS_REJECT_UNAUTHORIZED=0</code></pre><p>이 설정은 중간자 공격을 방어하는 인증서 검증을 끕니다. 유효한 인증서를 사용하는 것이 권장됩니다. 일부 배포판에는 같은 용도의 <code>trilium-no-cert-check.sh</code>가 있습니다.</p><h3>충돌</h3><p>동기화되기 전에 여러 기기에서 같은 노트를 수정하면 더 최근 변경을 유지합니다. 이전 내용은 <a href="#root/_help_vZWERwf8U3nx">노트 수정 이력</a>에서 확인할 수 있습니다.</p><h3>해시 검사</h3><p>동기화 후 양쪽 데이터의 해시를 비교합니다. 다르면 자동 복구 절차를 시작합니다.</p>
@@ -0,0 +1,5 @@
<p>Trilium은 용도에 따라 여러 노트 유형을 지원합니다. 기본 유형은 <a
class="reference-link" href="#root/_help_iPIMuisry3hd">텍스트</a>입니다.</p><h2>다른 유형으로 새 노트 만들기</h2><p><a class="reference-link"
href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서 기준 노트를 마우스 오른쪽 버튼으로 누릅니다. 다음에 노트 삽입은 같은 단계에 새 노트를 만들고 하위 노트 삽입은 선택한 노트 아래에 만듭니다.</p><p><img src="Note Types_image.png" alt="노트 유형 선택"></p><p><a href="#root/_help_QEAPj01N5f7w">링크</a>를 <a class="reference-link"
href="#root/_help_iPIMuisry3hd">텍스트 노트</a>에 추가할 때 새 제목을 입력하고 Enter를 누르면 유형을 선택할 수 있습니다. 새 탭에서도 같은 방법을 사용합니다.</p><h2>기존 노트의 유형 변경</h2><p><a class="reference-link"
href="#root/_help_BlN9DFI679QC">상단 리본</a>의 기본 속성에서 변경합니다. 보통 내용이 없는 노트에서 변경하는 것이 좋습니다. 유형 변경으로 <a href="#root/_help_4FahAwuGTAwC">노트 소스</a>를 편집할 수도 있습니다.</p><h2>지원하는 유형</h2><ul><li><a class="reference-link" href="#root/_help_iPIMuisry3hd">텍스트</a> — 글자 서식과 이미지 및 안내 상자를 지원합니다. 오른쪽에서 왼쪽으로 쓰기도 가능합니다.</li><li><a class="reference-link" href="#root/_help_6f9hih2hXXZk">코드</a> — 고정폭 글꼴과 구문 강조를 사용합니다. 긴 코드나 일반 텍스트를 담기에 적합합니다.</li><li><a class="reference-link" href="#root/_help_m523cpzocqaD">저장된 검색</a> — 검색어와 조건을 저장해 다시 실행합니다. 많은 노트를 빠르게 추릴 수 있습니다.</li><li><a class="reference-link" href="#root/_help_iRwzGnHPzonm">관계도</a> — 노트와 노트 사이의 관계를 만듭니다. 가계도처럼 관계가 중요한 자료에 적합합니다.</li><li><a class="reference-link" href="#root/_help_bdUJEHsAPYQR">노트 지도</a> — 노트 사이의 관계와 상하위 구조를 보여 줍니다.</li><li><a class="reference-link" href="#root/_help_HcABDtFCkbFN">렌더링 노트</a> — <a class="reference-link" href="#root/_help_CdNpE2pqjmI6">스크립트</a>로 다른 노트의 HTML을 표시합니다. 스크립트로 생성한 동적 내용도 보여 줄 수 있습니다.</li><li><a class="reference-link" href="#root/_help_GTwFsgaA0lCt">책</a> — 하위 노트를 격자나 목록 또는 달력으로 보여 줍니다. 짧은 노트를 모아 읽기 좋습니다.</li><li><a class="reference-link" href="#root/_help_s1aBHPd79XYj">Mermaid 도표</a> — 막대그래프와 순서도 및 상태도 등을 만듭니다. 도표를 전용 문법으로 작성해야 합니다.</li><li><a class="reference-link" href="#root/_help_grjYqerjn243">캔버스</a> — 스케치와 도표 및 손글씨를 그립니다. <a href="https://excalidraw.com">Excalidraw</a>와 같은 기술을 사용합니다.</li><li><a class="reference-link" href="#root/_help_1vHRoWCEjj0L">웹 보기</a> — 브라우저처럼 외부 웹페이지를 표시합니다.</li><li><a class="reference-link" href="#root/_help_gBbsAeiuUxI5">마인드맵</a> — 생각을 계층 구조로 정리합니다.</li><li><a class="reference-link" href="#root/_help_81SGnPGMk7Xc">지리 지도</a> — 하위 노트를 지도에 표시합니다. 여행 계획에 활용할 수 있으며 경로 표시와 지도에서 노트 만들기도 지원합니다.</li><li><a class="reference-link" href="#root/_help_W8vYD3Q1zjCR">파일</a> — 업로드한 PDF와 이미지 및 동영상과 음성 파일 등을 담습니다.</li></ul>
@@ -0,0 +1,3 @@
<p>코드 노트에는 C++와 JavaScript 같은 프로그램 코드나 JSON과 XML 같은 구조화 자료 및 CSS 등을 저장할 수 있습니다. 구문 강조를 제공하며 JavaScript는 <a class="reference-link"
href="#root/_help_CdNpE2pqjmI6">스크립트</a>로 실행할 수도 있습니다. 구조화 자료는 스크립트의 데이터 저장에도 활용할 수 있습니다.</p><p>짧은 코드를 <a href="#root/_help_iPIMuisry3hd">텍스트 노트</a> 안에 넣으려면 <a href="#root/_help_QxEyIjRBizuC">코드 블록</a>을 사용하세요.</p><p><img src="Code_image.png" alt="코드 노트 화면"></p><h2>언어 선택</h2><p><a href="#root/_help_BlN9DFI679QC">상단 리본</a>의 노트 유형을 열고 코드 영역에서 언어를 선택하세요.</p><p><img src="1_Code_image.png" alt="코드 언어 선택"></p><h2>언어 목록 설정</h2><p><a href="#root/_help_4TIF1oA4VQRO">설정</a> → 코드 노트의 선택 목록에 표시할 MIME 유형에서 필요한 언어를 선택할 수 있습니다. 변경한 뒤 <a href="#root/_help_s8alTXmpFR61">애플리케이션을 새로고침</a>해야 목록에 반영됩니다. 이 목록은 <a href="#root/_help_QxEyIjRBizuC">코드 블록</a>과 <a href="#root/_help_iPIMuisry3hd">텍스트 노트</a>에서도 함께 사용합니다.</p><h2>색상 테마</h2><p>0.94.0부터 <a
class="reference-link" href="#root/_help_4TIF1oA4VQRO">설정</a> → 코드 노트 → 모양에서 색상 테마를 선택할 수 있습니다. 텍스트 노트의 코드 블록과는 다른 기술을 사용하므로 제공하는 테마 수가 다릅니다.</p><p>이 버전에서는 사용자가 코드 노트 테마를 직접 추가할 수 없습니다. 테마가 CSS가 아니라 JavaScript로 정의되기 때문입니다. 추가를 제안하려면 CodeMirror 5가 아닌 CodeMirror 6용 테마인지 확인하세요.</p>
@@ -0,0 +1,14 @@
<p>파일 노트에는 이미지와 동영상 및 PDF 같은 외부 파일을 첨부할 수 있습니다.</p><h2>파일 올리기</h2><p>파일 노트는 유형을 선택해 직접 만들지 않습니다. 파일을 <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>로 끌어 놓거나 노트를 마우스 오른쪽 버튼으로 눌러 노트로 가져오기를 선택하세요.</p><h2>지원하는 파일</h2><h3>PDF</h3><p><img style="aspect-ratio:933/666;" src="File_image.png" width="933" height="666" alt="PDF 보기"></p><p>Trilium 안에서 바로 읽을 수 있습니다. 왼쪽 위 메뉴에서 페이지 미리보기와 문서에 포함된 목차를 엽니다. 위쪽에서 페이지 번호와 확대 비율을 바꾸거나 문서를 회전합니다. 추가 메뉴에서는 두 페이지 보기와 주석 표시 및 문서 속성을 사용할 수 있습니다.</p><h3>이미지</h3><p><img style="aspect-ratio:879/766;" src="4_File_image.png" width="879"
height="766" alt="이미지 보기"></p><p>참조를 클립보드에 복사하면 <a
class="reference-link" href="#root/_help_iPIMuisry3hd">텍스트 노트</a>에 이미지를 넣을 수 있습니다. <a class="reference-link" href="#root/_help_0Ofbk1aSuVRu">이미지 참조</a>를 참고하세요.</p><h3>동영상</h3><p><img style="aspect-ratio:854/700;" src="1_File_image.png" width="854"
height="700" alt="동영상 재생"></p><p>파일을 스트리밍하므로 서버에서 전체 파일을 내려받기 전에도 재생할 수 있습니다. 다만 매우 큰 파일을 보관하는 용도로 설계된 기능은 아닙니다. 동영상이 크면 <a
class="reference-link" href="#root/_help_wX4HbRucYSDD">데이터베이스</a>와 <a class="reference-link"
href="#root/_help_ODY7qQn5m2FT">백업</a>도 커지고 처음 올릴 때 지연될 수 있습니다. 데이터베이스가 크다는 이유만으로 일반적인 사용 속도가 크게 느려지는 것은 아닙니다.</p><h3>음성</h3><p><img style="aspect-ratio:850/243;" src="3_File_image.png" width="850"
height="243" alt="음성 재생"></p><p>지원하는 음성 파일은 기본 재생기로 열립니다. 재생과 일시 정지 버튼을 사용하고 진행 막대를 누르거나 끌어 재생 위치를 바꿉니다. 음량을 조절할 수 있으며 음량 옆 메뉴에서 재생 속도도 바꿀 수 있습니다.</p><h3>텍스트 파일</h3><p><img style="aspect-ratio:926/347;" src="2_File_image.png" width="926"
height="347" alt="텍스트 파일 미리보기"></p><p>텍스트로 인식한 파일은 내용 일부를 보여 줍니다. 외부 라이브러리나 자동 생성 자료처럼 본문 편집보다 파일 보관과 다운로드가 필요한 경우에 유용합니다.</p><p>보통 텍스트 파일을 <a href="#root/_help_mHbBMPDPkVV5">가져오면</a> <a class="reference-link" href="#root/_help_iPIMuisry3hd">텍스트</a> 또는 <a
class="reference-link" href="#root/_help_6f9hih2hXXZk">코드</a> 노트가 됩니다. 파일 노트로 보관하려면 노트로 가져오기에서 HTML·Markdown·TXT를 텍스트 노트로 가져오는 옵션과 인식한 코드 파일을 코드 노트로 가져오는 옵션을 모두 해제하세요. 미리보기 길이는 제한되므로 전체 내용은 외부 앱에서 확인합니다.</p><h3>알 수 없는 형식</h3><p><img style="aspect-ratio:532/240;" src="5_File_image.png" width="532"
height="240" alt="미리보기를 지원하지 않는 파일"></p><p>형식을 인식하지 못하면 본문 미리보기가 나오지 않습니다. 내려받기와 외부 앱으로 열기 등 기본 기능은 사용할 수 있습니다.</p><h2>파일 관리</h2><p><a class="reference-link"
href="#root/_help_BlN9DFI679QC">상단 리본</a>의 이미지 또는 파일 탭에서 내려받기와 기본 앱으로 열기 및 새 버전 올리기를 사용할 수 있습니다. 파일 노트의 유형은 바꿀 수 없습니다. <a href="#root/_help_0vhv7lsOLy82">첨부 파일</a>로 바꾸려면 <a
href="#root/_help_8YBEPzcpUgxw">노트 메뉴</a>를 사용합니다.</p><h2>다른 노트에 표시</h2><p><a class="reference-link" href="#root/_help_0ESUbbAxVnoK">노트 목록</a>에서도 파일 유형에 맞춰 표시됩니다.</p><p><img class="image_resized" style="aspect-ratio:853/315;width:50%;"
src="6_File_image.png" width="853" height="315" alt="노트 목록에 표시된 파일"></p><p>이미지를 제외한 파일은 <a class="reference-link" href="#root/_help_nBAXQFj20hS1">노트 포함</a>으로 텍스트 노트에 읽기 전용 위젯으로 넣습니다. 이미지는 <a
class="reference-link" href="#root/_help_0Ofbk1aSuVRu">이미지 참조</a>로 일반 이미지처럼 넣습니다.</p>
@@ -0,0 +1,18 @@
<p><img style="aspect-ratio:892/675;" src="10_Geo Map_image.png" width="892"
height="675" alt="지리 지도 예제"></p><p>하위 노트의 위치 속성을 바탕으로 지도에 표시합니다. 지도에서 위치를 선택해 새 노트를 만들 수도 있습니다.</p><h2>지도 만들기</h2><p>노트 트리에서 마우스 오른쪽 메뉴의 하위 노트 삽입 → 지리 지도를 선택합니다.</p><p><img style="aspect-ratio:1256/1044;" src="7_Geo Map_image.png" width="1256"
height="1044" alt="지리 지도 만들기"></p><p>처음에는 전 세계가 보이는 빈 지도가 열립니다.</p><p><img style="aspect-ratio:1720/1396;" src="9_Geo Map_image.png" width="1720"
height="1396" alt="새 지도"></p><h2>이동과 확대</h2><p>지도를 끌어 이동합니다. 마우스 휠이나 터치패드 두 손가락 동작 또는 왼쪽 위의 더하기·빼기 버튼으로 확대 비율을 바꿉니다. 위치와 확대 비율은 노트에 저장되어 다음에 열 때 복원됩니다.</p><h2>지도에서 표시점 추가</h2><p>원하는 위치로 이동한 뒤 오른쪽 위 <a href="#root/_help_XpOYSgsLkTJy">떠 있는 버튼</a> 영역의 <img src="11_Geo Map_image.png" alt="표시점 추가 버튼"> 버튼을 누릅니다. 보이지 않으면 <img src="17_Geo Map_image.png" alt="버튼 영역 펼치기"> 버튼으로 펼칩니다.</p><p><img class="image_resized" style="aspect-ratio:1730/416;width:100%;" src="2_Geo Map_image.png"
width="1730" height="416" alt="표시점 삽입 모드"></p><p>지도에서 위치를 누릅니다. 취소하려면 Esc를 누르세요.</p><p><img class="image_resized" style="aspect-ratio:1586/404;width:100%;" src="8_Geo Map_image.png"
width="1586" height="404" alt="표시점 이름 입력"></p><p>이름을 입력하고 확인하면 표시점과 하위 노트가 만들어집니다.</p><p><img class="image_resized" style="aspect-ratio:1696/608;width:100%;" src="16_Geo Map_image.png"
width="1696" height="608" alt="표시점과 하위 노트 생성"></p><h2>위치 저장 방식</h2><p>하위 노트의 <code>#geolocation</code> 속성에 위도와 경도를 쉼표로 구분해 저장합니다. 직접 입력할 수도 있습니다.</p><p><img src="18_Geo Map_image.png" width="1288" height="278" alt="위치 속성"></p><h2>표시점 이동</h2><p>표시점을 끌어서 옮기면 마우스를 놓는 즉시 저장됩니다. 이 버전에서는 이동을 실행 취소할 수 없습니다. 아직 마우스를 놓지 않았다면 Ctrl+R로 새로고침해 취소할 수 있습니다.</p><h2>표시점 사용</h2><p>마우스를 올리면 노트 내용이 보이고 제목을 누르면 현재 화면에서 엽니다. 마우스 가운데 버튼은 새 탭에서 엽니다. 오른쪽 메뉴에서는 새 탭·분할 화면·창으로 열거나 지원되는 외부 지도 앱으로 위치를 열 수 있습니다. 지도에서 제거는 <code>#geolocation</code> 속성을 지웁니다. 다시 표시하려면 좌표를 입력해야 합니다.</p><h2>아이콘과 색상</h2><p><img style="aspect-ratio:523/295;" src="Geo Map_image.jpg"
width="523" height="295" alt="표시점의 아이콘과 색상"></p><p>노트와 같은 아이콘을 사용합니다. <code>#color=green</code>처럼 색상 속성을 지정할 수도 있습니다.</p><h2>좌표 직접 추가</h2><p>지도 아래에 노트를 만들고 <code>#geolocation</code>에 쉼표로 구분한 위도와 경도를 넣습니다.</p><h3>Google 지도</h3><p>원하는 위치를 마우스 오른쪽 버튼으로 누르고 첫 항목의 좌표를 복사합니다.</p><p><img style="aspect-ratio:732/918;" src="13_Geo Map_image.png" width="732"
height="918" alt="Google 지도에서 좌표 복사"></p><p>Trilium 지도 아래에 노트를 만듭니다.</p><p><img style="aspect-ratio:518/84;" src="4_Geo Map_image.png" width="518"
height="84" alt="하위 노트 만들기"></p><p>소유한 속성에 <code>#geolocation="</code>을 입력한 뒤 좌표를 붙이고 닫는 따옴표를 입력합니다. Enter로 확정합니다.</p><p><img style="aspect-ratio:1074/276;" src="12_Geo Map_image.png" width="1074"
height="276" alt="복사한 좌표를 속성에 입력"></p><h3>OpenStreetMap</h3><p>원하는 위치의 오른쪽 메뉴에서 주소 표시를 선택합니다.</p><p><img class="image_resized" style="aspect-ratio:562/454;width:100%;" src="1_Geo Map_image.png"
width="562" height="454" alt="OpenStreetMap 주소 표시"></p><p>왼쪽 위에 표시되는 좌표를 선택해 복사합니다.</p><p><img class="image_resized" style="aspect-ratio:696/480;width:100%;" src="Geo Map_image.png"
width="696" height="480" alt="좌표 복사"></p><p>지도 하위 노트의 <code>#geolocation</code> 값에 넣으면 표시됩니다.</p><p><img class="image_resized" style="aspect-ratio:640/276;width:100%;" src="5_Geo Map_image.png"
width="640" height="276" alt="위치 속성에 붙여넣기"></p><h2>GPS 경로 파일</h2><p>기본적인 GPX 경로 표시를 지원합니다. 노트 트리의 지도 노트 안으로 <code>.gpx</code> 파일을 끌어 놓습니다.</p><p><img style="aspect-ratio:226/74;" src="3_Geo Map_image.png" width="226"
height="74" alt="GPX 파일 가져오기"></p><p>파일 유형이 <code>application/gpx+xml</code>인지 확인합니다.</p><p><img style="aspect-ratio:322/222;" src="15_Geo Map_image.png" width="322"
height="222" alt="GPX 파일 유형"></p><p>지도에 경로와 시작·끝 표시점이 나타납니다.</p><p><img style="aspect-ratio:620/530;" src="6_Geo Map_image.png" width="620"
height="530" alt="지도에 표시된 경로"></p><p>시작 표시점은 노트 제목과 아이콘 및 색상을 사용합니다. 끝 표시점은 다른 아이콘으로 구분합니다. GPX에 경유지가 있으면 함께 표시하며 이름이 있는 경유지는 마우스를 올렸을 때 이름이 나옵니다.</p><h2>문제 해결</h2><p><img style="aspect-ratio:678/499;" src="14_Geo Map_image.png" width="678"
height="499" alt="지도에 격자 선이 나타나는 현상"></p><p>앱 확대 비율이 100%가 아니면 소수점 배율 때문에 지도 조각 사이에 선이 보일 수 있습니다. Ctrl+0으로 화면 확대를 100%로 되돌리세요.</p>
@@ -0,0 +1,3 @@
<p><img style="aspect-ratio:886/663;" src="2_Mermaid Diagrams_image.png"
width="886" height="663" alt="Mermaid 도표 화면"></p><p>Mermaid는 글자로 작성한 설명을 도표로 바꿉니다. 순서도와 시퀀스 및 클래스와 상태 도표 및 원형 차트 등을 만들 수 있습니다. 문법은 <a href="https://mermaid.js.org/intro/">Mermaid 공식 안내</a>를 참고하세요.</p><h2>화면 배치</h2><p>가로 배치는 왼쪽에 코드와 오른쪽에 미리보기를 둡니다. 세로 배치는 아래에 코드와 위에 미리보기를 둡니다. <a class="reference-link" href="#root/_help_XpOYSgsLkTJy">떠 있는 버튼</a>의 <img src="Mermaid Diagrams_image.png" alt="편집 영역 위치 전환 버튼">으로 바꿀 수 있습니다.</p><h2>편집과 미리보기</h2><p>코드를 바꾸면 도표가 자동으로 갱신됩니다. 미리보기 오른쪽 아래의 <img src="1_Mermaid Diagrams_image.png" alt="확대와 축소 및 가운데 맞춤 버튼">을 이용하거나 마우스 휠로 확대 비율을 바꾸세요. 왼쪽 버튼을 누른 채 끌면 이동합니다. 코드를 수정해도 확대 비율과 위치는 유지됩니다. 코드와 미리보기 사이 경계를 끌면 영역 크기를 바꿀 수 있습니다.</p><p><a class="reference-link" href="#root/_help_XpOYSgsLkTJy">떠 있는 버튼</a>에서 다음 기능을 사용할 수 있습니다.</p><ul><li>편집 영역을 왼쪽 또는 아래로 옮기기</li><li>편집 잠금 — 코드를 숨기고 도표를 크게 표시합니다. 잠금을 해제하면 다시 편집할 수 있습니다.</li><li><a class="reference-link"
href="#root/_help_0Ofbk1aSuVRu">이미지 참조</a> 복사 — 텍스트 노트에 도표 미리보기를 넣습니다.</li><li>SVG로 내보내기 — 확대해도 선명한 벡터 이미지로 저장합니다.</li><li>PNG로 내보내기 — 기본 배율의 일반 이미지로 저장합니다.</li></ul><h2>문법 오류</h2><p>코드에 오류가 있으면 안내 영역에 표시됩니다. 오류가 해결되기 전까지 미리보기에는 마지막으로 정상 표시된 도표가 남습니다.</p>
@@ -0,0 +1,3 @@
<p>관계 지도는 <a href="#root/_help_BFs8mudNFgCS">노트</a>와 노트 사이의 <a href="#root/_help_zEY4DaJG4YT5">관계</a>를 시각적으로 표시하는 유형입니다.</p><h2>개발 과정 예제</h2><p><img src="1_Relation Map_relation-map-.png" alt="개발 과정 관계 지도"></p><p><img src="1_Relation Map_relation-map-.gif" alt="개발 과정 관계 지도 만들기"></p><p>개발 과정이라는 노트를 만들고 관계 지도 유형으로 바꿉니다. 요구 사항과 개발 및 시험과 시연 노트를 차례로 만들고 지도에서 위치를 선택하세요. 노트 사이에 <a
href="#root/_help_zEY4DaJG4YT5">관계</a>를 끌어서 연결한 뒤 이름을 지정합니다. 지도 항목은 실제 하위 노트이므로 열어 본문을 작성할 수도 있습니다. 연결선은 <a href="#root/_help_zEY4DaJG4YT5">관계 속성</a>입니다.</p><h2>가족 관계 예제</h2><p>아래는 과거 영국 왕실 인물을 이용한 예제입니다. 인물의 호칭은 원문 작성 당시를 따릅니다.</p><p><img src="Relation Map_relation-map-.png" alt="가족 관계 지도"></p><p><img src="Relation Map_relation-map-.gif" alt="가족 관계 지도 만드는 과정"></p><p>빈 지도에 필립 공과 엘리자베스 2세 노트를 끌어 놓습니다. 두 노트에 지정된 <code>isPartnerOf</code> <a
href="#root/_help_zEY4DaJG4YT5">관계</a>가 자동으로 표시됩니다. 양쪽 방향에 관계가 하나씩 있습니다.</p><p>찰스 왕자 노트를 만들고 두 사람을 향한 <code>isChildOf</code> 관계를 추가합니다. <a href="#root/_help_OFXdgB2nNk1F">관계 정의</a>에서 <a href="#root/_help_OFXdgB2nNk1F">역방향 관계</a>를 설정했으므로 부모에서 자녀를 향하는 연결도 자동으로 생깁니다. 다이애나 비 노트를 만들고 배우자 관계를 연결하면 반대 방향도 함께 만들어집니다. 마지막으로 지도를 이동하고 확대 비율을 조정하세요.</p><p>관계 정의는 가족 관계도의 하위 노트에 적용된 인물 템플릿에서 가져옵니다. <a href="#root/_help_wX4HbRucYSDD">기본 예제</a>에서 직접 확인할 수 있습니다.</p><h2>표시할 관계 선택</h2><p><code>displayRelations</code> 라벨에 관계 이름을 쉼표로 구분해 지정하면 해당 관계만 표시합니다. 반대로 <code>hideRelations</code>에 이름을 지정하면 해당 관계를 제외합니다. 이 쉼표는 설정 문법의 구분자입니다.</p><h2>관련 문서</h2><p><a href="#root/_help_BCkXAVs63Ttv">노트 지도</a>도 비슷한 방식으로 노트 사이의 연결을 보여 줍니다.</p>
@@ -0,0 +1,4 @@
<p>텍스트는 Trilium의 기본 노트 유형입니다. 글자 서식과 표 및 이미지와 안내 상자 등 다양한 기능을 제공합니다.</p><h2>서식 도구 모음</h2><p>떠 있는 도구 모음은 필요한 순간에 나타납니다. 문단용 도구와 글자를 선택했을 때 나타나는 도구가 있습니다.</p><p><img src="1_Text_image.png" width="496" height="91" alt="문단 도구 모음"></p><p><img src="2_Text_image.png" width="812" height="114" alt="글자 도구 모음"></p><p>고정 도구 모음은 여러 서식 버튼을 한곳에 표시합니다.</p><p><img src="Text_image.png" width="1109" height="124" alt="고정 도구 모음"></p><p><a class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음 안내</a>에서 선택 방법을 확인하세요.</p><h2>지원 기능</h2><ul><li><a class="reference-link" href="#root/_help_Gr6xFaF6ioJ5">일반 서식</a> — 제목과 본문 및 글자 크기와 굵게·기울임·밑줄·취소선 및 첨자와 색상과 서식 지우기</li><li><a class="reference-link" href="#root/_help_S6Xx8QIWTV66">목록</a> — 글머리 기호와 번호 목록 및 체크리스트</li><li><a class="reference-link" href="#root/_help_NwBbFdNZ9h7O">인용문과 안내 상자</a></li><li><a class="reference-link" href="#root/_help_NdowYOC1GFKS">표</a> — 셀 합치기와 표·셀 꾸미기 및 설명</li><li><a class="reference-link" href="#root/_help_UYuUB1ZekNQU">개발자용 서식</a> — 문장 안의 코드와 코드 블록 및 단축키 표시</li><li><a class="reference-link" href="#root/_help_AgjCISero73a">각주</a></li><li><a class="reference-link" href="#root/_help_mT0HEkOsz6i1">이미지</a></li><li><a class="reference-link" href="#root/_help_QEAPj01N5f7w">링크</a> — 외부 웹페이지와 내부 노트 연결</li><li><a class="reference-link" href="#root/_help_nBAXQFj20hS1">노트 포함</a></li><li><a class="reference-link" href="#root/_help_CohkqWQC1iBv">삽입 메뉴</a> — 기호와 <a class="reference-link" href="#root/_help_YfYAtQBcfo5V">수식</a> 및 Mermaid 도표와 가로 구분선 및 페이지 나누기</li><li><a class="reference-link" href="#root/_help_dEHYtoWWi8ct">기타 기능</a> — 들여쓰기와 Markdown 가져오기 및 <a class="reference-link" href="#root/_help_2x0ZAX9ePtzV">하위 노트로 잘라내기</a></li></ul><h2>읽기와 편집</h2><p>보통 편집 모드로 열립니다. 본문이 매우 크거나 직접 지정한 경우에는 <a class="reference-link"
href="#root/_help_CoFPLs3dRlXc">읽기 전용</a>으로 열립니다.</p><h2>단축키</h2><p><a
class="reference-link" href="#root/_help_A9Oc6YKKc65v">키보드 단축키</a>와 <a class="reference-link"
href="#root/_help_QrtTYPmdd1qq">Markdown식 자동 서식</a>으로 마우스 없이도 편집할 수 있습니다.</p><h2>편집기</h2><p>오픈 소스 기반을 가진 <a class="reference-link" href="#root/_help_MI26XDLSAlCD">CKEditor</a>를 사용합니다. 편집 화면에서 서식이 적용된 결과를 바로 확인할 수 있습니다.</p>
@@ -0,0 +1,13 @@
<h2>인용문</h2><p>한 문단 이상을 인용할 때 사용할 수 있습니다. <a class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>의 <img src="Block quotes & admonitions.png"
width="15" height="12" alt="인용문 버튼">을 누르거나 줄 시작에서 <code>&gt;</code> 뒤에 공백을 입력하세요. 인용문 안에는 표와 이미지 및 다른 인용문이나 안내 상자도 넣을 수 있습니다.</p><h2>안내 상자</h2><p>독자가 알아야 할 내용을 눈에 띄게 표시하는 상자입니다.</p><p><img style="aspect-ratio:959/547;" src="2_Block quotes & admonitions.png"
width="959" height="547" alt="안내 상자의 종류"></p><p>동작은 인용문과 비슷하며 제목과 표 및 이미지 등을 안에 넣을 수 있습니다.</p><h3>만들기</h3><p><a class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>에서 안내 상자를 선택하세요.</p><p><img src="1_Block quotes & admonitions.png" alt="안내 상자 메뉴"></p><p><code>!!! note</code>는 참고 상자를 만듭니다. <code>!!! tip</code>은 도움말이며 <code>!!! important</code>는 중요입니다. <code>!!! caution</code>은 주의이며 <code>!!! warning</code>은 경고입니다. <code>!!!</code> 뒤에 다른 글자를 입력하면 참고 상자 안에 그 글자가 들어갑니다.</p><h3>사용 방법</h3><ul><li>글자를 선택하고 안내 상자 버튼을 누르면 선택한 내용을 상자로 바꿉니다.</li><li>여러 상자를 선택한 뒤 버튼을 누르면 하나로 합칩니다.</li><li>빈 상자에서 <kbd>Backspace</kbd>를 누르면 삭제합니다.</li><li><kbd>Enter</kbd>는 새 문단을 만들며 두 번 누르면 상자 밖으로 나옵니다.</li><li>제목과 표 등 블록 요소를 안에 넣을 수 있습니다.</li></ul><h3>종류</h3><p>참고와 도움말 및 중요와 주의와 경고의 다섯 종류를 제공합니다. GitHub의 안내 상자를 참고한 구성이며 이 버전에서는 종류를 추가하거나 사용자가 바꾸는 기능을 제공하지 않습니다.</p><h3>Markdown</h3><p>가져오기와 내보내기에서는 GitHub 형식을 사용합니다.</p><pre><code class="language-text-x-trilium-auto">&gt; [!NOTE]
&gt; 참고할 내용입니다.
&gt; [!TIP]
&gt; 도움이 되는 설명입니다.
&gt; [!IMPORTANT]
&gt; 중요한 내용입니다.
&gt; [!CAUTION]
&gt; 주의할 내용입니다.</code></pre><p>편집 중 자동 변환에 쓰는 <code>!!! note</code>와 Markdown 파일의 문법은 다릅니다. Markdown 파일에서는 위의 GitHub 형식을 사용하세요.</p>
@@ -0,0 +1,5 @@
<p><img src="1_Code blocks_image.png" alt="코드 블록 예시"></p><p>텍스트 노트 안에 짧은 코드를 넣는 기능입니다. 전체 로그처럼 긴 내용은 <a class="reference-link"
href="#root/_help_6f9hih2hXXZk">코드 노트</a>를 사용하세요.</p><h2>삽입</h2><p><a class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>의 <img src="Code blocks_image.png" alt="코드 블록 버튼">을 누르면 마지막으로 선택한 언어의 블록을 만듭니다. 처음에는 자동 감지입니다. 옆의 화살표로 다른 언어를 선택할 수 있습니다. 역따옴표 세 개를 입력하는 방법도 있으며 이때도 마지막으로 선택한 언어를 사용합니다.</p><h2>구문 강조와 색상</h2><p>0.90.12부터 코드 블록에 구문 강조를 적용합니다. <a class="reference-link" href="#root/_help_6f9hih2hXXZk">코드 노트</a>와는 다른 기술을 사용합니다. 자동 감지는 내용을 보고 언어를 추정하며 잘못 감지하면 직접 언어를 선택하세요. 일반 텍스트를 선택하면 강조하지 않습니다.</p><p>편집 중에는 약 500줄 이상의 큰 블록에서 강조를 끕니다. 이 기준은 설정할 수 없습니다. <a class="reference-link"
href="#root/_help_CoFPLs3dRlXc">읽기 전용 노트</a>에는 이 제한이 적용되지 않습니다. 설정 → 모양에서 Highlight.js 색상 테마와 줄바꿈을 선택할 수 있습니다. 구문 강조 없음을 선택하면 전체 노트에서 끕니다.</p><p>CKEditor의 검색 강조 등에 사용하는 API에 Highlight.js를 연결한 방식입니다. <a href="https://github.com/antoniotejada">antoniotejada</a>의 <a href="https://github.com/antoniotejada/Trilium-SyntaxHighlightWidget">구문 강조 위젯</a>을 바탕으로 설정과 기능을 확장했습니다.</p><h3>기존 플러그인에서 전환</h3><p><a href="https://github.com/antoniotejada/Trilium-SyntaxHighlightWidget">Trilium-SyntaxHighlightWidget</a> 같은 기존 플러그인은 충돌을 피하도록 비활성화하세요. 문제가 지속되면 안전 모드로 실행해 확인할 수 있습니다.</p><h2>언어 변경</h2><p>블록 안을 클릭한 뒤 <a class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>에서 언어를 바꿉니다.</p><p><img src="2_Code blocks_image.png" alt="코드 블록 언어 변경"></p><h2>언어 목록</h2><p><a
class="reference-link" href="#root/_help_6f9hih2hXXZk">코드 노트</a>와 같은 목록을 사용합니다. <a class="reference-link"
href="#root/_help_4TIF1oA4VQRO">설정</a> → 코드 노트의 선택 목록에 표시할 MIME 유형에서 언어를 선택하거나 해제하세요. <a href="#root/_help_s8alTXmpFR61">새로고침</a> 후 반영됩니다.</p>
@@ -0,0 +1,6 @@
<h2>제목</h2><p><img style="aspect-ratio:255/284;" src="3_General formatting_image.png"
width="255" height="284" alt="제목 서식 선택"></p><p>본문은 제목 2~6으로 구분할 수 있습니다. 제목 1은 노트 제목에 사용합니다. 일반 문단으로 되돌리려면 본문을 선택하세요. <code>##</code>부터 <code>######</code>까지 입력해 제목 2~6을 만들 수도 있습니다.</p><h2>글자 크기</h2><p><img style="aspect-ratio:363/249;" src="General formatting_image.png"
width="363" height="249" alt="글자 크기 선택"></p><p>일부 글자를 선택하고 크기를 바꾸면 강조할 수 있습니다. 숫자 대신 매우 작게와 작게 같은 상대 크기를 사용합니다. 모든 노트를 크게 보고 싶다면 <a
class="reference-link" href="#root/_help_4TIF1oA4VQRO">설정</a>의 기본 글자 크기나 화면 확대를 조정하세요.</p><h2>굵게와 기울임 및 밑줄과 취소선</h2><p><img style="aspect-ratio:215/71;" src="4_General formatting_image.png"
width="215" height="71" alt="글자 서식 버튼"></p><p>각 버튼으로 적용하고 서식 지우기로 제거할 수 있습니다. 단축키는 굵게가 Ctrl+B이며 기울임은 Ctrl+I이고 밑줄은 Ctrl+U입니다. <code>**글자**</code>나 <code>__글자__</code>는 굵게입니다. <code>*글자*</code>나 <code>_글자_</code>는 기울임이며 <code>~~글자~~</code>는 취소선입니다.</p><h2>위 첨자와 아래 첨자</h2><p>cm³ 같은 단위와 NaHCO₃ 같은 화학식에 사용할 수 있습니다. 복잡한 식은 <a class="reference-link" href="#root/_help_YfYAtQBcfo5V">수식 기능</a>을 사용하세요.</p><h2>글자색과 배경색</h2><p><img style="aspect-ratio:167/204;" src="2_General formatting_image.png"
width="167" height="204" alt="색상 선택"></p><p>미리 지정된 색을 선택하거나 색상 선택기로 직접 정할 수 있습니다. 문서에서 사용한 색은 다시 고르기 쉽도록 목록에 나타납니다. 밝은 <a href="#root/_help_Wy267RK4M69c">테마</a>와 어두운 테마 사이를 전환해도 읽기 쉬운 대비인지 확인하세요. 색상 제거 또는 서식 지우기로 해제할 수 있습니다.</p><h2>서식 지우기</h2><p><img src="1_General formatting_image.png" width="17" height="16" alt="서식 지우기 버튼">은 선택한 글자의 굵기와 색상 및 크기 등을 지웁니다. 제거할 서식이 없으면 비활성화됩니다. 제목 서식은 별도로 본문으로 바꿔야 합니다. 붙여넣을 때부터 서식을 제외하려면 Ctrl+Shift+V를 사용하세요.</p><h2>Markdown</h2><p><a class="reference-link" href="#root/_help_Oau6X9rCuegd">Markdown</a>으로 내보낼 때 제목과 굵게 및 기울임과 밑줄 등 대부분의 기본 서식을 유지합니다.</p>
@@ -0,0 +1,4 @@
<p>JPEG와 PNG 및 GIF 이미지를 저장하고 표시할 수 있습니다. 노트의 <a href="#root/_help_0vhv7lsOLy82">첨부 파일</a>로 넣거나 별도 <a href="#root/_help_kBrnXNG3Hplm">이미지 노트</a>로 <a
href="#root/_help_kBrnXNG3Hplm">노트 트리</a>에 둘 수 있습니다. 참조를 텍스트 노트에 붙이면 본문에도 표시할 수 있습니다.</p><h2>이미지 넣기</h2><p>파일 탐색기에서 편집기로 이미지를 끌어 놓으세요.</p><p><img src="8_Images_image.png" alt="이미지 끌어 놓기"></p><p>블록 도구 모음에서 이미지 삽입을 선택할 수도 있습니다.</p><p><img src="6_Images_image.png" alt="이미지 삽입 메뉴"></p><p>웹의 이미지를 복사해 붙이면 이미지를 내려받아 본문에 포함합니다.</p><h2>이미지 배치</h2><p>이미지를 누르면 설정 팝업이 나타납니다.</p><p><img src="9_Images_image.png" alt="이미지 설정"></p><h3>문장 안에 배치</h3><p><img src="5_Images_image.png" alt="문장 안에 배치 버튼"></p><p><img src="1_Images_image.png" alt="문장 안에 배치 예시"></p><p>글자처럼 문단 안에 놓습니다. 끌어서 옮기거나 잘라내고 붙여넣을 수 있습니다.</p><h3>가운데 배치</h3><p><img src="10_Images_image.png" alt="가운데 배치 버튼"></p><p><img src="2_Images_image.png" alt="가운데 배치 예시"></p><p>별도 블록으로 가운데에 표시하며 좌우에 글자가 흐르지 않습니다.</p><h3>글자로 둘러싸기</h3><p><img src="4_Images_image.png" alt="글자로 둘러싸기 버튼"></p><p><img src="7_Images_image.png" alt="글자로 둘러싸기 예시"></p><p>글자의 왼쪽이나 오른쪽에 이미지를 표시합니다.</p><h3>블록 정렬</h3><p><img src="Images_image.png" alt="블록 정렬 버튼"></p><p><img src="3_Images_image.png" alt="블록 정렬 예시"></p><p>별도 블록을 왼쪽이나 오른쪽으로 정렬합니다. 이미지 옆에는 글자가 흐르지 않습니다.</p><h2>압축</h2><p>Trilium은 업로드한 이미지를 저장하기 전에 크기를 줄이고 압축하므로 품질이 달라질 수 있습니다. <a class="reference-link"
href="#root/_help_4TIF1oA4VQRO">설정</a> → 기타에서 기본 품질을 조정할 수 있습니다. 원본 해상도를 보존하려면 <a
class="reference-link" href="#root/_help_8YBEPzcpUgxw">노트 메뉴</a> → 파일 가져오기로 첨부하세요.</p><h2>이미지를 나란히 놓기</h2><p>크기가 비슷하면 문장 안에 배치한 뒤 같은 줄로 끌어 놓으세요. 크기가 다르면 테두리를 숨긴 <a href="#root/_help_NdowYOC1GFKS">표</a>의 각 칸에 넣을 수 있습니다.</p>
@@ -0,0 +1,9 @@
<p><a class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>의 <img src="4_Insert buttons_image.png" width="34" height="16" alt="삽입 메뉴 버튼">을 누르면 기호와 수식 및 구분선 등을 넣을 수 있습니다.</p><h2>북마크</h2><p><a class="reference-link" href="#root/_help_oSuaNgyyKnhu">북마크 안내</a>를 참고하세요.</p><h2>이모지</h2><p><img style="aspect-ratio:366/410;" src="Insert buttons_plus.png" width="366"
height="410" alt="이모지 선택기"></p><p>범주와 이모지를 선택하면 유니코드 문자로 삽입합니다. 이름으로 검색하고 오른쪽 선택 상자에서 피부색을 고를 수 있습니다. 이 한글화 적용본은 한국어 이름과 검색어를 제공합니다. <code>:</code> 뒤에 단축 이름을 입력하면 후보 목록이 나타납니다. 화살표로 선택하고 Enter로 넣으세요.</p><p><img
src="1_Insert buttons_plus.png" width="272" height="187" alt="이모지 자동 완성"></p><h2>기호</h2><p><img style="aspect-ratio:346/322;" src="1_Insert buttons_image.png" width="346"
height="322" alt="기호 선택 창"></p><p><img src="7_Insert buttons_image.png" width="18" height="15" alt="기호 버튼">을 누르면 키보드로 입력하기 어려운 문자 목록이 열립니다. 문자를 누르면 현재 위치에 들어갑니다. 창의 제목 부분을 끌어 옮기거나 범주로 목록을 좁힐 수 있습니다.</p><h2>수식</h2><p><a class="reference-link" href="#root/_help_YfYAtQBcfo5V">수식 안내</a>를 참고하세요.</p><h2>Mermaid 도표</h2><p><img src="2_Insert buttons_image.png" width="16" height="17" alt="Mermaid 삽입 버튼">으로 본문에 간단한 도표를 넣습니다. 전용 <a class="reference-link" href="#root/_help_s1aBHPd79XYj">Mermaid 노트</a>와 비슷한 기능입니다. 복잡한 도표는 전용 노트를 만들고 <a class="reference-link" href="#root/_help_nBAXQFj20hS1">노트 포함</a>으로 넣으세요.</p><p><img style="aspect-ratio:1174/358;" src="6_Insert buttons_image.png" width="1174"
height="358" alt="본문 안의 Mermaid 도표"></p><h2>가로 구분선</h2><p><a class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>의 <img src="5_Insert buttons_image.png"
width="18" height="16" alt="가로 구분선 버튼">을 누르거나 <code>---</code>를 입력하세요.</p><p><img
src="3_Insert buttons_image.png" width="502" height="95" alt="가로 구분선"></p><h2>페이지 나누기</h2><p><img style="aspect-ratio:371/79;" src="8_Insert buttons_image.png" width="371"
height="79" alt="페이지 나누기 표시"></p><p>인쇄하거나 <a href="#root/_help_NRnIZmSMc5sj">PDF로 내보낼 때</a> 다음 문단이나 표와 이미지를 새 페이지에서 시작하게 합니다. 편집기에는 페이지 나누기라고 표시되지만 이 문구는 인쇄되지 않습니다.</p><p><img src="Insert buttons_image.png" width="20"
height="19" alt="페이지 나누기 버튼">으로 삽입합니다. 여러 곳에 넣으려면 먼저 만든 페이지 나누기를 선택해 복사한 뒤 필요한 위치에 붙여넣으세요.</p>
@@ -0,0 +1,2 @@
<h2>Trilium 편집 단축키</h2><figure class="table"><table><thead><tr><th>동작</th><th>PC</th><th>Mac</th></tr></thead><tbody><tr><td>글자·문단 도구 모음 열기. 좌우 방향키로 이동하고 Enter로 적용</td><td>Alt+F10</td><td>⌥+F10</td></tr><tr><td><a href="#root/_help_QEAPj01N5f7w">외부 링크</a> 만들기</td><td>Ctrl+K</td><td>⌘+K</td></tr><tr><td><a href="#root/_help_QEAPj01N5f7w">내부 노트 링크</a> 만들기</td><td>Ctrl+L</td><td>⌘+L</td></tr><tr><td>현재 날짜와 시간 삽입</td><td>Alt+T</td><td>⌥+T</td></tr><tr><td>문단 들여쓰기</td><td>Tab</td><td>Tab</td></tr><tr><td>문단 내어쓰기</td><td>Shift+Tab</td><td>Shift+Tab</td></tr><tr><td>선택한 글자를 <a href="#root/_help_UYuUB1ZekNQU">단축키 모양</a>으로 표시</td><td>Ctrl+Alt+K</td><td>⌘+⌥+K</td></tr><tr><td><a class="reference-link" href="#root/_help_YfYAtQBcfo5V">수식</a> 삽입</td><td>Ctrl+M</td><td>⌘+M</td></tr><tr><td>문단이나 목록을 위로 이동</td><td>Alt+↑</td><td>⌥+↑</td></tr><tr><td>문단이나 목록을 아래로 이동</td><td>Alt+↓</td><td>⌥+↓</td></tr></tbody></table></figure><h2>공통 단축키</h2><p><a class="reference-link"
href="#root/_help_MI26XDLSAlCD">CKEditor</a>의 <a href="https://ckeditor.com/docs/ckeditor5/latest/features/accessibility.html#keyboard-shortcuts">공식 안내</a>를 바탕으로 한 목록입니다. Trilium의 구성에 따라 일부 기능은 지원되지 않거나 다른 단축키와 겹칠 수 있습니다. Mac의 기능키는 Fn을 함께 눌러야 할 수 있습니다.</p><h3>본문 편집</h3><figure class="table"><table><thead><tr><th>동작</th><th>PC</th><th>Mac</th></tr></thead><tbody><tr><td>새 문단</td><td>Enter</td><td>Enter</td></tr><tr><td>문단 안에서 줄바꿈</td><td>Shift+Enter</td><td>Shift+Enter</td></tr><tr><td>복사</td><td>Ctrl+C</td><td>⌘+C</td></tr><tr><td>붙여넣기</td><td>Ctrl+V</td><td>⌘+V</td></tr><tr><td>일반 텍스트로 붙여넣기</td><td>Ctrl+Shift+V</td><td>⌘+Shift+V</td></tr><tr><td>실행 취소</td><td>Ctrl+Z</td><td>⌘+Z</td></tr><tr><td>다시 실행</td><td>Ctrl+Y 또는 Ctrl+Shift+Z</td><td>⌘+Y 또는 ⌘+Shift+Z</td></tr><tr><td>굵게</td><td>Ctrl+B</td><td>⌘+B</td></tr><tr><td>대소문자 바꾸기</td><td>Shift+F3</td><td>Shift+F3</td></tr><tr><td>링크 만들기</td><td>Ctrl+K</td><td>⌘+K</td></tr><tr><td>링크나 문장 안의 코드 서식에서 벗어나기</td><td>← 두 번 또는 → 두 번</td><td>← 두 번 또는 → 두 번</td></tr><tr><td>모두 선택</td><td>Ctrl+A</td><td>⌘+A</td></tr><tr><td>문서에서 찾기</td><td>Ctrl+F</td><td>⌘+F</td></tr><tr><td>서식 복사</td><td>Ctrl+Shift+C</td><td>⌘+Shift+C</td></tr><tr><td>서식 붙여넣기</td><td>Ctrl+Shift+V</td><td>⌘+Shift+V</td></tr><tr><td>기울임</td><td>Ctrl+I</td><td>⌘+I</td></tr><tr><td>취소선</td><td>Ctrl+Shift+X</td><td>⌘+Shift+X</td></tr><tr><td>밑줄</td><td>Ctrl+U</td><td>⌘+U</td></tr><tr><td>방금 적용한 자동 서식 취소</td><td>Backspace</td><td>Backspace</td></tr></tbody></table></figure><h3>이미지와 표 등 블록 요소</h3><figure class="table"><table><thead><tr><th>동작</th><th>PC</th><th>Mac</th></tr></thead><tbody><tr><td>위젯 바로 뒤에 문단 삽입</td><td>Enter</td><td>Enter</td></tr><tr><td>위젯 바로 앞에 문단 삽입</td><td>Shift+Enter</td><td>Shift+Enter</td></tr><tr><td>위젯 앞에서 입력할 위치로 이동</td><td>↑ 또는 ←</td><td>↑ 또는 ←</td></tr><tr><td>위젯 뒤에서 입력할 위치로 이동</td><td>↓ 또는 →</td><td>↓ 또는 →</td></tr><tr><td>그림 설명 같은 내부 편집 영역에서 상위 위젯 선택</td><td>Tab 다음 Esc</td><td>Tab 다음 Esc</td></tr><tr><td>목록 항목 들여쓰기</td><td>Tab</td><td>Tab</td></tr><tr><td>목록 항목 내어쓰기</td><td>Shift+Tab</td><td>Shift+Tab</td></tr><tr><td>표의 다음 셀로 이동. 마지막 셀에서는 새 행 추가</td><td>Tab</td><td>Tab</td></tr><tr><td>표의 이전 셀로 이동</td><td>Shift+Tab</td><td>Shift+Tab</td></tr><tr><td>표 안에서 이동</td><td>방향키</td><td>방향키</td></tr></tbody></table></figure><h3>화면 조작</h3><figure class="table"><table><thead><tr><th>동작</th><th>PC</th><th>Mac</th></tr></thead><tbody><tr><td>팝업과 목록 및 대화상자 닫기</td><td>Esc</td><td>Esc</td></tr><tr><td>접근성 도움말 열기</td><td>Alt+0</td><td>⌥+0</td></tr><tr><td>입력란과 버튼 사이 이동</td><td>Tab 또는 Shift+Tab</td><td>Tab 또는 Shift+Tab</td></tr><tr><td>도구 모음으로 이동하거나 도구 모음 사이 전환</td><td>Alt+F10</td><td>⌥+F10</td></tr><tr><td>도구 모음과 메뉴 안에서 이동</td><td>방향키</td><td>방향키</td></tr><tr><td>편집기 밖의 다음·이전 요소로 이동</td><td>Tab 또는 Shift+Tab</td><td>Tab 또는 Shift+Tab</td></tr><tr><td>선택한 버튼 실행. 본문 관련 버튼은 실행 후 본문으로 초점 이동</td><td>Enter 또는 Space</td><td>Enter 또는 Space</td></tr><tr><td>열린 대화상자의 안팎으로 초점 이동</td><td>Ctrl+F6</td><td>⌘+F6</td></tr></tbody></table></figure>
@@ -0,0 +1,5 @@
<h2>외부 링크</h2><p><a href="https://en.wikipedia.org/wiki/South_China_Sea">위키백과의 남중국해 문서</a>처럼 외부 웹페이지로 연결하는 링크입니다. <a class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>의 <img src="2_Links_image.png" width="15" height="16" alt="링크 버튼">이나 <kbd>Ctrl</kbd>+<kbd>K</kbd>로 주소를 입력하고 Enter로 확정하세요. 주소를 붙여넣고 공백을 입력해 자동으로 만들 수도 있습니다.</p><p>다른 글자로 표시하려면 먼저 글자를 입력하고 선택한 뒤 링크 주소를 지정하세요. 선택한 글자 위에 주소를 붙여넣는 방법도 있습니다.</p><p>표시 글자는 나중에 바꿀 수 있습니다. 링크를 누른 뒤 <img
src="Links_image.png" width="18" height="18" alt="링크 편집 버튼">으로 주소를 수정하거나 <img src="3_Links_image.png"
width="18" height="18" alt="연결 해제 버튼">으로 링크를 없앱니다. 외부 링크를 두 번 클릭하거나 오른쪽 클릭 메뉴에서 새 탭으로 열기를 선택하면 이동합니다.</p><h2>노트 사이의 링크</h2><p><kbd>Ctrl</kbd>+<kbd>L</kbd>이나 <a class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>의 <img src="1_Links_image.png"
width="20" height="17" alt="노트 링크 버튼">을 누르고 대상 노트를 선택합니다. 없는 제목을 입력하고 하위 노트 만들기 및 연결을 선택해 새로 만들 수도 있습니다.</p><ul><li>참조 링크 — 대상 노트의 제목과 아이콘을 표시합니다. 제목을 직접 바꿀 수 없으며 대상 노트의 제목이 바뀌면 자동 반영됩니다.</li><li>일반 링크 — 대상 노트와 다른 표시 글자를 자유롭게 지정할 수 있습니다.</li></ul><p>두 번 클릭하면 노트를 엽니다. 마우스를 올리면 읽기 전용 미리보기를 확인할 수 있습니다.</p><h2>붙여넣기</h2><p><a
class="reference-link" href="#root/_help_oPVyFC7WL2Lp">노트 트리</a>에서 노트를 복사한 뒤 본문에 붙이면 참조 링크가 됩니다. 글자를 선택한 상태에서 붙이면 일반 링크가 됩니다. 외부 주소도 글자 위에 붙여 링크로 바꿀 수 있습니다. 서식 있는 링크를 복사했다면 원래 표시 글자와 주소가 유지됩니다.</p><h2>입력 중 연결</h2><p><code>@</code> 뒤에 노트 제목 일부를 입력하면 자동 완성이 나타납니다. 원하는 노트를 선택하고 Enter를 누르세요.</p><h2>노트 지도</h2><p>들어오는 링크와 나가는 링크는 <a href="#root/_help_BCkXAVs63Ttv">노트 지도</a>에서 시각적으로 확인할 수 있습니다.</p>
@@ -0,0 +1,6 @@
<p>텍스트 노트는 세 종류의 목록을 지원합니다.</p><ul><li><img src="7_Lists_image.png" width="17" height="13" alt="글머리 기호 목록"> 글머리 기호 목록</li><li><img src="8_Lists_image.png" width="18" height="16" alt="번호 목록"> 번호 목록</li><li><img src="10_Lists_image.png" width="19" height="13" alt="체크리스트"> 체크리스트</li></ul><p><img src="9_Lists_image.png"
width="10" height="6" alt="목록 옵션">을 누르면 사각형 기호나 로마 숫자 등으로 표시 방식을 바꿀 수 있습니다. 번호 목록은 시작 번호와 역순 번호 매기기도 설정할 수 있습니다.</p><h2>키보드 사용</h2><ul><li>줄 앞에 <code>*</code>나 <code>-</code>와 공백을 입력하면 글머리 기호 목록을 만듭니다.</li><li><code>1.</code>이나 <code>1)</code>와 공백을 입력하면 번호 목록을 만듭니다.</li><li><code>[ ]</code>는 미완료 체크리스트 항목이며 <code>[x]</code>는 완료 항목입니다.</li><li><kbd>Enter</kbd>는 새 항목을 만듭니다. <kbd>Shift</kbd>+<kbd>Enter</kbd>는 같은 항목 안에서 줄을 바꿉니다.</li><li><kbd>Enter</kbd>를 두 번 누르면 목록을 끝냅니다. 목록 사이의 빈 공간을 지우면 두 목록을 합칠 수 있습니다.</li><li><img src="2_Lists_image.png" width="17"
height="14" alt="들여쓰기 버튼">이나 <kbd>Tab</kbd>으로 하위 목록을 만들고 <kbd>Shift</kbd>+<kbd>Tab</kbd>으로 한 단계 올립니다. <a class="reference-link" href="#root/_help_dEHYtoWWi8ct">기타 기능의 들여쓰기</a>를 참고하세요.</li></ul><h2>목록 안에 제목과 코드 블록 넣기</h2><p>1. 목록을 만듭니다.</p><p><img src="6_Lists_image.png" alt="목록 안에 블록 넣기 1단계"></p><p>2. Enter로 새 항목을 만듭니다.</p><p><img src="4_Lists_image.png" alt="목록 안에 블록 넣기 2단계"></p><p>3. Backspace로 글머리 기호를 없앱니다. 커서는 목록 항목 안에 남습니다.</p><p><img src="5_Lists_image.png" alt="목록 안에 블록 넣기 3단계"></p><p>4. 코드 블록이나 표 등 원하는 요소를 넣습니다.</p><p><img class="image_resized" style="aspect-ratio:676/112;width:98.29%;"
src="1_Lists_image.png" width="676" height="112" alt="목록 안에 블록 넣기 4단계"></p><p>5. Enter를 눌러 요소 뒤의 빈 위치로 이동합니다.</p><p><img class="image_resized" style="aspect-ratio:675/129;width:94.22%;"
src="Lists_image.png" width="675" height="129" alt="목록 안에 블록 넣기 5단계"></p><p>6. Enter를 다시 누르면 다음 글머리 기호가 만들어집니다.</p><p><img class="image_resized" style="aspect-ratio:675/129;width:100%;" src="3_Lists_image.png"
width="675" height="129" alt="목록 안에 블록 넣기 6단계"></p><p>글머리 기호 목록과 번호 목록 및 체크리스트에서 같은 방법을 사용할 수 있습니다.</p>
@@ -0,0 +1,3 @@
<p>Markdown과 비슷한 문법을 입력하면 일부 서식이 자동으로 적용됩니다. <a class="reference-link"
href="#root/_help_iPIMuisry3hd">텍스트 노트</a> 자체가 Markdown 형식으로 저장된다는 뜻은 아닙니다.</p><p>복잡한 서식은 <a
href="#root/_help_dEHYtoWWi8ct">Markdown에서 가져오기</a>를 사용하세요. 문서 전체는 전용 <a href="#root/_help_Oau6X9rCuegd">가져오기 기능</a>을 이용할 수 있습니다.</p><ul><li><a href="#root/_help_Gr6xFaF6ioJ5">제목</a> — <code>##</code>부터 <code>######</code>까지 각각 제목 2~6에 해당합니다. 제목 1은 노트 제목에 사용합니다.</li><li><a class="reference-link" href="#root/_help_Gr6xFaF6ioJ5">기본 서식</a> — 굵게는 <code>**글자**</code> 또는 <code>__글자__</code>로 입력합니다. 기울임은 <code>*글자*</code> 또는 <code>_글자_</code>를 사용합니다. 취소선은 <code>~~글자~~</code>로 입력합니다.</li><li><a class="reference-link" href="#root/_help_S6Xx8QIWTV66">목록</a> — 줄 앞에 <code>*</code>나 <code>-</code>를 입력하고 공백을 넣으면 글머리 기호 목록이 됩니다. <code>1.</code>이나 <code>1)</code> 뒤에 공백을 넣으면 번호 목록이 됩니다. 체크리스트는 <code>[ ]</code>로 시작하며 완료된 항목은 <code>[x]</code>로 시작합니다.</li><li><a href="#root/_help_NwBbFdNZ9h7O">인용문</a> — <code>&gt;</code> 뒤에 공백을 넣습니다.</li><li><a class="reference-link" href="#root/_help_QxEyIjRBizuC">코드 블록</a> — 역따옴표 세 개를 입력합니다.</li><li><a href="#root/_help_dEHYtoWWi8ct">가로 구분선</a> — <code>---</code>를 입력합니다.</li><li><a href="#root/_help_NwBbFdNZ9h7O">안내 상자</a> — <code>!!! note</code>는 참고입니다. <code>!!! tip</code>은 도움말이며 <code>!!! important</code>는 중요입니다. <code>!!! caution</code>은 주의이며 <code>!!! warning</code>은 경고입니다. 그 밖의 글자를 <code>!!!</code> 뒤에 입력하면 해당 내용을 담은 참고 상자가 됩니다.</li><li><a href="#root/_help_CohkqWQC1iBv">이모지</a> — <code>:</code> 뒤에 이름을 입력하면 자동 완성이 나타납니다.</li></ul><p>자동 서식을 취소하려면 <kbd>Ctrl</kbd>+<kbd>Z</kbd>를 누르세요.</p>
@@ -0,0 +1,6 @@
<h2>들여쓰기</h2><p><img style="aspect-ratio:201/124;" src="6_Other features_image.png" width="201"
height="124" alt="들여쓰기 예시"></p><p><a
class="reference-link" href="#root/_help_nRhnJkTT8cPs">서식 도구 모음</a>에서 문단을 오른쪽으로 들여쓸 수 있습니다.</p><ul><li><img src="5_Other features_image.png" width="17" height="14" alt="들여쓰기 버튼">을 누를 때마다 한 단계씩 들여씁니다.</li><li><img src="1_Other features_image.png" width="17" height="14" alt="내어쓰기 버튼">은 들여쓰기를 줄입니다. 더 줄일 수 없으면 비활성화됩니다.</li><li><kbd>Tab</kbd>으로 들여쓰고 <kbd>Shift</kbd>+<kbd>Tab</kbd>으로 내어쓸 수도 있습니다. 커서가 문단이나 목록의 시작에 있지 않아도 작동합니다.</li><li><a class="reference-link"
href="#root/_help_S6Xx8QIWTV66">목록</a>에서도 사용할 수 있으며 하위 목록을 만드는 데 활용합니다.</li></ul><h2>Markdown 가져오기</h2><p>Markdown 원문을 복사한 뒤 <img src="2_Other features_image.png"
width="20" height="14" alt="Markdown 가져오기 버튼">을 누르면 서식을 적용해 삽입합니다. <code># 제목</code>처럼 작성된 원문을 사용해야 합니다. 이미 서식이 보이는 미리보기 화면의 내용을 복사했다면 일반 붙여넣기를 사용하세요. HTML 서식을 받아들입니다.</p><p>짧은 내용을 넣을 때 유용합니다. 문서 전체를 가져오려면 <a class="reference-link" href="#root/_help_Oau6X9rCuegd">Markdown 가져오기와 내보내기</a>를 사용하세요. 브라우저에서는 클립보드에 직접 접근하지 못하므로 별도 입력 화면이 나타납니다.</p><h2>하위 노트로 잘라내기</h2><p><img src="Other features_image.png" width="16" height="20" alt="하위 노트로 잘라내기 버튼">을 누르면 선택한 내용으로 하위 노트를 만듭니다. 자세한 내용은 <a class="reference-link" href="#root/_help_2x0ZAX9ePtzV">하위 노트로 잘라내기</a>를 참고하세요.</p><h2>찾기와 바꾸기</h2><p><img style="aspect-ratio:394/203;" src="4_Other features_image.png" width="394"
height="203" alt="찾기와 바꾸기 화면"></p><p><img src="3_Other features_image.png" width="18" height="17" alt="찾기와 바꾸기 버튼">을 누르면 편집기의 검색 창이 열립니다. <kbd>Ctrl</kbd>+<kbd>F</kbd>로도 열 수 있습니다.</p>
@@ -0,0 +1,9 @@
<p><a class="reference-link" href="#root/_help_iPIMuisry3hd">텍스트 노트</a>에서 표 버튼을 누르고 마우스로 행과 열 수를 선택하면 표를 만들 수 있습니다.</p><p><img style="aspect-ratio:176/204;" src="6_Tables_image.png" width="176"
height="204" alt="표의 행과 열 선택"></p><h2>서식 도구 모음</h2><p>표를 선택하면 전용 도구 모음이 나타납니다.</p><p><img
src="9_Tables_image.png" width="384" height="100" alt="표 서식 도구 모음"></p><h2>표 안에서 이동</h2><p>셀을 누르면 해당 셀을 편집합니다. 표 위아래의 <img src="10_Tables_image.png" width="28" height="27" alt="문단 삽입 버튼"> 버튼으로 빈 문단을 넣습니다. 왼쪽 위의 <img src="5_Tables_image.png" width="24" height="26" alt="표 선택 버튼"> 버튼으로 표 전체를 선택해 복사하거나 잘라낼 수 있습니다. 버튼을 끌어 표를 옮길 수도 있습니다.</p><p>방향키로 셀 사이를 이동합니다. Tab은 다음 셀로 이동하고 Shift+Tab은 이전 셀로 이동합니다. 마지막 셀에서 Tab을 누르면 새 행이 생깁니다. Shift를 누른 채 방향키를 사용하면 여러 셀을 선택합니다.</p><h2>셀 크기</h2><p>열 경계를 끌면 너비를 바꿀 수 있습니다. 행 높이는 기본적으로 마우스로 조절하지 않으며 셀 속성에서 지정합니다. <img src="8_Tables_image.png" width="19" height="19" alt="셀 속성 버튼"> 버튼으로 픽셀이나 백분율 단위의 정확한 크기를 입력할 수 있습니다.</p><h2>행과 열 추가</h2><p>기준 셀을 선택하고 <img
src="Tables_image.png" width="18" height="20" alt="열 메뉴 버튼"> 버튼에서 왼쪽 또는 오른쪽에 열 삽입을 선택합니다. <img src="7_Tables_image.png"
width="20" height="18" alt="행 메뉴 버튼"> 버튼에서는 위쪽 또는 아래쪽에 행 삽입을 선택합니다. 표 끝에서는 Tab으로도 새 행을 만듭니다.</p><h2>셀 합치기와 나누기</h2><p>여러 셀을 끌어서 선택하고 <img src="1_Tables_image.png" width="19" height="19" alt="셀 합치기 버튼"> 버튼을 누릅니다. 옆 화살표를 누르면 인접한 위·아래·왼쪽·오른쪽 셀과 합치거나 셀을 가로 또는 세로로 나누는 메뉴가 나옵니다.</p><h2>표 속성</h2><p><img style="aspect-ratio:312/311;" src="2_Tables_image.png" width="312"
height="311" alt="표 속성 창"></p><p><img src="12_Tables_image.png"
width="19" height="19" alt="표 속성 버튼"> 버튼으로 표 전체의 바깥 테두리 모양과 색 및 두께를 바꿉니다. 배경색과 너비 및 높이도 지정할 수 있습니다. 크기는 <code>%</code> 또는 <code>px</code> 단위를 붙여 입력합니다. 왼쪽이나 오른쪽 정렬에서는 본문이 표 옆으로 흐릅니다. 가운데 정렬에서는 본문이 표 옆에 배치되지 않습니다. 변경 사항을 유지하려면 저장을 누르세요.</p><h2>셀 속성</h2><p><img style="aspect-ratio:320/386;" src="3_Tables_image.png" width="320"
height="386" alt="셀 속성 창"></p><p><img src="11_Tables_image.png" width="19"
height="19" alt="셀 속성 버튼"> 버튼은 선택한 셀에 적용됩니다. 테두리와 배경색 및 크기를 지정하고 셀 안쪽 여백을 조절합니다. 글자의 가로 정렬은 왼쪽·가운데·오른쪽·양쪽 맞춤을 지원합니다. 세로 정렬은 위·가운데·아래를 지원합니다. 변경 사항을 유지하려면 저장을 누르세요.</p><h2>표 설명</h2><p><img src="4_Tables_image.png" width="18" height="17" alt="표 설명 버튼"> 버튼을 누르면 표 위에 설명을 넣을 수 있습니다.</p><h2>보이지 않는 테두리</h2><p>글이나 <a href="#root/_help_mT0HEkOsz6i1">이미지</a>를 여러 칸으로 배치할 때 활용할 수 있습니다. 원하는 크기의 표를 만들고 전체를 선택합니다. 표 속성과 셀 속성에서 모두 테두리를 실선으로 지정하고 색을 <code>transparent</code>로 설정한 다음 두께를 <code>1px</code>로 입력합니다.</p><h2>Markdown으로 가져오기와 내보내기</h2><p>단순한 표는 <code>|</code>로 칸을 구분하는 GitHub 방식의 Markdown으로 내보냅니다. HTML 요소나 이미지 또는 별도 크기 설정이 들어간 복잡한 표는 HTML로 내보내 서식 손실을 줄입니다.</p>
@@ -0,0 +1,2 @@
<p><a class="reference-link" href="#root/_help_6f9hih2hXXZk">코드 노트</a>에는 프로그램 코드를 저장하고 구문 강조를 적용할 수 있습니다. JavaScript 코드 노트는 Trilium 안에서 실행할 수도 있습니다. <a class="reference-link" href="#root/_help_GLks18SNjxmC">스크립트 API</a>와 함께 사용하면 기능을 확장할 수 있습니다.</p><h2>구조 이해하기</h2><p>Trilium은 두 부분으로 이루어진 웹 애플리케이션입니다. 프런트엔드는 브라우저에서 HTML과 CSS 및 JavaScript로 화면을 표시하고 사용자 입력을 처리합니다. 백엔드는 Node.js에서 실행되며 노트 저장과 암호화 등을 담당합니다. 두 영역 모두 JavaScript를 사용하지만 역할과 API는 다릅니다.</p><h2>활용 예</h2><p><a class="reference-link" href="#root/_help_TjLYAo3JMO8X">새 할 일 실행 버튼</a>을 만드는 예제를 참고하세요.</p><h2>동작 처리</h2><p>노트를 데이터베이스에 저장하는 일은 백엔드가 담당합니다. 프런트엔드에서 백엔드에 노트 생성을 요청한 뒤 만들어진 노트를 열면 사용자가 제목과 속성을 입력할 수 있습니다.</p><h2>스크립트 실행</h2><p>코드 노트의 실행 버튼으로 스크립트를 실행할 수 있습니다. 다만 스크립트로 추가한 화면 요소는 앱을 다시 시작하면 사라집니다. 매번 자동으로 추가하려면 시작할 때 스크립트를 실행하도록 지정해야 합니다.</p><p><code>#run=frontendStartup</code> <a href="#root/_help_zEY4DaJG4YT5">라벨</a>이 있는 노트는 프런트엔드가 시작될 때 실행됩니다. <a href="#root/_help_RDslemsQ6gCp">모바일 화면</a>에서는 대신 <code>#run=mobileStartup</code>을 지정하세요.</p><h2>더 살펴보기</h2><ul><li><a class="reference-link"
href="#root/_help_5668rwcirq1t">고급 활용 예제</a></li><li><a class="reference-link" href="#root/_help_GPERMystNGTB">이벤트</a></li><li><a class="reference-link" href="#root/_help_GLks18SNjxmC">스크립트 API</a></li></ul>
@@ -0,0 +1,56 @@
<p>간단한 위젯을 만들고 버튼을 눌렀을 때 메시지를 표시하는 예제입니다. 원문에서 누락된 HTML 템플릿을 아래 예제에 보완했습니다.</p><h3>1. 기본 구조</h3><pre><code class="language-text-x-trilium-auto">class MyWidget extends api.BasicWidget {
get position() { return 1; }
get parentWidget() { return "left-pane"; }
doRender() {
this.$widget = $('&lt;div id="my-widget"&gt;&lt;/div&gt;');
return this.$widget;
}
}
module.exports = new MyWidget();</code></pre><p>프런트엔드 JavaScript 코드 노트를 만들고 위 코드를 넣으세요. <code>#widget</code> <a href="#root/_help_zEY4DaJG4YT5">속성</a>을 <a href="#root/_help_BFs8mudNFgCS">노트</a>에 지정한 뒤 창을 새로고침합니다.</p><p>개발자 도구에서 <code>document.querySelector("#my-widget")</code>로 요소가 있는지 확인할 수 있습니다. 결과가 <code>null</code>이면 <a href="#root/_help_BFs8mudNFgCS">노트</a>의 <code>#widget</code> <a href="#root/_help_zEY4DaJG4YT5">속성</a>과 코드 오류를 확인하세요.</p><h3>2. 버튼 추가</h3><pre><code class="language-text-x-trilium-auto">const template = `&lt;div id="my-widget"&gt;&lt;button&gt;인사하기&lt;/button&gt;&lt;/div&gt;`;
class MyWidget extends api.BasicWidget {
get position() {return 1;}
get parentWidget() {return "left-pane"}
doRender() {
this.$widget = $(template);
return this.$widget;
}
}
module.exports = new MyWidget();</code></pre><p>다시 불러오면 왼쪽 영역에 버튼이 나타납니다.</p><h3>3. 모양과 위치</h3><p>Trilium에 포함된 <a href="https://boxicons.com">Boxicons</a>를 사용해 아이콘을 표시할 수 있습니다.</p><pre><code class="language-text-x-trilium-auto">const template = `&lt;div id="my-widget"&gt;&lt;button title="인사하기" aria-label="인사하기"&gt;&lt;i class="bx bxs-magic-wand"&gt;&lt;/i&gt;&lt;/button&gt;&lt;/div&gt;`;</code></pre><p>CSS로 왼쪽 아래에 배치합니다.</p><pre><code class="language-text-x-trilium-auto">class MyWidget extends api.BasicWidget {
get position() { return 1; }
get parentWidget() { return "left-pane"; }
doRender() {
this.$widget = $(template);
this.cssBlock(`#my-widget {
position: absolute;
bottom: 40px;
left: 60px;
z-index: 1;
}`);
return this.$widget;
}
}
module.exports = new MyWidget();</code></pre><h3>4. 클릭 동작</h3><p><a href="#root/_help_GLks18SNjxmC">스크립트 API</a>의 <code>api.showMessage</code>를 사용합니다.</p><pre><code class="language-text-x-trilium-auto">class MyWidget extends api.BasicWidget {
get position() { return 1; }
get parentWidget() { return "left-pane"; }
doRender() {
this.$widget = $(template);
this.cssBlock(`#my-widget {
position: absolute;
bottom: 40px;
left: 60px;
z-index: 1;
}`);
this.$widget.find("button").on("click", () =&gt; api.showMessage("안녕하세요!"));
return this.$widget;
}
}
module.exports = new MyWidget();</code></pre><p>새로고침한 뒤 버튼을 누르면 안녕하세요!라는 메시지가 나타납니다.</p>
@@ -0,0 +1,77 @@
<p>이 위젯은 새 설치의 <a class="reference-link"
href="#root/_help_6tZeKvSHEUiB">사용 예제</a>에도 포함됩니다. 프런트엔드 JavaScript <a class="reference-link" href="#root/_help_6f9hih2hXXZk">코드 노트</a>를 만들고 <code>#widget</code> 라벨을 지정하세요.</p><pre><code class="language-text-x-trilium-auto">/*
* 현재 텍스트 노트의 단어 수와 글자 수를 표시하는 위젯입니다.
* 사용할 노트에 wordCount 라벨을 지정하세요. 상속을 켜면 하위 트리 전체에 적용됩니다.
*
* 책 예제와 그 하위 노트에서 확인할 수 있습니다.
*/
const TPL = `&lt;div style="padding: 10px; border-top: 1px solid var(--main-border-color); contain: none;"&gt;
&lt;strong&gt;단어 수: &lt;/strong&gt;
&lt;span class="word-count"&gt;&lt;/span&gt;
&amp;nbsp;
&lt;strong&gt;글자 수: &lt;/strong&gt;
&lt;span class="character-count"&gt;&lt;/span&gt;
&lt;/div`;
class WordCountWidget extends api.NoteContextAwareWidget {
get position() { return 100; } // 값이 클수록 아래쪽이나 오른쪽에 배치합니다.
get parentWidget() { return 'center-pane'; }
doRender() {
this.$widget = $(TPL);
this.$wordCount = this.$widget.find('.word-count');
this.$characterCount = this.$widget.find('.character-count');
return this.$widget;
}
async refreshWithNote(note) {
if (note.type !== 'text' || !note.hasLabel('wordCount')) {
// 텍스트 노트에 wordCount 라벨이 있을 때만 표시합니다.
this.toggleInt(false); // 숨기기
return;
}
this.toggleInt(true); // 표시하기
const {content} = await note.getNoteComplement();
const text = $(content).text(); // 서식 없이 글자만 가져오기
const counts = this.getCounts(text);
this.$wordCount.text(counts.words);
this.$characterCount.text(counts.characters);
}
getCounts(text) {
const chunks = text
.split(/[\s-+:,/\\]+/)
.filter(chunk =&gt; chunk !== '');
let words;
if (chunks.length === 1 &amp;&amp; chunks[0] === '') {
words = 0;
}
else {
words = chunks.length;
}
const characters = chunks.join('').length;
return {words, characters};
}
async entitiesReloadedEvent({loadResults}) {
if (loadResults.isNoteContentReloaded(this.noteId)) {
this.refresh();
}
}
}
module.exports = new WordCountWidget();</code></pre><p>변경한 뒤 화면 구성을 다시 만들도록 <a href="#root/_help_s8alTXmpFR61">Trilium을 새로고침</a>하세요. 노트 아래에 다음과 같이 표시됩니다.</p><p><img style="aspect-ratio:792/603;" src="Word count widget_image.png" width="792"
height="603" alt="단어 수와 글자 수 위젯"></p><p>예제는 공백과 일부 기호로 나눈 조각을 단어로 셉니다. 한국어 형태소 분석에 따른 단어 수는 아닙니다.</p>
@@ -0,0 +1,2 @@
<p><a href="#root/_help_CdNpE2pqjmI6">스크립트</a>는 이벤트에 따라 실행할 수 있습니다. 노트에 관계로 연결하는 항목별 이벤트는 백엔드 JavaScript 코드 노트를 대상으로 합니다.</p><h2>전체 이벤트</h2><p><code>run</code> 라벨에 실행 시점을 지정합니다.</p><ul><li><code>frontendStartup</code> — 일반 프런트엔드를 시작하거나 새로고침할 때 실행합니다.</li><li><code>mobileStartup</code> — 모바일 프런트엔드를 시작하거나 새로고침할 때 실행합니다.</li><li><code>backendStartup</code> — 백엔드를 시작할 때 실행합니다.</li><li><code>hourly</code> — 백엔드에서 매시간 실행합니다. <code>runAtHour</code>로 특정 시각만 지정할 수 있습니다.</li><li><code>daily</code> — 백엔드에서 하루에 한 번 실행합니다.</li></ul><p><code>runOnInstance</code>로 특정 <a class="reference-link"
href="#root/_help_c5xB8m4g2IY6">Trilium 인스턴스</a>에서만 실행하도록 지정할 수 있습니다. <code>runAtHour</code>는 <code>#run=hourly</code>와 함께 사용하며 여러 번 지정하면 하루에 여러 시각을 선택할 수 있습니다.</p><h2>항목별 이벤트</h2><p>다음 <a href="#root/_help_zEY4DaJG4YT5">관계</a>를 노트에 직접 지정하거나 상속하면 관련 작업이 발생할 때 스크립트를 실행합니다.</p><table><thead><tr><th>관계</th><th>실행 시점</th></tr></thead><tbody><tr><td><code>runOnNoteCreation</code></td><td>백엔드에서 노트를 만들 때입니다. 하위 트리의 모든 새 노트에 적용하려면 상위 노트에 관계를 지정하고 상속을 켭니다.</td></tr><tr><td><code>runOnChildNoteCreation</code></td><td>이 관계가 있는 노트 바로 아래에 새 노트를 만들 때입니다.</td></tr><tr><td><code>runOnNoteTitleChange</code></td><td>제목을 바꿀 때입니다. 노트 생성도 포함합니다.</td></tr><tr><td><code>runOnNoteContentChange</code></td><td>본문을 바꿀 때입니다. 노트 생성도 포함합니다.</td></tr><tr><td><code>runOnNoteChange</code></td><td>노트 속성을 변경할 때입니다. 생성은 포함하지만 본문 변경은 포함하지 않습니다.</td></tr><tr><td><code>runOnNoteDeletion</code></td><td>노트를 삭제할 때입니다.</td></tr><tr><td><code>runOnBranchCreation</code></td><td>상위 노트와 하위 노트 사이의 가지를 만들 때입니다. 복제나 이동 과정에서도 발생합니다.</td></tr><tr><td><code>runOnBranchChange</code></td><td>가지를 수정할 때입니다. 0.62부터 지원합니다.</td></tr><tr><td><code>runOnBranchDeletion</code></td><td>가지를 삭제할 때입니다. 이동할 때 기존 위치의 연결을 제거하는 경우도 포함합니다.</td></tr><tr><td><code>runOnAttributeCreation</code></td><td>해당 노트에 속성을 만들 때입니다.</td></tr><tr><td><code>runOnAttributeChange</code></td><td>해당 노트의 속성을 바꾸거나 삭제할 때입니다.</td></tr></tbody></table>
@@ -0,0 +1,29 @@
<p>기본 <a class="reference-link"
href="#root/_help_xYjQUYhpbUEW">할 일 관리</a>에 새 작업을 만들고 여는 <a class="reference-link"
href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a> 버튼을 추가합니다.</p><p><img src="New Task launcher button_i.png" alt="새 할 일 버튼"></p><h2>코드 노트 준비</h2><p>프런트엔드 JavaScript <a class="reference-link" href="#root/_help_6f9hih2hXXZk">코드 노트</a>를 만들고 <a class="reference-link"
href="#root/_help_zEY4DaJG4YT5">속성</a>에 <code>#run=frontendStartup</code>을 지정합니다.</p><h2>전체 코드</h2><pre><code class="language-application-javascript-env-backend">api.addButtonToToolbar({
title: "새 할 일",
icon: "task",
shortcut: "alt+n",
action: async () =&gt; {
const taskNoteId = await api.runOnBackend(() =&gt; {
const todoRootNote = api.getNoteWithLabel("taskTodoRoot");
const resp = api.createTextNote(todoRootNote.noteId, "새 할 일", "")
return resp.note.noteId;
});
await api.waitUntilSynced();
await api.activateNewNote(taskNoteId);
}
});</code></pre><h2>확인</h2><p>시작할 때 실행하도록 지정했으므로 <a
href="#root/_help_s8alTXmpFR61">애플리케이션을 새로고침</a>하면 버튼이 나타납니다.</p><h2>코드 설명</h2><pre><code class="language-application-javascript-env-frontend">api.addButtonToToolbar({
title: "새 할 일",
icon: "task",
shortcut: "alt+n",
action: async () =&gt; {
// [...]
}
});</code></pre><p><a href="#root/_help_yIhgI5H7A2Sm">프런트엔드 API</a>로 <a class="reference-link" href="#root/_help_xYmIYSP6wE3F">실행 도구 모음</a>에 버튼을 추가합니다. 제목과 bx- 접두사를 제외한 아이콘 이름 및 선택적인 단축키를 지정합니다. action은 클릭할 때 실행할 함수입니다.</p><pre><code class="language-application-javascript-env-frontend">const taskNoteId = await api.runOnBackend(() =&gt; {
// 아래에서 설명하는 백엔드 처리입니다.
return resp.note.noteId;
});</code></pre><p>노트 생성은 서버의 역할이므로 백엔드에서 실행합니다. 반환한 노트 ID는 프런트엔드에서 받을 수 있습니다.</p><pre><code class="language-application-javascript-env-frontend">const todoRootNote = api.getNoteWithLabel("taskTodoRoot");</code></pre><p><code>#taskTodoRoot</code> <a href="#root/_help_zEY4DaJG4YT5">라벨</a>로 <a class="reference-link" href="#root/_help_xYjQUYhpbUEW">할 일 관리</a>의 저장 위치를 찾습니다. 대상이 없으면 null일 수 있지만 이 기본 예제에는 오류 처리가 생략되어 있습니다.</p><pre><code class="language-application-javascript-env-frontend">const resp = api.createTextNote(todoRootNote.noteId, "새 할 일", "")</code></pre><p>첫 번째 인수는 상위 노트 ID입니다. 두 번째는 새 할 일이라는 제목이며 세 번째는 빈 본문입니다.</p><pre><code class="language-application-javascript-env-frontend">await api.waitUntilSynced();</code></pre><p>서버에서 만든 노트가 프런트엔드에도 반영될 때까지 기다립니다.</p><pre><code class="language-application-javascript-env-frontend">await api.activateNewNote(taskNoteId);</code></pre><p>생성된 노트의 <a href="#root/_help_m1lbrzyKDaRB">ID</a>로 새 노트를 엽니다.</p>
@@ -0,0 +1,2 @@
<h2>프런트엔드 API</h2><p>일반 스크립트는 현재 앱과 노트의 문맥에서 실행됩니다. 위젯은 객체를 내보내 화면 구성 요소로 사용합니다. 두 경우 모두 전역 변수 <code>api</code>로 프런트엔드 API를 사용할 수 있습니다. <a href="#root/_help_GLks18SNjxmC">스크립트 API</a>를 참고하세요.</p><h2>스크립트</h2><p>실행 버튼으로 실행하거나 <a href="#root/_help_zEY4DaJG4YT5">속성</a>으로 실행 시점을 지정할 수 있습니다.</p><h3>전체 이벤트</h3><p><code>#run</code> 값으로 <code>frontendStartup</code>은 일반 화면 시작을 지정하며 <code>mobileStartup</code>은 모바일 화면 시작을 지정합니다. <code>backendStartup</code>은 백엔드 시작입니다. <code>hourly</code>와 <code>daily</code>는 백엔드에서 매시간 또는 매일 실행합니다.</p><h3>항목별 이벤트</h3><p>다음 <a href="#root/_help_zEY4DaJG4YT5">관계</a>로 스크립트를 연결하거나 상속하면 해당 노트에서 이벤트가 발생할 때 실행합니다. 이 이벤트는 백엔드 스크립트를 대상으로 합니다.</p><ul><li><code>runOnNoteCreation</code> — 노트 생성</li><li><code>runOnNoteTitleChange</code> — 제목 변경. 생성 포함</li><li><code>runOnNoteContentChange</code> — 본문 변경. 생성 포함</li><li><code>runOnNoteChange</code> — 노트 변경. 생성 포함</li><li><code>runOnNoteDeletion</code> — 노트 삭제</li><li><code>runOnBranchCreation</code> — 복제나 이동 등에 따른 가지 생성</li><li><code>runOnBranchDeletion</code> — 이동 등에 따른 기존 가지 삭제</li><li><code>runOnChildNoteCreation</code> — 직접 하위 노트 생성</li><li><code>runOnAttributeCreation</code> — 속성 생성</li><li><code>runOnAttributeChange</code> — 속성 변경</li></ul><h2>위젯</h2><p><a href="https://triliumnext.github.io/Notes/frontend_api/BasicWidget.html">BasicWidget</a>이나 그 하위 클래스를 확장합니다. 새 인스턴스를 <code>module.exports</code>에 지정하고 <code>parentWidget</code>과 정수 <code>position</code>으로 위치를 정합니다. 코드 노트에는 <code>#widget</code> 라벨이 필요합니다.</p><p><a href="https://triliumnext.github.io/Notes/frontend_api/BasicWidget.html">BasicWidget</a>과 <a
href="https://triliumnext.github.io/Notes/frontend_api/NoteContextAwareWidget.html">NoteContextAwareWidget</a>은 <code>doRender()</code>에서 <code>this.$widget</code>을 만들고 반환합니다. <a href="https://triliumnext.github.io/Notes/frontend_api/RightPanelWidget.html">RightPanelWidget</a>은 이 처리를 제공하므로 <code>doRenderBody()</code>에서 본문을 반환합니다.</p><h3>배치 영역</h3><ul><li><code>left-pane</code> — 노트 트리가 있는 왼쪽 영역</li><li><code>center-pane</code> — 노트와 분할 보기가 있는 가운데 영역</li><li><code>note-detail-pane</code> — 각 노트와 함께 표시하는 영역. 분할 시 여러 번 나타날 수 있습니다.</li><li><code>right-pane</code> — 열린 노트의 오른쪽 영역</li></ul><p><a href="#root/_help_SynTBQiBsdYJ">위젯 기본 예제</a>에서 구현 과정을 확인하세요.</p>
@@ -0,0 +1,71 @@
<h2>모바일과 데스크톱 구분</h2><p><code>body.mobile</code>과 <code>body.desktop</code>으로 화면 유형을 구분합니다.</p><pre><code class="language-text-css">body.mobile #root-widget {
/* 모바일 화면에 적용할 스타일 */
}
body.desktop #root-widget {
/* 데스크톱 화면에 적용할 스타일 */
}</code></pre><p>모바일의 태블릿 배치는 미디어 쿼리로 구분합니다.</p><pre><code class="language-text-css">@media (max-width: 991px) {
#launcher-pane {
/* 모바일 배치에 적용할 스타일 */
}
}
@media (min-width: 992px) {
#launcher-pane {
/* 태블릿과 데스크톱 배치에 적용할 스타일 */
}
}</code></pre><h2>가로 배치와 세로 배치</h2><p>세로 배치에서는 실행 도구 모음이 왼쪽에 있습니다. 가로 배치에서는 위쪽에 있고 탭이 전체 너비를 사용합니다. <code>body</code>의 클래스로 구분합니다.</p><pre><code class="language-text-x-trilium-auto">body.layout-vertical #left-pane {
/* 세로 배치에 적용할 스타일 */
}
body.layout-horizontal #center-pane {
/* 가로 배치에 적용할 스타일 */
}</code></pre><p><code>#horizontal-main-container</code>와 <code>#vertical-main-container</code>는 선택한 배치와 관계없이 DOM에 존재합니다. 해당 컨테이너로 본문 영역의 배경을 꾸밀 수 있습니다.</p><h2>운영체제와 데스크톱 앱 구분</h2><p>Windows에는 <code>body.platform-win32</code>를 사용하고 macOS에는 <code>body.platform-darwin</code>을 사용합니다. Electron 데스크톱 앱에만 적용하려면 다음과 같이 작성합니다.</p><pre><code class="language-text-x-trilium-auto">body.electron {
background: blue;
}</code></pre><h3>시스템 제목 표시줄</h3><p>시스템 제목 표시줄 사용 여부도 <code>body</code>에서 구분합니다.</p><pre><code class="language-text-x-trilium-auto">body.electron.native-titlebar {
/* 시스템 제목 표시줄에 적용할 스타일 */
}
body.electron:not(.native-titlebar) {
/* 사용자 제목 표시줄에 적용할 스타일 */
}</code></pre><h3>시스템 창 버튼</h3><p>시스템 제목 표시줄을 끈 상태에서도 운영체제의 창 버튼을 사용할 수 있습니다. 구현 과정과 화면은 <a href="https://github.com/TriliumNext/Notes/pull/702">시스템 창 버튼 구현 기록</a>을 참고하세요.</p><p>Windows에서 버튼 영역의 글자색과 배경색은 RGB 16진수 값으로 지정합니다.</p><pre><code class="language-text-x-trilium-auto">body {
--native-titlebar-foreground: #ffffff;
--native-titlebar-background: #ff0000;
}</code></pre><p>RGBA 값으로 투명도를 지정할 수도 있습니다. 이 경우 마우스를 올렸을 때의 색 표현이 제한될 수 있습니다.</p><pre><code class="language-text-x-trilium-auto">body {
--native-titlebar-background: #ff0000aa;
}</code></pre><p>값은 창을 만들 때 읽으며 이후에는 밝은 모드와 어두운 모드 설정이 바뀔 때 갱신됩니다.</p><p>macOS에서는 시스템 제목 표시줄을 끄면 신호등 모양의 창 버튼이 기본으로 나타납니다. 위치는 다음과 같이 조정합니다.</p><pre><code class="language-text-css">body {
--native-titlebar-darwin-x-offset: 12;
--native-titlebar-darwin-y-offset: 14 !important;
}</code></pre><h3>Windows의 Mica 배경 효과</h3><p>Windows 11에서 <code>body</code>의 <code>--background-material</code>로 배경 효과를 설정합니다.</p><pre><code class="language-text-css">body.electron.platform-win32 {
--background-material: tabbed;
}</code></pre><p><code>tabbed</code>는 가로 배치에 적합하고 <code>mica</code>는 세로 배치에 적합합니다. 효과가 보이려면 상위 요소부터 하위 요소까지 배경을 투명하거나 반투명하게 해야 합니다. TriliumNext 테마를 참고하세요.</p><h2>탭 아이콘과 작업 공간 색상</h2><p>작업 공간 아이콘 대신 노트 아이콘을 표시하려면 다음 변수를 설정합니다.</p><pre><code class="language-text-css">:root {
--tab-note-icons: true;
}</code></pre><p>탭에서 작업 공간을 확대해 보고 있을 때 해당 작업 공간의 색을 가져올 수 있습니다. 다음 예제는 탭 전체 대신 위쪽의 가는 선에 색을 적용합니다.</p><pre><code class="language-text-css">.note-tab .note-tab-wrapper {
--tab-background-color: initial !important;
}
.note-tab .note-tab-wrapper::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background-color: var(--workspace-tab-background-color);
}</code></pre><h2>사용자 글꼴</h2><p><a href="#root/_help_d3fAXQ2diepH">사용자 리소스 제공자</a>를 사용합니다. 글꼴을 가져와 <code>#customResourceProvider=fonts/myfont.ttf</code>를 지정하고 CSS에서 <code>/custom/fonts/myfont.ttf</code>로 참조합니다. 서버가 루트 경로가 아닌 곳에서 실행된다면 <code>../../../custom/fonts/myfont.ttf</code>를 사용합니다.</p><h2>밝은 테마와 어두운 테마</h2><p>밝은 테마는 다음과 같이 선언합니다. 어두운 테마는 값을 <code>dark</code>로 지정합니다.</p><pre><code class="language-text-css">:root {
--theme-style: light;
}</code></pre><p><code>prefers-color-scheme</code>에 따라 자동 전환하는 테마는 현재 모드의 <code>--theme-style</code>과 함께 다음 변수도 지정합니다.</p><pre><code class="language-text-css">:root {
--theme-style-auto: true;
}</code></pre><p>Electron 앱이 운영체제에 색상 모드를 전달할 때 사용하는 정보입니다. Windows의 배경 효과 등에도 영향을 줍니다.</p>
@@ -0,0 +1,5 @@
<p>이 문서는 Trilium 사용 중 발생하는 문제를 해결하는 기본 절차입니다.</p><h2>먼저 다시 불러오기</h2><p>화면 문제는 <kbd>Ctrl</kbd>+<kbd>R</kbd>로 프런트엔드를 다시 불러오면 해결될 수 있습니다. 계속되거나 백엔드 문제라면 앱 전체를 다시 시작하세요. 데스크톱 앱은 닫았다 다시 열고 Docker는 컨테이너를 재시작합니다.</p><h2>특정 노트를 열 때 종료되는 경우</h2><p>잘못된 스크립트가 있는 노트를 시작할 때 다시 열면 오류가 반복될 수 있습니다. <code>TRILIUM_START_NOTE_ID</code>로 처음 열 노트를 지정해 탭을 초기화할 수 있습니다.</p><pre><code class="language-text-x-trilium-auto">TRILIUM_START_NOTE_ID=root ./trilium</code></pre><h2>시작 스크립트 문제</h2><p>시작 스크립트나 <a href="#root/_help_MgibgPcfeuGz">사용자 위젯</a> 때문에 실행되지 않으면 안전 모드로 시작하세요.</p><pre><code class="language-text-x-trilium-auto">TRILIUM_SAFE_MODE=true ./trilium</code></pre><p>배포판에 따라 <code>trilium-safe-mode.bat</code>나 <code>trilium-safe-mode.sh</code>가 제공됩니다. 실행한 뒤 원인이 된 노트를 찾아 수정하거나 제거하세요.</p><h2>일관성 검사</h2><p>Trilium은 노트의 상위 연결 등 데이터베이스의 논리 구조를 주기적으로 확인합니다. 오류 알림이 나오면 문제를 보고하고 필요할 경우 <a href="#root/_help_x59R8J8KV5Bp">익명화한 데이터베이스</a>를 제공하세요.</p><h2>백업 복원</h2><p>문제가 심각하다면 <a href="#root/_help_ODY7qQn5m2FT">백업에서 복원</a>할 수 있습니다.</p><h2>비밀번호를 잊은 경우</h2><p>보호된 노트는 비밀번호 없이 복구할 수 없습니다. 아래는 보호하지 않은 노트에 다시 접근하기 위한 원문의 복구 절차입니다. <a href="#root/_help_wX4HbRucYSDD">데이터베이스</a>가 있는 <a
href="#root/_help_tAassRL4RSQL">데이터 폴더</a>를 먼저 백업하고 앱을 종료한 뒤 <a href="https://sqlitebrowser.org/">SQLite 편집기</a>로 document.db를 엽니다.</p><pre><code class="language-text-x-trilium-auto">UPDATE options SET value = '77/twC5O00cuQgNC63VK32qOKKYwj21ev3jZDXoytVU=' WHERE name = 'passwordVerificationSalt';
UPDATE options SET value = '710BMasZCAgibzIc07X4P9Q4TeBd4ONnqJOho+pWcBM=' WHERE name = 'passwordDerivedKeySalt';
UPDATE options SET value = 'Eb8af1/T57b89lCRuS97tPEl4CwxsAWAU7YNJ77oY+s=' WHERE name = 'passwordVerificationHash';
UPDATE options SET value = 'QpC8XoiYYeqHPtHKRtbNxfTHsk+pEBqVBODYp0FkPBa22tlBBKBMigdLu5GNX8Uu' WHERE name = 'encryptedDataKey';</code></pre><p>변경 사항을 저장하면 로그인 비밀번호가 <code>password</code>로 바뀝니다. 이 절차로 기존 보호 노트가 복구되는 것은 아닙니다. 접근 가능한 노트를 내보내 새 데이터베이스로 옮기거나 기존 DB를 계속 사용한다면 설정에서 즉시 새 비밀번호를 지정하세요.</p><h2>오류 보고</h2><p><a href="https://github.com/TriliumNext/Notes/issues">GitHub 문제 보고</a>에 발생 상황을 적고 <a href="#root/_help_qzNzp9LYQyPT">오류 로그</a> 안내에 따라 필요한 정보를 함께 제공하세요.</p>