# Noterich P2P Sync 튜토리얼: 클라우드 없이 장치 간 동기화
> **장치 간 노트를 안전하게 동기화하세요 — 클라우드 저장소가 필요 없습니다.**
데이터 프라이버시가 더욱 중요해진 이 시대에, Noterich는 장치 간 동기화에 대한 혁신적인 방법을 제공합니다. 우리의 **P2P (피어투피어) 동기화** 기능을 사용하면 클라우드 서버에 의존하지 않고도 장치 간 노트를 원활하게 공유할 수 있습니다. 데이터는 항상 여러분의 것입니다.
## P2P 동기화를 선택하는 이유는?
전통적인 노트 앱은 데이터를 중앙 집중식 서버에 저장합니다. 이는 프라이버시 위험, 구독 비용, 제3자 인프라 의존성과 같은 문제를 초래합니다. Noterich는 다른 길을 선택합니다:
```mermaid
graph LR
A[Your Device] <-->|Direct Connection| B[Your Other Device]
C[Cloud Server] -.->|Not Required| A
C -.->|Not Required| B
style A fill:#4CAF50,color:#fff
style B fill:#4CAF50,color:#fff
style C fill:#9E9E9E,color:#fff,stroke-dasharray: 5 5
```
### 주요 장점
- **🔒 프라이버시 최우선**: 노트는 제3자 서버와 접촉하지 않습니다.
- **⚡ 빠르고 직접적**: 장치들이 직접 통신하여 동기화가 더 빠릅니다.
- **💰 구독 없음**: 프리미엄 계층 없이 무료 P2P 동기화가 가능합니다.
- **🌐 어디서나 작동**: 로컬 네트워크 또는 인터넷을 통해 동기화가 가능합니다.
- **📱 플랫폼 간 작동**: 데스크톱, 노트북, 태블릿, 모바일 간에 작동합니다.
## P2P 동기화의 작동 방식
Noterich는 **WebRTC 기술**과 **PeerJS**를 결합하여 장치 간 직접적인 연결을 설정합니다. 동기화를 시작할 때:
```mermaid
sequenceDiagram
participant D1 as Device A (송신자)
participant S as Signaling Server
participant D2 as Device B (수신자)
D1->>S: Connection ID 요청
S-->>D1: Room ID 생성
D1->>D2: Connection 링크 공유(QR/URL)
D2->>S: Room ID를 사용하여 연결
S-->>D2: Peer 연결 설정
D1->>D2: 암호화 및 노트 전송
D2->>D2: 복호화 및 노트 불러오기
Note over D1,D2: 직접 암호화된 전송<br/>서버에 데이터 저장 없음
```
### 배경 기술
Noterich의 P2P 구현은 다음을 활용합니다:
1. **PeerJS 라이브러리**: 브라우저 간 통신의 복잡성을 처리합니다.
2. **AES-GCM 암호화**: 노트 데이터를 위한 군사급 암호화.
3. **PBKDF2 키 생성**: 안전한 비밀번호 기반의 암호화 키 생성.
4. **MessagePack serialization**: 빠른 전송을 위한 효율적인 바이너리 데이터 인코딩.
5. **IndexedDB Storage**: 오프라인 접근을 위한 로컬 최우선 데이터베이스.
## P2P 동기화 시작하기
### 전제 조건
시작하기 전에 다음을 확인하세요:
- ✅ 두 장치 모두 Noterich가 설치되어 있어야 합니다.
- ✅ 두 장치 모두 인터넷에 연결되어 있어야 합니다(또는 동일한 로컬 네트워크).
- ✅ 현대적인 웹 브라우저(Chrome, Firefox, Edge, Safari)가 필요합니다.
### 단계 1: 소스 장치에서 공유 시작
1. Noterich에서 공유하고자 하는 노트를 열어보세요.
2. 툴바의 **Share** 버튼을 클릭하세요.
3. **"P2P Share"** 옵션을 선택하세요.
4. (선택 사항) 추가 보안을 위해 비밀번호를 설정하세요.
- 비밀번호는 최소 8자리여야 합니다.
- AES-256-GCM 암호화를 사용합니다.
5. P2P 서버가 초기화될 때까지 기다리세요.
```mermaid
graph TD
A[노트 열기] --> B[Share 버튼 클릭]
B --> C[P2P Share 선택]
C --> D{비밀번호 설정?}
D -->|예| E[비밀번호 입력 ≥8자리]
D -->|아니오| F[암호화 생략]
E --> G[P2P 서버 초기화]
F --> G
G --> H[공유 링크 및 QR 코드 생성]
```
### 단계 2: 연결 링크 공유
P2P 서버가 시작되면, Noterich는 다음을 생성합니다:
- **연결 매개변수가 포함된 고유한 공유 가능한 링크**
- **빠르게 모바일에서 스캔할 수 있는 QR 코드**
링크 형식은 다음과 같습니다:
```
https://noterich.com/#dbshare=<infoHash>&server=<signaling-server>
```
**공유 방법:**
| 방법 | 최적의 경우 | 방법 |
|--------|----------|--------|
| 🔗 링크 복사 | 이메일, 메시징 앱 | "링크 복사" 버튼 클릭 |
| 📱 QR 코드 | 모바일 기기 | 기기 카메라로 스캔 |
| 📧 이메일 | 원격 협력자 | 링크를 이메일에 붙여넣기 |
### 단계 3: 목적 장치에서 수신
수신 장치에서:
1. **공유 링크 열기**
- 직접 링크를 클릭하거나,
- 모바일 기기로 QR 코드를 스캔하세요.
2. **수신 노트 검토**
- 노트 제목과 메타데이터를 미리보세요.
- 발신자 정보를 확인하세요.
3. **비밀번호 입력** (암호화된 경우)
- 발신자가 제공한 비밀번호를 입력하세요.
- 데이터는 장치 내부에서 복호화됩니다.
4. **목적 작업공간 선택**
- 기존 작업공간을 선택하거나,
- 불러온 노트를 위한 새로운 작업공간을 만들세요.
5. **인입 확인**
- 노트가 복호화되어 IndexedDB에 저장됩니다.
- 검색 인덱스가 자동으로 재구성됩니다.
```mermaid
graph LR
A[링크 열기] --> B[송신자와 연결]
B --> C{암호화됨?}
C -->|예| D[비밀번호 입력]
C -->|아니오| E[메타데이터 확인]
D --> E
E --> F[노트 미리보기]
F --> G[작업공간 선택]
G --> H[인입 및 인덱스]
H --> I[동기화 완료!]
style I fill:#4CAF50,color:#fff
```
## 고급 기능
### 암호화된 전송
민감한 노트를 위해, Noterich는 선택적 엔드투엔드 암호화를 제공합니다:
**암호화 과정:**
```javascript
// 비밀번호 → 암호화 키(PBKDF2)
password + salt → deriveKey() → AES-256-GCM 키
// 노트 데이터 → 암호화된 버퍼
noteData + key + iv → encrypt() → encryptedBuffer
// 전송 패키지
{
encryptedBuffer: ArrayBuffer,
salt: Uint8Array, // 키 생성용
iv: Uint8Array // 초기화 벡터
}
```
**보안 기능:**
- 🔐 키 생성용 100,000 PBKDF2 반복
- 🔐 각 전송마다 무작위적인 소금과 IV 사용
- 🔐 AES-256-GCM 인증 암호화
- 🔐 비밀번호는 전송 시에만 사용되고, 로컬에서만 저장됨
### 배치 노트 동기화
여러 노트를 효율적으로 전송:
1. 설정에서 **Database Transfer**를 이용하세요.
2. **"P2P Sync"** 모드를 선택하세요.
3. 동기화할 노트를 선택하세요.
4. 수신자는 선택 옵션과 함께 배치 미리보기를 받습니다.
**성능 최적화:**
- 노트는 512KB 단위로 전송됩니다.
- 비블로킹 비동기 처리로 UI 종료 방지
- 바이트 단위의 정확한 진행 상황 추적
- 데이터 손실 없이 언제든지 취소 가능
### 충돌 해결
두 장치에 모두 존재하는 노트를 동기화할 때:
```mermaid
graph TD
A[충돌 감지] --> B{타임스탬프 비교}
B -->|현지 버전 더 새롭다| C[현지 버전 유지]
B -->|원격 버전 더 새롭다| D[충돌 알림 표시]
D --> E[버전 선택]
E --> F[현지]
E --> G[원격]
E --> H[수동 병합]
B -->|둘 다 삭제됨| I[생략]
style C fill:#2196F3,color:#fff
style F fill:#2196F3,color:#fff
style G fill:#4CAF50,color:#fff
```
**충돌 유형 처리:**
- `local-newer`: 현지 버전이 더 새롭습니다.
- `remote-newer`: 도착한 버전이 더 새롭습니다.
- `local-deleted`: 현지에서 이 노트를 삭제했습니다.
- `remote-deleted`: 발신자의 장치에서 노트가 삭제되었습니다.
- `remote-restored`: 이전에 삭제된 노트가 복원되었습니다.
## 문제 해결
### 일반적인 문제 및 해결 방법
#### ❌ "PeerJS 라이브러리 로드되지 않음"
**원인**: 네트워크 차단, PeerJS CDN 또는 신호 서버 문제
**해결 방법:**
1. 인터넷 연결을 확인하세요.
2. 방화벽이 WebRTC 연결을 허용하는지 확인하세요.
3. 다른 네트워크(모바일 핫스팟)를 시도해보세요.
4. 브라우저가 WebRTC를 지원하는지 확인하세요.
#### ❌ "연결 시간 초과"
**원인**: NAT/방화벽이 직접 연결을 방지함
**해결 방법:**
1. 두 장치가 같은 네트워크에 연결되어 있는지 확인하세요.
2. VPN을 일시적으로 비활성화하세요.
3. 라우터의 WebRTC 설정을 확인하세요.
4. 모바일 연결을 위해 QR 코드를 사용하세요.
#### ❌ "복호화 실패"
**원인**: 잘못된 비밀번호 또는 손상된 전송
**해결 방법:**
1. 비밀번호가 정확한지 확인하세요(대소문자 구분).
2. 발신자로부터 새로운 공유 링크를 요청하세요.
3. 전송 중에 안정적인 연결이 있는지 확인하세요.
4. 더 작은 배치 크기로 시도하세요.
#### ❌ "동기화 중" 오류
**원인**: 동시에 여러 동기화 시도
**해결 방법:**
1. 현재 동기화가 완료될 때까지 기다리세요.
2. 다른 Noterich 탭/윈도우를 닫으세요.
3. 페이지를 새로 고침하고 다시 시도하세요.
4. 지속적으로 문제가 발생하면 브라우저 캐시를 지우세요.
### 연결 상태 표시기
| 상태 | 의미 | 조치 |
|--------|---------|--------|
| 🔵 연결 중 | 피어 연결 설정 중 | 5-10초 기다리세요. |
| 🟡 비교 중 | 노트 차이점 분석 중 | 정상적인 과정입니다. |
| 🟠 사용자 확인 필요 | 비밀번호 또는 확인 필요 | 모달 알림 확인. |
| 🟢 데이터 전송 | 데이터가 데이터베이스에 불러옴 | 탭을 닫지 마세요. |
| ✅ 성공 | 동기화 완료 | 노트를 사용할 수 있습니다. |
| 🔴 오류 | 연결 또는 전송 실패 | 문제 해결을 확인하세요. |
## 보안 모범 사례
### 데이터 보호
P2P 동기화는 본질적으로 안전하지만, 다음 지침을 준수해야 합니다:
1. **강력한 비밀번호 사용**
- 최소 8자리 (12자 이상 권장)
- 대문자, 소문자, 숫자, 기호를 혼합
- 다른 서비스의 비밀번호를 재사용하지 마세요.
2. **수신자 확인**
- 신뢰할 수 있는 장치와만 링크를 공유하세요.
- 물리적으로 가까운 경우 QR 코드를 사용하세요.
- 공개 채널에 링크를 게시하지 마세요.
3. **활성 연결 모니터링**
- 동기화 중 연결된 피어를 확인하세요.
- 성공적인 전송 후 연결을 끊으세요.
- 공유된 링크가 위험해지면 삭제하세요.
4. **정기적인 백업**
- 중요한 노트를 정기적으로 내보내세요.
- 백업을 안전한 곳에 보관하세요.
- 정기적으로 복구 절차를 테스트하세요.
### 암호화 한계 이해
**암호화된 내용:**
- ✅ 노트 내용(텍스트, 포맷, 메타데이터)
- ✅ 첨부파일 및 내장 미디어
- ✅ 전송 중의 데이터베이스 구조
**암호화되지 않은 내용:**
- ⚠️ 연결 메타데이터(시간, 데이터 크기)
- ⚠️ IP 주소(신호 서버에 표시됨)
- ⚠️ 장치 식별자(연결 라우팅용)
## 성능 팁
### 동기화 속도 최적화
1. **네트워크 환경**
- 동일한 로컬 네트워크에서 가장 빠르게 전송됩니다.
- 5GHz WiFi가 2.4GHz보다 선호됩니다.
- 데스크톱 장치는 유선 이더넷을 사용합니다.
2. **배치 크기**
- 대량 전송: 작은 배치로 나누세요.
- 진행 상황 표시기를 확인하세요.
- 지연이 발생하면 취소하고 다시 시도하세요.
3. **브라우저 성능**
- 동기화 중 Noterich 탭을 활성화하세요.
- 불필요한 브라우저 탭을 닫으세요.
- 최신 브라우저 버전으로 업데이트하세요.
4. **장치 리소스**
- 충분한 저장 공간을 확보하세요.
- 메모리를 많이 사용하는 애플리케이션을 닫으세요.
- 동기화가 느려질 경우 브라우저를 재시작하세요.
### 메모리 관리
Noterich는 브라우저 충돌을 방지하기 위해 스마트한 배치 처리를 구현합니다:
```javascript
// setTimeout을 사용한 비동기 처리
async function asyncBatchProcessor(items, processor, batchSize = 10) {
// 10개 단위로 항목을 처리합니다.
// 10ms마다 제어권을 넘깁니다.
// 대규모 데이터 불러오기 중에 메인 스레드가 차단되지 않도록 합니다.
}
```
**권장 사항:**
- 단일 전송을 최대 100개의 노트로 제한하세요.
- 대규모 배치 동기화 후 30초간 기다리세요.
- 브라우저 캐시를 정기적으로 지우세요.
## FAQ
### Q: 두 대 이상의 장치에서 동기화할 수 있나요?
**A:** 네! 각 장치 쌍에 대해 별도의 P2P 세션을 시작하세요. 다중 장치 워크플로우의 경우:
1. 장치 A → 장치 B 동기화
2. 그 다음 장치 B → 장치 C 동기화
3. 또는 장치 A를 모든 장치의 중앙 허브로 사용하세요.
### Q: P2P 동기화는 오프라인에서도 작동하나요?
**A:** P2P는 신호 서버 연결을 위해 초기 인터넷 연결이 필요합니다. 연결이 설정된 후:
- ✅ 로컬 네트워크 전송은 인터넷 없이 작동합니다.
- ✅ 데이터는 장치 간 직접 전송됩니다.
- ❌ 초기 연결 시 신호 서버 접속이 필요합니다.
### Q: 동기화가 중단되면 어떻게 되나요?
**A:** Noterich는 중단 상황을 잘 처리합니다:
- 부분적으로 전송된 노트는 삭제됩니다.
- 손상된 데이터는 데이터베이스에 들어오지 않습니다.
- 동기화 프로세스를 다시 시작하면 됩니다.
- 이미 동기화된 노트는 영향을 받지 않습니다.
### Q: 다른 Noterich 사용자와 동기화할 수 있나요?
**A:** 물론! P2P 동기화는 모든 Noterich 사용자 간에 작동합니다:
- 협력자와 개별 노트를 공유할 수 있습니다.
- 계정 연동이 필요하지 않습니다.
- 각 전송은 독립적이고 안전합니다.
- 일회성 노트 공유에 완벽합니다.
### Q: 파일 크기 제한이 있나요?
**A:** 실제 제한은 다음에 달려 있습니다:
- 브라우저 메모리 가용성
- 네트워크 안정성
- 권장 최대치: 세션당 50MB
- 더 큰 전송은 여러 배치로 나누어야 합니다.
### Q: 공유 링크의 유효 기간은 얼마나 되나요?
**A:** 공유 링크는 세션 기반입니다:
- 발신자의 Noterich 탭이 열려 있는 동안 유효합니다.
- 발신자가 탭/브라우저를 닫으면 만료됩니다.
- 보안을 위해 한 번 사용한 링크는 한 번만 사용합니다.
- 각 전송 세션마다 새로운 링크를 생성합니다.
## 비교: P2P vs 클라우드 동기화
```mermaid
quadrantChart
title "동기화 방법 비교"
x-axis "낮은 프라이버시" --> "높은 프라이버시"
y-axis "낮은 제어" --> "높은 제어"
quadrant-1 "Noterich P2P"
quadrant-2 "피해야 함"
quadrant-3 "전통적인 클라우드"
quadrant-4 "중앙 집중식 서비스"
"Noterich P2P": [0.9, 0.9]
"전통적인 클라우드": [0.3, 0.4]
"중앙 집중식 서비스": [0.4, 0.3]
```
| 기능 | Noterich P2P | 클라우드 동기화 |
|--------|--------------|-----------------|
| **데이터 저장** | 장치만 | 제3자 서버 |
| **프라이버시 수준** | 최대 | 제공업체에 따라 다름 |
| **비용** | 무료 | 종종 구독 기반 |
| **설정 복잡도** | 중간 | 간단함 |
| **동기화 속도** | 매우 빠름(직접) | 중간(서버를 통함) |
| **오프라인 접근** | 완전함 | 제한적 |
| **제조사 종속성** | 없음 | 높음 |
| **데이터 이동성** | 완전함 | 제한적 |
## 실제 사용 사례
### 📚 개인 지식 기반
다음을 통해 개인 지식 관리 시스템을 동기화하세요:
- 집에서 깊은 작업을 위해
- 카페에서 노트북을 사용하여
- 태블릿으로 읽고 주석을 달기 위해
- 휴대폰으로 간단한 기록을 남기기 위해
### 👥 팀 협업
팀 내에서 연구 노트를 안전하게 공유하세요:
- IT 인프라가 필요하지 않음
- 엔드투엔드 암호화된 전송
- 전송 로그를 통한 감사 추적
- 개인 정보 보호 규정 준수
### 🎓 학술 연구
논문 및 문헌 리뷰 작업에서 협업하세요:
- 주석이 달린 PDF와 노트를 공유
- 로컬에서 버전 기록 유지
- 대학/개인 장치에서 작업
- 미출판 연구를 보호
### 🏢 기업 배포
프라이버시를 중시하는 기업에서 Noterich를 배포하세요:
- 데이터가 회사 네트워크를 벗어나지 않음
- 방화벽을 통과하여 설정 가능
- 기존 보안 정책과 통합
- 클라우드 서비스 의존성 감소
## 기술적 심화 분석 (개발자를 위한)
### 아키텍처 개요
```mermaid
graph TB
subgraph Sender["송신자 장치"]
A1[노트 데이터] --> A2[MessagePack Serialize]
A2 --> A3{암호화됨?}
A3 -->|예| A4[AES-256-GCM 암호화]
A3 -->|아니오| A5[원본 바이너리]
A4 --> A6[512KB 단위로 분할]
A5 --> A6
A6 --> A7[WebRTC 데이터 채널]
end
subgraph Receiver["수신자 장치"]
B1[WebRTC 데이터 채널] --> B2[분할된 데이터 재조합]
B2 --> B3{암호화됨?}
B3 -->|예| B4[AES-256-GCM 복호화]
B3 -->|아니오| B5[원본 바이너리]
B4 --> B6[MessagePack deserialize]
B5 --> B6
B6 --> B7[IndexedDB 저장]
B7 --> B8[검색 인덱스 재구성]
end
A7 -.->|직접 P2P| B1
style A4 fill:#FF5722,color:#fff
style B4 fill:#FF5722,color:#fff
style A7 fill:#4CAF50,color:#fff
style B1 fill:#4CAF50,color:#fff
```
워크플로우를 변화시킬 준비가 되셨나요?
당신의 프라이빗한, 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 임베드하는 방법