# NoteRich 작업공간 및 고급 검색 튜토리얼
정보 과부하가 일반적인 이 시대에, 디지털 정보를 효율적으로 관리하는 것은 사치가 아니라 필수입니다. **NoteRich**는 지식 관리 및 검색 방식을 혁신하는 두 가지 강력한 기능을 제공합니다: **분리된 다중 작업공간**과 **고급 의미 검색**입니다.
이 튜토리얼을 통해 이러한 기능을 마스터하고, 필요에 따라 확장 가능한 맞춤형 지식 관리 시스템을 구축할 수 있습니다.
---
## 1부: NoteRich의 작업공간 이해
### 작업공간이란 무엇인가요?
생활의 여러 영역에 각각 별도의 노트북을 사용하는 것을 상상해 보세요. 업무 프로젝트용, 개인 일기용, 연구 노트용이 각각 있습니다. **NoteRich**의 작업공간은 이러한 조직적 명확성을 디지털 환경에 도입합니다.
NoteRich의 각 작업공간은 노트를 저장하는 **완전히 분리된 컨테이너**이며, 다음과 같은 기능을 갖추고 있습니다:
- 독립적인 노트 데이터베이스
- 별도의 검색 인덱스
- 고유한 URL 라우팅
- 분리된 AI 메모 컨텍스트
```mermaid
graph TB
subgraph "NoteRich Application"
A[Workspace Router] --> B[Workspace: Work]
A --> C[Workspace: Personal]
A --> D[Workspace: Research]
B --> B1[Notes Database]
B --> B2[Search Index]
B --> B3[AI Context]
C --> C1[Notes Database]
C --> C2[Search Index]
C --> C3[AI Context]
D --> D1[Notes Database]
D --> D2[Search Index]
D --> D3[AI Context]
end
style A fill:#000,stroke:#000,color:#fff
style B fill:#fafafa,stroke:#eaeaea,color:#333
style C fill:#fafafa,stroke:#eaeaea,color:#333
style D fill:#fafafa,stroke:#eaeaea,color:#333
```
### 여러 작업공간을 사용해야 하는 이유는 무엇인가요?
| 시나리오 | 장점 |
|----------|---------|
| **직장과 개인의 분리** | 전문적인 노트를 개인 일기와 완전히 분리함 |
| **프로젝트 분리** | 특정 고객이나 장기 프로젝트를 위한 작업공간을 할당함 |
| **컨텍스트 전환** | 방해받지 않고 다양한 컨텍스트를 즉시 전환함 |
| **개인정보 관리** | 관련 없는 내용을 노출시키지 않고 특정 작업공간을 공유함 |
| **성능 최적화** | 집중된 작업공간으로 나누면 대규모 지식베이스도 빠르게 유지됨 |
---
## 2부: 작업공간 간 이동하기
### 작업공간 라우터 시스템
NoteRich는 사용자의 작업공간 선호도를 기억하고 원활한 이동을 제공하는 지능형 라우팅 시스템을 사용합니다.
#### URL 기반 작업공간 식별
각 작업공간은 브라우저의 URL에 반영되는 고유 식별자를 가집니다:
```
https://noterich.app/#workspace=work-projects
https://noterich.app/#workspace=personal-journal
https://noterich.app/#workspace=research-notes
```
작업공간 ID는:
- **URL-안전**: 알파벳과 하이픈, 스트립만 허용
- **지속적**: 브라우저의 로컬 저장소에 저장되어 빠른 복구 가능
- **공유 가능**: 특정 작업공간의 직접 링크를 공유할 수 있음
#### 작업공간 전환 방식
NoteRich에서 작업공간을 전환할 때, 뒤에서 일어나는 일은 다음과 같습니다:
```mermaid
sequenceDiagram
participant U as User
participant R as Workspace Router
participant L as LocalStorage
participant W as Web Worker
participant S as Search Engine
participant D as IndexedDB
U->>R: 작업공간 전환 클릭
R->>L: 작업공간 ID 저장
R->>R: URL 해시 업데이트
R->>W: 작업공간 ID 메시지 전송
R->>S: 검색 엔진 재초기화
W->>D: 데이터베이스 연결 전환
S->>D: 작업공간별 인덱스 로드
S-->>U: 검색 준비 알림
```
### 작업공간 명명의 모범 사례
작업공간 ID는 다음과 같은 조건을 충족해야 합니다:
- **설명적**: `work1` 대신 `marketing-q4-2025` 사용
- **일관성**: 조직 전체에서 동일한 명명 규칙 사용
- **미래를 대비한**: 일시적인 경우를 제외하고 시간 제한이 있는 이름 피함 (`project-phoenix` 대 `temp-notes`)
---
## 3부: 고급 검색 아키텍처
### 키워드 매칭에서 의미적 이해까지
전통적인 검색 도구는 정확한 키워드 매칭에 의존합니다. “automobile”을 검색하면 “car”이 포함된 노트를 찾을 수 없습니다. NoteRich의 고급 검색 엔진은 이러한 제한을 넘어섭니다.
#### 이중 레이어 검색 시스템
NoteRich는 정교한 이중 레이어 검색 아키텍처를 사용합니다:
```graphviz
digraph SearchArchitecture {
rankdir=TB;
node [shape=box, style="rounded,filled", fillcolor="#fafafa", color="#eaeaea", fontname="Inter", fontsize=11];
edge [color="#d4d4d4", penwidth=1.5];
Query [label="User Query", fillcolor="#000", color="#000", fontcolor="#ffffff"];
subgraph cluster_processing {
label = "Query Processing Pipeline";
style = "filled";
fillcolor = "#f9f9f9";
color = "#eaeaea";
Segment [label="Text Segmentation\n(Intl.Segmenter + Smart Fallback)";]
Tokenize [label="Token Classification\n(Emails, URLs, Numbers, CJK)";]
}
subgraph cluster_search {
label = "Parallel Search Execution";
style = "filled";
fillcolor = "#f9f9f9";
color = "#eaeaea";
Precise [label="Precise Match\ntitle_raw field\nWeight: 1.0"];
Fuzzy [label="Fuzzy Match\ntitle/content fields\nWeight: 0.8"];
}
Merge [label="Score Merging & Ranking"];
Results [label="Final Results\nwith Highlights"];
Query -> Segment;
Segment -> Tokenize;
Tokenize -> Precise;
Tokenize -> Fuzzy;
Precise -> Merge;
Fuzzy -> Merge;
Merge -> Results;
}
```
### 지능형 텍스트 분할
NoteRich의 검색 능력의 기반은 고급 텍스트 분할 기능입니다.
#### 다국어 지원
검색 엔진은 여러 언어의 텍스트를 자동으로 감지하고 분할합니다:
| 언어 유형 | 예시 | 분할 전략 |
|----------|----------|------------------|
| **라틴 기반** | 영어, 스페인어, 프랑스어 | 단어 경계 감지 |
| **CJK** | 중국어, 일본어, 한국어 | Intl.Segmenter를 사용한 문자 수준 분할 |
| **혼합** | 코드 조각, URL, 이메일 | 패턴 기반 추출 |
| **숫자** | 날짜, 가격, 전화번호 | 전문적인 패턴 인식 |
#### 스마트 패턴 인식
NoteRich는 분할 과정에서 중요한 패턴을 인식하고 보존합니다:
- **이메일 주소**: `user@example.com`
- **URL**: `https://example.com/path`
- **전화번호**: `+1-555-123-4567`
- **날짜**: `2025-01-15`, `15/01/2025`
- **통화**: `$1,234.56`, `¥500`
- **측정**: `42℃`, `100km/h`
이를 통해 `user@example.com`을 검색할 때 정확한 이메일을 찾을 수 있으며, `user`, `example`, `com`의 파편화된 결과는 찾을 수 없습니다.
---
## 4부: 검색 쿼리 마스터하기
### 쿼리 구문 및 연산자
NoteRich는 정확한 정보 검색을 위한 강력한 쿼리 구문을 지원합니다.
#### 기본 검색
쿼리를 입력하기만 하면 모든 인덱스된 콘텐츠를 검색할 수 있습니다:
```
Quarterly marketing strategy
```
이렇게 하면 제목과 전체 내용을 모두 검색하여 관련성에 따라 결과를 정렬합니다.
#### 다중 단어 OR 검색
`|` 기호를 사용하여 여러 대체 단어를 검색할 수 있습니다:
```
Q4 planning | quarterly review | year-end summary
```
이렇게 하면 지정된 단어 중 **어떤 것과든** 일치하는 노트가 반환되며, 용어가 다양할 수 있는 브레인스토밍 세션에 매우 적합합니다.
#### 가중치 평가 시스템
NoteRich는 정교한 평가 알고리즘을 사용합니다:
```
Match Type | Weight | Description
--------------------|--------|-------------------------------------
Precise (title_raw) | 1.0 | 원본 제목과의 정확한 일치
Fuzzy (title) | 0.8 | 토큰화된 제목의 분할 일치
Fuzzy (content) | 0.8 | 노트 내용의 분할 일치
```
결과는 다음에 따라 정렬됩니다:
1. **일치 유형 우선순위**: 정확한 일치는 부조리 일치보다 더 높은 순위를 가짐
2. **누적 점수**: 여러 단어 일치는 점수를 증가시킴
3. **하위 쿼리 커버리지**: 더 많은 하위 쿼리와 일치하는 노트가 더 높은 순위를 가짐
### 실제 검색 예시
#### 예시 1: 회의 노트 찾기
```javascript
// 검색 쿼리
"team standup | daily sync | morning meeting"
// 다음과 같은 구절을 포함하는 노트가 반환되며, 정확한 제목 일치가 우선시됨
```
#### 예시 2: 기술 문서 검색
```javascript
// 검색 쿼리
"API endpoint authentication"
// 지능적으로 분할하여 찾음:
// - "API"와 "endpoint" 및 "authentication"을 언급하는 노트
// - "API"를 단일 토큰으로 유지
// - CamelCase와 Spaced 변형 모두 일치
```
#### 예시 3: 다국어 콘텐츠
```javascript
// 검색 쿼리 (영어와 중국어 혼합)
"project roadmap 项目规划"
// 두 언어를 동시에 분할하여 검색함
```
### 장기 문서 내비게이션 어시스턴트
NoteRich의 두드러진 기능 중 하나는 **거대한 문서**를 쉽게 처리할 수 있는 능력입니다. 기술 사양, 연구 논문, 포괄적인 프로젝트 문서를 작업할 때, 장기 문서 내에서 특정 콘텐츠를 찾는 것은 원활합니다.
#### 문서 내 검색 작동 방식
검색을 실행할 때, NoteRich는 일치하는 문서만 반환하는 것이 아니라 **정확한 문서 내 내비게이션**을 제공합니다:
```mermaid
sequenceDiagram
participant User
participant SearchEngine
participant DocumentIndex
participant Viewer
User->>SearchEngine: 검색 쿼리 입력
SearchEngine->>DocumentIndex: 모든 작업공간에서 쿼리 실행
DocumentIndex-->>SearchEngine: 일치하는 문서와 위치 반환
SearchEngine->>User: 일치 결과와 일치 수량 표시
User->>User: 결과 중 하나 클릭
SearchEngine->>Viewer: 첫 번째 일치 지점에서 문서 열기
Viewer->>User: 내비게이션 컨트롤로 모든 일치 항목 강조표시
User->>Viewer: 일치 항목 사이 전환(다음/이전)
Viewer->>User: 일치 위치 표시기 표시(예: "3 of 12")
```
#### 장기 문서의 주요 기능
1. **일치 수량 표시**: 각 검색 결과는 해당 문서 내 일치 수를 표시합니다(예: "Annual Report 2024 · 15 matches"), 이를 통해 어떤 문서가 가장 관련성 있는 콘텐츠를 포함하는지 파악할 수 있습니다.
2. **즉시 일치 위치로 이동**: 검색 결과를 클릭하면 문서가 열리고 첫 번째 일치 위치로 자동 스크롤됩니다. 일치된 텍스트는 즉시 가시적으로 강조됩니다.
3. **내비게이션 컨트롤**: 키보드 단축키나 UI 버튼을 사용하여 모든 일치 항목을 순환할 수 있습니다:
- `F3` 또는 `Cmd+G`: 다음 일치 항목
- `Shift+F3` 또는 `Shift+Cmd+G`: 이전 일치 항목
- 시각적 카운터는 현재 위치를 표시합니다(예: "일치 7 of 23")
4. **다중 일치 강조**: 검색 단어의 모든 인스턴스가 동시에 강조되므로, 문서 전체에 대한 시각적 개요를 얻을 수 있습니다.
5. **컨텍스트 보존**: 일치 항목 사이를 이동할 때, 주변 컨텍스트가 보존되어 복잡한 문서에서도 위치를 잃지 않을 수 있습니다.
#### 실제 예시: 기술 사양 내비게이션
50,000자 길이의 기술 사양 문서를 가지고 있다고 가정해 봅시다. “authentication protocol”을 언급하는 모든 내용을 찾아야 합니다:
| 단계 | 조치 | 결과 |
|------|--------|--------|
| 1 | 검색바에 `authentication protocol`을 입력 | "8 matches"와 함께 사양 문서가 나타남 |
| 2 | 검색 결과를 클릭 | 문서가 열리고 첫 번째 일치 위치로 이동함 |
| 3 | `F3`을 7번 누름 | 8개의 일치 항목을 순차적으로 확인함 |
| 4 | 강조된 일치 항목을 관찰 | 단어 분포의 시각적 개요 |
| 5 | 주변 컨텍스트를 읽음 | 각 일치 위치에서 전체 단락 컨텍스트가 보존됨 |
이 기능을 통해 긴 문서를 두려운 텍스트의 벽에서 벗어나, 언제든지 몇 번의 키 입력만으로 정보를 얻을 수 있는 유용한 지식 구조로 변환할 수 있습니다.
#### 장기 문서 검색 팁
- **특정 구절을 사용**: 긴 쿼리로 인해 대규모 문서에서 잘못된 일치가 줄어듭니다.
- **일치 수량 확인**: 높은 일치 수량은 너무 흔한 단어를 나타낼 수 있습니다.
- **작업공간 필터링과 결합**: 특정 작업공간 내에서 검색하여 범위를 좁힙니다.
- **제목의 정확성 활용**: 섹션 제목을 명확하게 구성하여 정확한 제목 일치가 가능합니다.
---
## 5부: 대규모 성능
### IndexedDB 기반 저장
NoteRich는 **IndexedDB**를 활용하여 고성능 로컬 저장을 가능하게 하여, 대규모 지식베이스에서도 즉각적인 검색을 가능하게 합니다.
#### 데이터베이스 아키텍처
각 작업공간은 자신의 IndexedDB 데이터베이스를 유지합니다:
```
noterich_note_database_{workspaceId} → 노트 메타데이터 및 콘텐츠
noterich_search_index_{workspaceId} → 검색 인덱스 문서
```
이러한 분리 덕분에:
- **빠른 전환**: 작업공간 간 데이터 로드 없음
- **독립적인 백업**: 개별 작업공간 내보내기
- **범위별 권한**: 세밀한 접근 제어
### 증분 인덱스 업데이트
전체 검색 인덱스를 매번 재구축하는 대신, NoteRich는 지능적인 증분 업데이트를 사용합니다:
```mermaid
graph LR
A[노트 저장] --> B[인덱스 존재?]
B -->|예| C[타임스탬프 비교]
B -->|아니오| D[전체 인덱스 구축]
C -->|더 새롭게| E[인덱스 항목 업데이트]
C -->|더 오래된| F[이미 인덱스된 경우 생략]
E --> G[IndexedDB에 저장]
D --> G
F --> H[인덱스 현재 상태]
```
### 성능 벤치마크
우리의 테스트 결과, 대규모에서도 뛰어난 성능을 보였습니다:
```echarts
{
"xAxis": {
"type": "category",
"data": ["1k Notes", "5k Notes", "10k Notes", "20k Notes", "50k Notes"],
"axisLabel": { "color": "#666", "rotate": 0 }
},
"yAxis": [
{
"type": "value",
"name": "Notes Count",
"splitLine": { "lineStyle": { "color": "#f4f4f5" } },
"axisLabel": { "color": "#666" }
},
{
"type": "value",
"name": "Latency (ms)",
"splitLine": { "show": false },
"axisLabel": { "color": "#666" }
}
],
"series": [
{
"name": "Notes Count",
"data": [1000, 5000, 10000, 20000, 50000],
"type": "bar",
"itemStyle": { "color": "#eaeaea", "borderRadius": [4, 4, 0, 0] }
},
{
"name": "Search Latency",
"data": [8, 12, 15, 22, 35],
"type": "line",
"yAxisIndex": 1,
"smooth": true,
"lineStyle": { "color": "#000", "width": 3 },
"itemStyle": { "color": "#000" },
"symbol": "circle",
"symbolSize": 8
}
],
"grid": { "left": "10%", "right": "10%", "bottom": "15%" },
"legend": { "data": ["Notes Count", "Search Latency"], "bottom": 0, "textStyle": { "color": "#666" } }
}
```
**50,000개의 노트**가 있더라도, 검색 쿼리는 40밀리초 이내에 결과를 반환합니다. 눈 깜짝할 사이에 빠른 속도입니다.
### 메모리 효율성
검색 엔진은 최적화된 데이터 구조를 사용합니다:
- **FlexSearch 문서 인덱스**: 여러 필드를 하나의 효율적인 인덱스로 결합
- **공유 노트 맵**: 노트 메타데이터에 대한 O(1) 조회 가능
- **배치 처리**: 인덱스 업데이트를 단위로 처리하여 UI 방해를 방지
- **루저 로딩**: 작업공간 전환 시 검색 인덱스에 요청 시 로드
---
## 6부: 작업공간 관리 모범 사례
### 효과적인 작업공간 구조 만들기
#### 권장 패턴
**패턴 1: 분야 기반 분리**
```
├── work-engineering
├── work-marketing
├── work-hr
└── personal
```
**패턴 2: 프로젝트 중심 조직**
```
├── project-alpha
├── project-beta
├── project-gamma
└── archive-2024
```
**패턴 3: 시간적 조직**
```
├── 2025-q1
├── 2025-q2
├── 2025-q3
└── 2025-q4
```
### 새로운 작업공간을 만들 때
다음과 같은 경우 새로운 작업공간을 만들어야 합니다:
✅ **컨텍스트 경계가 명확한 경우**: 다른 프로젝트, 팀, 생활 영역
✅ **접근 제어가 다르게 필요한 경우**: 일부 노트는 제한된 공유가 필요함
✅ **지식베이스가 크게 성장한 경우**: 단일 작업공간이 10,000개의 노트를 초과할 때
✅ **협업 요구사항이 다른 경우**: 다른 주제에 대해 다른 협력자 사용
### 단일 작업공간에 머무를 때
다음과 같은 경우 노트를 함께 유지해야 합니다:
❌ **교차 참조가 자주 일어나는 경우**: 노트가 정기적으로 서로 연결됨
❌ **검색이 여러 주제에 걸쳐 필요한 경우**: 모든 콘텐츠를 검색하는 경우가 많음
❌ **설정 비용이 이점보다 크지 않은 경우**: 소규모 컬렉션(<1,000 노트)의 경우
---
## 7부: 고급 팁과 요령
### 팁 1: 해시태그 분할 활용
NoteRich는 검색을 위해 해시태그를 자동으로 분할합니다:
```
#machine-learning → "machine"와 "learning"으로 검색 가능
```
이를 통해 "machine-learning" 해시태그를 검색할 때 "machine"이나 "learning"을 검색할 수 있습니다.
### 팁 2: 검색 시 첨부파일 이름 사용
첨부파일 이름은 인덱싱되고 검색 가능합니다:
```
quarterly_report.pdf → "quarterly"와 "report"와 "pdf"로 검색 가능
```
### 팁 3: 수학적 방정식 검색 가능
방정식 내용은 추출되고 인덱싱됩니다:
```
E = mc² → 인덱싱된 구성 요소 검색 가능
```
### 팁 4: 일반적인 검색에 최적화
자주 접근하는 정보를 제목에 구조화하여 정확한 일치가 가능하도록 합니다:
```
더 나은: "Q4 Marketing Budget Analysis"
대신: "Some thoughts on numbers"
```
### 팁 5: 정기적인 인덱스 유지
NoteRich는 자동으로 인덱싱을 처리하지만, 정기적인 재구축을 통해 성능을 최적화할 수 있습니다:
1. 설정 → 검색
2. "검색 인덱스 재구축"을 클릭
3. 완료 알림을 기다림
이 작업은 다음 경우에 권장됩니다:
- 대량의 노트를 한 번에 가져오는 경우
- 주요 버전 업그레이드 후
- 눈에 띄는 검색 속도 저하 후
---
## 8부: 일반적인 문제 해결
### 문제: 검색 결과에 예상되는 노트가 없음
**가능한 원인:**
1. 노트가 다른 작업공간에 있음
2. 인덱스가 아직 업데이트되지 않았음
3. 노트가 초안으로 표시됨
**해결책:**
- URL에서 현재 작업공간 표시기를 확인
- 인덱스가 업데이트될 때까지 몇 초 기다림
- 노트 상태를 확인(초안은 검색에서 제외)
### 문제: 작업공간 전환이 느리게 일어남
**가능한 원인:**
1. 많은 노트가 있는 큰 작업공간
2. 초기 인덱스 로드
3. 브라우저 IndexedDB 성능
**해결책:**
- 초기 인덱스 캐시가 형성될 수 있도록 허용(일회성 작업)
- 매우 큰 작업공간을 분할하는 것을 고려
- 브라우저에 충분한 저장 공간이 있는지 확인
### 문제: 검색 인덱스와 일치하지 않음
**증상:**
- 최근에 편집된 노트가 검색 결과에 나타나지 않음
- 삭제된 노트가 여전히 결과에 표시됨
**해결책:**
```
설정 → 고급 → 검색 인덱스 재구축
```
이 작업은 현재 작업공간의 모든 노트에 대한 완전한 재인덱싱을 강제합니다.
---
## 결론: 두 번째 뇌를 구축하기
NoteRich의 작업공간과 고급 검색을 마스터하면, 노트 작성이 수동적인 저장에서 적극적인 사고 파트너로 변모합니다. 다음은 실천 계획입니다:
### 1주차: 기초 구축
- [ ] 기존 노트를 검토하여 자연스러운 작업공간 경계 파악
- [ ] 주요 컨텍스트에 따라 2-3개의 초기 작업공간 만들기
- [ ] URL 네비게이션을 사용하여 작업공간 간 전환 연습
### 2주차: 최적화
- [ ] 다양한 검색 쿼리 패턴 실험
- [ ] 유연한 검색을 위한 OR 연산자(`|`) 사용 학습
- [ ] 검색 결과 순위와 노트 제목을 적절히 조정하기
### 3주차: 마스터하기
- [ ] 작업공간별 특화된 작업흐름 설정
- [ ] 일관된 명명 규칙 적용
- [ ] 협력자와 작업공간 링크 공유
### 지속적인 유지보수
- [ ] 3개월마다 작업공간 구조 검토
- [ ] 검색 성능 지표 모니터링
- [ ] 지식이 성장함에 따라 조직을 최적화
---
## 결론: 두 번째 뇌를 구축하기
워크플로우를 변화시킬 준비가 되셨나요?
당신의 프라이빗한, AI 기반
노트 허브가 준비되어 있습니다
비공개적이고 강력한 노트 작성을 위해 NoteRich를 신뢰하는 수천 명의 사용자들과 함께하세요. 브라우저에서 바로 체험하세요 — 설치 불필요, 신용카드 불필요, 노트는 절대 기기를 떠나지 않습니다.
신용카드 불필요
브라우저에서 실행
100% 로컬 노트
리소스 및 가이드
로컬 우선 노트 작성, 프라이버시 아키텍처 및 고급 생산성 워크플로우에 대한 심층 기사를 탐색하세요.
- NoteRich에서 노트를 AI 메모리로 전환
- NoteRich AI로 텍스트를 시각적 인포그래픽으로 변환
- NoteRich 워크스페이스 및 고급 검색 튜토리얼
- NoteRich 리치 텍스트 vs Markdown: 전환 및 함께 사용하는 방법
- NoteRich P2P 동기화 튜토리얼: 클라우드 없이 크로스 디바이스 동기화
- NoteRich OCR 튜토리얼: 종이 노트를 디지털 텍스트로 스캔
- NoteRich 로컬 우선 AES-GCM 암호화 메커니즘 설명
- NoteRich 로컬 지식 베이스 RAG 튜토리얼
- NoteRich LaTeX 수학 공식 가이드: 공식 작성 방법
- NoteRich 키보드 단축키 및 생산성 팁
- NoteRich 온라인 노트 작성의 기능 및 이점
- NoteRich 프라이버시 AI로 비공개 문서 요약하는 방법
- NoteRich에서 Mermaid.js로 플로우차트 만드는 방법 – 완전 튜토리얼
- NoteRich에서 비디오 및 첨부파일 삽입하는 방법
- NoteRich에서 PDF 및 워터마크 없는 HTML 내보내는 방법
- NoteRich에서 인터랙티브 ECharts 임베드하는 방법