66 KiB
Mac mini M4 Pro — PKM 허브 아키텍처 설계
시스템 개요
Mac mini M4 Pro(64GB RAM, 4TB SSD)를 중심으로, DEVONthink를 중앙 지식 허브로 두고, Omni 제품군으로 실행/계획, Synology NAS로 저장/백업, AI(Claude API + Ollama)로 지능화하는 통합 PKM 시스템.
┌─────────────────────────────────────────────────────────────┐
│ Mac mini M4 Pro (허브) │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ DEVONthink │◄──│ DEVONagent │ │ DEVONsphere │ │
│ │ (지식 허브) │ │ (리서치 엔진) │ │ (시스템 검색) │ │
│ └──────┬──────┘ └──────────────┘ └─────────────────┘ │
│ │ │
│ ┌──────┴──────────────────────────────────────────────┐ │
│ │ 자동화 레이어 (AppleScript + Shortcuts) │ │
│ └──────┬──────────────┬───────────────┬───────────────┘ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌─────▼─────┐ ┌──────▼──────┐ │
│ │ OmniFocus │ │ OmniPlan │ │ OmniGraffle │ │
│ │ (작업 실행) │ │ (프로젝트) │ │ (시각화) │ │
│ └─────────────┘ └───────────┘ └─────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ AI 레이어 (Ollama + Claude API) │ │
│ │ 태깅 · 분류 · RAG · 요약 · 리서치 │ │
│ └─────────────────────────────────────────────────────┘ │
└───────────────────────────┬─────────────────────────────────┘
│ WebDAV / SMB
┌────────────────┼────────────────┐
┌──────────▼──────────┐ ┌───────────▼───────────┐
│ Synology DS1525+ │ │ GPU 서버 (리눅스) │
│ 백업·메일·채팅 아카이브│ │ 비전·임베딩·리랭킹·Plex │
└─────────────────────┘ └───────────────────────┘
DEVONthink 데이터베이스 구조
기존 도메인별 DB를 유지하면서, 운영용 DB만 추가하는 하이브리드 구조입니다. 64GB RAM이면 13개 DB를 동시에 열어도 문제없습니다.
DB 설계
운영 레이어 (신규 추가) — 자동화 파이프라인용
| DB 이름 | 용도 | 저장 위치 | 동기화 |
|---|---|---|---|
| 📥 Inbox | 미분류 자료 임시 보관, AI 분류 후 도메인 DB로 이동 | 내장 SSD | CloudKit |
| 📧 Archive | 이메일(MailPlus), 채팅 로그, 영수증 | 내장 SSD | WebDAV (NAS) |
| 🏗️ Projects | 활성 프로젝트 문서 (OmniFocus 연동) | 내장 SSD | CloudKit |
지식 레이어 (기존 유지) — 도메인별 전문 지식 저장소
| DB 이름 | 용도 | 저장 위치 | 동기화 |
|---|---|---|---|
| 00_Note_BOX | 일반 메모, 스크랩, 잡다한 노트 | 내장 SSD | WebDAV (NAS) |
| 01_Philosophie | 철학, 사상, 인문학 자료 | 내장 SSD | WebDAV (NAS) |
| 02_Language | 어학 학습, 번역, 언어학 자료 | 내장 SSD | WebDAV (NAS) |
| 03_Engineering | 공학 전반 기술 문서 | 내장 SSD | WebDAV (NAS) |
| 04_Industrial safety | 산업안전, 규정, 인증 문서 | 내장 SSD | WebDAV (NAS) |
| 05_Programming | 개발, 코드, IT 기술 자료 | 내장 SSD | WebDAV (NAS) |
| 07_General Book | 일반 도서, 독서 노트 | 내장 SSD | WebDAV (NAS) |
| 97_Production drawing | 생산 도면, CAD, 설계 자료 | 내장 SSD | WebDAV (NAS) |
| 99_Reference Data | 범용 레퍼런스, 규격표 | 내장 SSD | WebDAV (NAS) |
| 99_Technicalkorea | 한국 기술 규정, 국내 기술 자료 | 내장 SSD | WebDAV (NAS) |
자동 분류 라우팅 — Inbox → 도메인 DB
AI 태깅 후 Smart Rule이 태그 기반으로 적절한 도메인 DB로 자동 이동시킵니다:
Inbox 진입 → AI 태깅(Ollama) → Smart Rule 라우팅:
태그 매핑:
#주제/기술/AI-ML, #주제/기술/서버관리 → 05_Programming
#주제/기술/네트워크 → 03_Engineering
$유형/이메일, $유형/채팅로그 → Archive
#주제/산업안전 → 04_Industrial safety
#주제/도면, #주제/설계 → 97_Production drawing
#주제/철학, #주제/인문 → 01_Philosophie
#주제/어학, #주제/번역 → 02_Language
#주제/독서 → 07_General Book
#주제/규정/한국 → 99_Technicalkorea
#주제/규격, #주제/레퍼런스 → 99_Reference Data
미분류 / 복합 태그 → 00_Note_BOX (기본 폴백)
태그 체계 (Taxonomy)
계층적 태그 시스템을 설계합니다:
태그 구조:
├── @상태/
│ ├── 처리중
│ ├── 검토필요
│ ├── 완료
│ └── 아카이브
├── #주제/
│ ├── 기술/
│ │ ├── 서버관리
│ │ ├── 네트워크
│ │ └── AI-ML
│ ├── 산업안전/
│ │ ├── 법령 ← 10_Legislation 라우팅
│ │ ├── 위험성평가 ← 50_Practice/Risk_Assessment
│ │ ├── 순회점검 ← 50_Practice/Patrol_Inspection
│ │ ├── 안전교육 ← 50_Practice/Education
│ │ ├── 사고사례 ← 40_Cases
│ │ ├── 신고보고 ← 60_Compliance
│ │ ├── 안전관리자 ← 70_Safety_Manager
│ │ ├── 보건관리자 ← 75_Health_Manager
│ │ └── 규격기준 ← 80_Reference
│ ├── 업무/
│ └── 개인/
├── $유형/
│ ├── 논문 ← 30_Papers 라우팅 (DB 불문)
│ ├── 법령 ← 10_Legislation 라우팅
│ ├── 기사
│ ├── 메모
│ ├── 이메일
│ ├── 채팅로그
│ ├── 도면
│ └── 체크리스트
└── !우선순위/
├── 긴급
├── 중요
└── 참고
DB별 그룹 구조 (Internal Group Structure)
각 도메인 DB 내부에 통일된 넘버링 체계(10 단위)로 그룹을 구성합니다. 00_Inbox는 AI가 해당 DB로 라우팅했지만 하위 그룹까지 확정 못한 문서의 임시 보관소입니다.
04_Industrial Safety → 상세 설계서 참조
10_Legislation (법령/해외법령), 20_Theory, 30_Papers, 40_Cases, 50_Practice (9개 실무 하위그룹), 60_Compliance, 70_Safety_Manager, 75_Health_Manager, 80_Reference, 90_Archive
- 법령 자동 수집 시스템 (한국/미국/일본/EU API 모니터링)
- DEVONagent 안전 분야 검색 세트 7종 (주간
5085건, 양 조절 전략 포함)
※ 나머지 도메인 DB(03_Engineering, 05_Programming 등)도 동일한 넘버링 패턴으로 확장 예정
커스텀 메타데이터
DEVONthink 4의 커스텀 메타데이터 필드를 활용합니다. 단, AI 처리 결과의 저장은 역할 분리 원칙을 따릅니다:
| 필드명 | 타입 | 용도 |
|---|---|---|
omnifocusTaskID |
텍스트 | OmniFocus 작업 역링크 |
sourceURL |
URL | 원본 출처 |
synologyPath |
텍스트 | NAS 원본 경로 |
lastAIProcess |
날짜 | 마지막 AI 처리 일시 |
sourceChannel |
텍스트 | 유입 경로 (tksafety/devonagent/law_monitor/inbox_route/email/web_clip/manual) |
dataOrigin |
텍스트 | 데이터 출처 구분 (work = 자사 업무 / external = 외부 참고) |
sourceChannel과dataOrigin은 04_Industrial Safety에서 우선 적용하고, 안정화 후 다른 도메인 DB로 확장합니다. 상세 규칙: 04-industrial-safety-blueprint.md § 8. 유입 경로 추적 체계 참조
AI 결과물 저장 전략 — 중복 저장 금지
GPU 서버에서 처리된 AI 결과물은 각자 목적에 맞는 곳에만 저장합니다. DEVONthink와 ChromaDB에 같은 정보를 이중으로 넣지 않습니다.
처리 결과 저장 위치 이유
───────────────────────────────────────────────────────
벡터 임베딩 ChromaDB만 시맨틱 검색 전용, DEVONthink에선 쓸모없음
비전 OCR 텍스트 DEVONthink 본문에 병합 검색 가능한 텍스트가 되어야 하므로 필수
리랭킹 점수 저장 안 함 (휘발) 쿼리 시점에만 의미 있는 일회성 데이터
태그/분류 DEVONthink 태그만 Smart Group, 브라우징에 활용
요약 저장 안 함 RAG로 언제든 재생성 가능, 별도 보관 불필요
OmniFocus 역링크 DEVONthink 메타데이터 양방향 참조에 필요
핵심 원칙:
- ChromaDB = 벡터 검색 엔진. 여기엔 임베딩만 들어감
- DEVONthink = 원본 문서 + 사람이 읽는 메타데이터(태그, 링크)
- 요약/분석은 RAG로 실시간 생성하면 되므로 별도 캐싱 불필요
- 비전 모델의 OCR 결과만 DEVONthink 본문에 반드시 병합 (검색성 확보)
법령 자동 수집 및 변경 알림 시스템
→ 산업안전 상세 설계서 §3 참조
한국(매일), 미국(주1), 일본(주1), EU(월1) 법령 API를 law_monitor.py로 폴링.
변경 감지 시 DEVONthink 자동 저장 + Synology Chat 알림 + OmniFocus 작업 생성.
각국 법령은 저작권 보호 대상이 아니므로 수집에 법적 문제 없음.
자동화 파이프라인
문서 수집 파이프라인 (Ingestion)
[입력 소스] [처리] [출력]
웹 클리핑 ──────┐
DEVONagent ────┤ ┌──────────────┐
스캔 문서 ──────┼──► Inbox ──►│ Smart Rule │──► 자동 태깅
이메일 ────────┤ │ + Ollama API │ + 적절한 DB로 이동
파일 드롭 ──────┘ │ + GPU 서버 │ + 벡터 인덱싱 (ChromaDB)
└──────────────┘ + OCR 텍스트 병합 (스캔 시)
▼
OmniFocus 작업 생성
(액션 아이템 감지 시)
Smart Rules 설계
Rule 1: AI 자동 태깅 + 도메인 DB 라우팅 (새 문서 도착 시)
트리거: Inbox DB에 새 문서 추가
조건: 태그가 비어있음
동작:
1. 이미지/스캔 문서 → GPU 서버 VL-7B로 OCR → 본문에 병합
2. Mac mini 35B → 태그 + 분류 대상 DB 생성 → DEVONthink 태그에만 저장
3. GPU 서버 nomic-embed → 벡터화 → ChromaDB에만 저장
4. 태그 기반 도메인 DB 자동 이동:
#주제/프로그래밍, #주제/AI-ML → 05_Programming
#주제/공학, #주제/네트워크 → 03_Engineering
#주제/산업안전, #주제/규정 → 04_Industrial safety
#주제/도면, #주제/설계 → 97_Production drawing
#주제/철학, #주제/인문 → 01_Philosophie
#주제/어학, #주제/번역 → 02_Language
#주제/독서, #주제/서평 → 07_General Book
#주제/규격, #주제/레퍼런스 → 99_Reference Data
#주제/한국기술, #주제/국내규정 → 99_Technicalkorea
미분류 / 복합 태그 → 00_Note_BOX (폴백)
※ 요약은 별도 저장하지 않음 (RAG로 실시간 생성)
Rule 2: 이메일 아카이브 자동 정리
트리거: Archive DB에 새 이메일 추가
조건: MIME 타입이 이메일
동작:
1. 발신자 기준 그룹 자동 생성/분류
2. 첨부파일 추출 → 태그 기반 도메인 DB로 복제 (기술문서→03, 도면→97 등)
3. GPU 서버에서 벡터 임베딩 → ChromaDB 인덱싱
※ 이메일 요약은 저장하지 않음 (RAG로 검색 시 생성)
Rule 3: 프로젝트 문서 → OmniFocus 연동
트리거: Projects DB에 새 문서 추가
조건: 텍스트에 "TODO", "할일", "□" 패턴 존재
동작:
1. AppleScript로 텍스트에서 액션 아이템 추출
2. OmniFocus에 작업 생성 (DEVONthink 링크 포함)
3. 커스텀 메타데이터에 OmniFocus Task ID 저장
핵심 AppleScript 모듈
모듈 A: Ollama 연동 스크립트
-- DEVONthink 4 Smart Rule에서 호출
-- 문서를 Ollama API로 보내 태그 생성 + GPU 서버로 벡터 인덱싱
on performSmartRule(theRecords)
repeat with theRecord in theRecords
set docText to plain text of theRecord
set docUUID to uuid of theRecord
if length of docText > 4000 then
set docText to text 1 thru 4000 of docText
end if
-- Step 1: Mac mini 35B → 태그 + 분류 대상 DB/그룹 생성
set shellCmd to "curl -s http://localhost:11434/api/generate -d '{" & ¬
"\"model\": \"qwen3.5:35b-a3b-q4_K_M\"," & ¬
"\"prompt\": \"다음 문서를 분석하고 JSON으로 응답해줘.\\n" & ¬
"{\\\"tags\\\": [최대5개_한글태그],\\n" & ¬
" \\\"domain_db\\\": \\\"DB이름\\\",\\n" & ¬
" \\\"sub_group\\\": \\\"하위그룹경로\\\"}\\n\\n" & ¬
"domain_db 선택지: 00_Note_BOX, 01_Philosophie, 02_Language, " & ¬
"03_Engineering, 04_Industrial safety, 05_Programming, " & ¬
"07_General Book, 97_Production drawing, 99_Reference Data, " & ¬
"99_Technicalkorea\\n" & ¬
"sub_group 예시: 10_Legislation/Notice, 50_Practice/Risk_Assessment, " & ¬
"40_Cases/Domestic 등 (해당 DB의 그룹 경로)\\n\\n" & ¬
docText & "\"," & ¬
"\"stream\": false" & ¬
"}'"
set jsonResult to do shell script shellCmd
-- Step 2: 태그 파싱 → DEVONthink 태그 설정
set parseCmd to "echo " & quoted form of jsonResult & ¬
" | python3 -c \"import sys,json; " & ¬
"r=json.loads(sys.stdin.read()); " & ¬
"d=json.loads(r['response']); " & ¬
"print(d.get('domain_db','00_Note_BOX') + '|' + " & ¬
"d.get('sub_group','00_Inbox') + '|' + " & ¬
"','.join(d.get('tags',[])))\""
try
set classResult to do shell script parseCmd
set AppleScript's text item delimiters to "|"
set resultParts to text items of classResult
set targetDB to item 1 of resultParts
set targetGroup to item 2 of resultParts
set tagResult to item 3 of resultParts
set AppleScript's text item delimiters to ""
-- 태그 설정
set tags of theRecord to tagResult
-- Step 3: 도메인 DB로 이동 + 하위 그룹 라우팅
set targetDatabase to missing value
repeat with db in databases
if name of db is targetDB then
set targetDatabase to db
exit repeat
end if
end repeat
if targetDatabase is not missing value then
-- 하위 그룹 경로 확인/생성 후 이동
set groupPath to "/" & targetGroup
set targetLocation to create location groupPath in targetDatabase
move record theRecord to targetLocation
end if
end try
-- Step 4: GPU 서버 → 벡터 임베딩 → ChromaDB 인덱싱 (비동기)
do shell script "python3 ~/scripts/embed_to_chroma.py " & ¬
quoted form of docUUID & " &"
-- Step 5: 처리 완료 표시
add custom meta data (current date) ¬
for "lastAIProcess" to theRecord
end repeat
end performSmartRule
모듈 B: DEVONthink ↔ OmniFocus 양방향 연동
-- DEVONthink 4 문서에서 OmniFocus 작업 생성
on createOmniFocusTask(theRecord)
tell application id "DNtp"
set docName to name of theRecord
set docLink to reference URL of theRecord
set docUUID to uuid of theRecord
end tell
tell application "OmniFocus"
tell default document
set newTask to make new inbox task with properties {
name: "처리: " & docName,
note: "DEVONthink 문서: " & docLink & return & ¬
"UUID: " & docUUID
}
set taskID to id of newTask
end tell
end tell
-- DEVONthink에 역링크 저장
tell application id "DNtp"
add custom meta data taskID ¬
for "omnifocusTaskID" to theRecord
end tell
return taskID
end createOmniFocusTask
모듈 C: Claude API 심층 분석
-- 복잡한 문서 분석이 필요할 때 Claude API 호출
-- (Ollama 대비 고품질 분석이 필요한 경우)
on analyzeWithClaude(theRecord)
tell application id "DNtp"
set docText to plain text of theRecord
end tell
-- Claude API 키는 macOS Keychain에 저장
set apiKey to do shell script ¬
"security find-generic-password -s 'claude-api-key' -w"
set shellCmd to "curl -s https://api.anthropic.com/v1/messages " & ¬
"-H 'x-api-key: " & apiKey & "' " & ¬
"-H 'anthropic-version: 2023-06-01' " & ¬
"-H 'content-type: application/json' " & ¬
"-d '{\"model\":\"claude-sonnet-4-6\"," & ¬
"\"max_tokens\":2048," & ¬
"\"messages\":[{\"role\":\"user\"," & ¬
"\"content\":\"다음 문서를 심층 분석해줘. " & ¬
"핵심 개념, 관련 키워드, 액션 아이템, " & ¬
"관련 문서 검색을 위한 시맨틱 태그를 JSON으로: " & ¬
docText & "\"}]}'"
set result to do shell script shellCmd
return result
end analyzeWithClaude
Synology NAS 연동
WebDAV 동기화 설정
Synology에서 WebDAV Server 패키지를 설치하고 DEVONthink 4 동기화를 설정합니다.
WebDAV 동기화 (구성 완료):
· URL: https://webdav.hyungi.net/Document_Server/DEVONThink/
· 기존 도메인 DB 10개 — 이미 동기화 중
신규 DB 동기화 추가:
· Archive, Projects → WebDAV 동기화에 포함
· Inbox → CloudKit 별도 동기화 (MacBook 연동용)
MailPlus → DEVONthink 아카이브
방법 1: IMAP 직접 연결
- DEVONthink 4 → File → Import → Email
- MailPlus IMAP 서버: [NAS-IP]:993 (SSL)
- 주기적으로 가져오기 (Smart Rule로 자동화)
방법 2: 자동화 스크립트 (권장)
- MailPlus API → Python 스크립트 → DEVONthink Apple Event
- Cron 또는 launchd로 주기 실행
Synology Chat → DEVONthink 아카이브
#!/usr/bin/env python3
"""
Synology Chat 메시지를 DEVONthink 4로 아카이브하는 스크립트
launchd로 매일 1회 실행
"""
import requests
import subprocess
import json
from datetime import datetime, timedelta
SYNOLOGY_URL = "https://[NAS-IP]:5001"
CHAT_TOKEN = "YOUR_CHAT_BOT_TOKEN" # Keychain에서 가져오는 것 권장
def fetch_chat_messages(channel_id, since_days=1):
"""Synology Chat API로 메시지 가져오기"""
since = datetime.now() - timedelta(days=since_days)
url = f"{SYNOLOGY_URL}/webapi/entry.cgi"
params = {
"api": "SYNO.Chat.Post",
"method": "list",
"version": 1,
"token": CHAT_TOKEN,
"channel_id": channel_id,
"limit": 100
}
resp = requests.get(url, params=params, verify=False)
return resp.json().get("data", {}).get("posts", [])
def send_to_devonthink(text, title, tags):
"""AppleScript를 통해 DEVONthink 4에 문서 생성"""
script = f'''
tell application id "DNtp"
set theDB to open database "/path/to/Archive.dtBase2"
set theGroup to get record at "/Chat Archive/{datetime.now().strftime('%Y/%m')}" in theDB
if theGroup is missing value then
set theGroup to create location "/Chat Archive/{datetime.now().strftime('%Y/%m')}" in theDB
end if
set theRecord to create record with {{
name: "{title}",
type: markdown,
plain text: "{text}",
tags: "{tags}"
}} in theGroup
end tell
'''
subprocess.run(["osascript", "-e", script])
if __name__ == "__main__":
messages = fetch_chat_messages("general")
digest = "\\n".join([f"**{m['user']}**: {m['msg']}" for m in messages])
title = f"Chat Digest - {datetime.now().strftime('%Y-%m-%d')}"
send_to_devonthink(digest, title, "채팅로그,아카이브")
백업 전략
┌─────────────────────────────────────────────┐
│ 백업 3-2-1 전략 │
├─────────────────────────────────────────────┤
│ │
│ Mac mini (원본) │
│ └── DEVONthink DB (내장 SSD 4TB) │
│ │ │
│ ├── [실시간] WebDAV Sync → NAS SSD │
│ │ (DEVONthink 내장 동기화) │
│ │ │
│ ├── [매일] Time Machine → NAS HDD │
│ │ (전체 시스템 백업) │
│ │ │
│ └── [주간] Hyper Backup → 외부/클라우드 │
│ (NAS에서 2차 백업) │
│ │
│ NAS 스토리지 배치: │
│ ├── SSD (SAT5220 480GB): WebDAV Sync Store │
│ ├── HDD RAID: Time Machine + Hyper Backup │
│ └── SSD (EVO 870 4TB): 문서/사진 서비스 볼륨 │
└─────────────────────────────────────────────┘
AI 통합 아키텍처
하드웨어별 모델 배치
Mac mini는 메인 범용 모델, GPU 서버는 특화 모델 팜 + 미디어 서버로 역할을 분리합니다.
┌─────────────────────────────────────────────────────────────────┐
│ 🖥️ Mac mini M4 Pro (메인 AI 허브) │
│ 64GB 통합메모리 · Neural Engine │
│ │
│ ┌───────────────────────────────────┐ ┌─────────────────────┐ │
│ │ 🧠 메인 모델 │ │ 📡 클라우드 │ │
│ │ Qwen3.5-35B-A3B (4Q) │ │ Claude API │ │
│ │ │ │ (Sonnet 4.6) │ │
│ │ MoE: 35B 파라미터, 3B 활성 │ │ │ │
│ │ 메모리: ~20GB │ │ 심층 분석 │ │
│ │ 속도: ~80 tok/s │ │ 복잡한 요약 │ │
│ │ │ │ 리서치 합성 │ │
│ │ 용도: │ │ 보고서 생성 │ │
│ │ · Smart Rule 자동 태깅/분류 │ │ │ │
│ │ · 문서 요약 │ │ 응답: ~3초 │ │
│ │ · 메타데이터 생성 │ │ 비용: API 과금 │ │
│ │ · 액션 아이템 추출 │ └─────────────────────┘ │
│ │ · RAG 질의 응답 │ │
│ │ · DEVONagent 결과 분석 │ │
│ │ │ │
│ │ 품질: 9B 대비 현저히 높음 │ │
│ │ 비용: 무료 (로컬) │ │
│ └───────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
로컬 네트워크 API
(http://gpu-server:11434)
│
┌─────────────────────────────────────────────────────────────────┐
│ ⚡ GPU 서버 (특화 모델 팜 + 미디어) │
│ RTX 4070 Ti Super 16GB VRAM │
│ │
│ ┌──────────────────────┐ ┌──────────────────────────────────┐ │
│ │ 👁️ 비전 모델 │ │ 🔍 리랭커 (Reranker) │ │
│ │ Qwen2.5-VL-7B (8Q) │ │ bge-reranker-v2-m3 │ │
│ │ VRAM: ~8GB │ │ VRAM: ~1GB │ │
│ │ │ │ │ │
│ │ 용도: │ │ 용도: │ │
│ │ · 스캔 문서 분석 │ │ · RAG 검색 품질 극대화 │ │
│ │ · 이미지 캡션/태깅 │ │ · 임베딩 검색 후 정밀 재정렬 │ │
│ │ · 차트/그래프 해석 │ │ · Top-K → Top-N 정확도 향상 │ │
│ │ · 사진 자동 분류 │ │ │ │
│ │ · OCR 보완 │ │ │ │
│ └──────────────────────┘ └──────────────────────────────────┘ │
│ │
│ ┌──────────────────────┐ ┌──────────────────────────────────┐ │
│ │ 🔗 임베딩 모델 │ │ 📊 VRAM 배분 │ │
│ │ nomic-embed-text │ │ │ │
│ │ VRAM: ~0.3GB │ │ 비전 모델 (8Q): ~8GB │ │
│ │ │ │ 리랭커: ~1GB │ │
│ │ 용도: │ │ 임베딩: ~0.3GB │ │
│ │ · 문서 벡터 임베딩 │ │ 시스템: ~2GB │ │
│ │ · RAG 인덱싱 │ │ ───────────────────── │ │
│ │ · 쿼리 임베딩 │ │ 합계: ~11.3GB / 16GB │ │
│ │ │ │ 여유: ~4.7GB ✅ │ │
│ │ ※ GPU 가속으로 │ │ │ │
│ │ 대량 임베딩 시 유리 │ │ │ │
│ └──────────────────────┘ └──────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 🎬 미디어 서비스 │ │
│ │ Plex Media Server — GPU 하드웨어 트랜스코딩 활용 │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
임베딩을 GPU 서버로 이전하는 이유
임베딩 모델(nomic-embed-text)을 Mac mini에서 GPU 서버로 이전하는 것을 권장합니다:
| 비교 항목 | Mac mini에서 실행 | GPU 서버에서 실행 |
|---|---|---|
| 대량 인덱싱 속도 | CPU 기반, 느림 | CUDA 가속, 5-10배 빠름 |
| Mac mini 부하 | 35B 모델 + 임베딩 동시 시 경합 | 35B 모델 전용, 쾌적 |
| VRAM 영향 | 해당 없음 | +0.3GB (무시할 수준) |
| 네트워크 레이턴시 | 없음 | 2.5G 네트워크, 1ms 미만 |
| 배치 처리 | 문서 100개 인덱싱 시 수분 | 문서 100개 인덱싱 시 수십초 |
| ChromaDB 위치 | Mac mini 유지 | Mac mini 유지 (변동 없음) |
결론: 임베딩 모델은 단일 요청 레이턴시보다 배치 처리량이 중요합니다. GPU 서버의 CUDA 가속을 활용하면 대량 문서 인덱싱이 훨씬 빨라지고, Mac mini의 통합메모리를 35B 모델에 온전히 할당할 수 있습니다. nomic-embed-text는 0.3GB에 불과해 GPU 서버 VRAM에 거의 영향이 없고, 2.5G 네트워크 환경이라 API 호출 레이턴시도 무시할 수준입니다.
다만 ChromaDB는 Mac mini에 유지합니다. RAG 질의 시 벡터 검색 → 리랭킹 → 35B 응답 생성이 연속으로 일어나는데, 벡터 DB가 로컬에 있어야 이 파이프라인이 가장 빠릅니다.
3-Tier AI 라우팅 전략
┌──────────────────────────────┐
│ 작업 라우터 (AppleScript) │
│ 문서 유형 + 복잡도 기반 분기 │
└──────────┬───────────────────┘
│
┌────────────────────┼────────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌──────────────┐ ┌────────────────────┐
│ Tier 1: 로컬 │ │ Tier 2: API │ │ Tier 3: 특화 │
│ Mac mini │ │ Claude │ │ GPU 서버 │
│ (메인) │ │ (클라우드) │ │ (보조) │
├─────────────────┤ ├──────────────┤ ├────────────────────┤
│ Qwen3.5-35B-A3B │ │ Sonnet 4.6 │ │ Qwen2.5-VL-7B (8Q)│
│ 4Q / ~80 tok/s │ │ │ │ bge-reranker-v2-m3 │
│ │ │ │ │ nomic-embed-text │
├─────────────────┤ ├──────────────┤ ├────────────────────┤
│ · 자동 태깅/분류 │ │ · 심층 분석 │ │ · 이미지/스캔 분석 │
│ · 문서 요약 │ │ · 리서치 합성 │ │ · RAG 리랭킹 │
│ · 메타데이터 │ │ · 보고서 생성 │ │ · 문서 임베딩/인덱싱│
│ · 액션아이템추출 │ │ · 복잡한 추론 │ │ · 사진 자동 분류 │
│ · RAG 응답생성 │ │ · 다국어 번역 │ │ · OCR 후처리 │
├─────────────────┤ ├──────────────┤ ├────────────────────┤
│ 속도: ~80 tok/s │ │ 속도: ~3초 │ │ 속도: GPU 가속 │
│ 비용: 무료 │ │ 비용: 과금 │ │ 비용: 무료 │
│ 품질: ★★★★☆ │ │ 품질: ★★★★★ │ │ 품질: 영역별 최고 │
└─────────────────┘ └──────────────┘ └────────────────────┘
라우팅 규칙 (상세):
| 조건 | 라우팅 | 이유 |
|---|---|---|
| 텍스트 문서 + 태깅/분류/요약 | Tier 1 (Mac mini 35B) | 메인 범용, 품질 충분 |
| 이미지 포함 문서 / 스캔 PDF | Tier 3 → Tier 1 | 비전 모델로 텍스트 추출 후 35B로 분석 |
| 심층 분석 / 긴 보고서 생성 | Tier 2 (Claude API) | 최고 품질 필요 시 |
| RAG 검색 결과 리랭킹 | Tier 3 (GPU reranker) | 검색 정확도 극대화 |
| RAG 최종 응답 생성 | Tier 1 (Mac mini 35B) | 컨텍스트 기반 응답 |
| 새 문서 벡터 인덱싱 | Tier 3 (GPU embed) | CUDA 가속 배치 처리 |
| 대량 배치 (100+ 문서) | Tier 1 + Tier 3 병렬 | 양쪽 분산 처리 |
| Synology Photos 자동 태깅 | Tier 3 (GPU vision) | 이미지 분석 특화 |
모델 간 협업 파이프라인
예시: 스캔 문서가 DEVONthink에 들어왔을 때
1. [Smart Rule 트리거] 새 PDF 감지, 이미지 기반 문서로 판단
│
2. [GPU 서버 · Qwen2.5-VL-7B 8Q]
이미지 분석 → 텍스트 추출 (OCR) → DEVONthink 본문에 병합
│
3. [Mac mini · Qwen3.5-35B-A3B]
추출된 텍스트로 태그 생성 → DEVONthink 태그에만 저장
│
4. [GPU 서버 · nomic-embed-text]
문서 벡터 임베딩 → ChromaDB에만 저장
│
5. [결과] DEVONthink에는 본문(OCR)+태그+처리일시만
ChromaDB에는 벡터만. 요약은 저장하지 않음 (RAG로 실시간 생성)
예시: RAG 질의 시
1. [사용자 질문] "서버 마이그레이션 관련 자료 정리해줘"
│
2. [GPU 서버 · nomic-embed-text] 쿼리 임베딩
│
3. [Mac mini · ChromaDB] 벡터 유사도 검색 → Top-20 후보
│
4. [GPU 서버 · bge-reranker-v2-m3]
Top-20 → 정밀 리랭킹 → Top-5 선정
│
5. [Mac mini · Qwen3.5-35B-A3B]
Top-5 컨텍스트 + 질문 → 종합 답변 생성
(x-devonthink-item:// 출처 링크 포함)
GPU 서버 Ollama 멀티모델 운영
# GPU 서버 Ollama 설정 (/etc/systemd/system/ollama.service)
# 환경변수:
OLLAMA_HOST=0.0.0.0:11434 # 네트워크 노출
OLLAMA_NUM_PARALLEL=2 # 동시 요청 2개
OLLAMA_MAX_LOADED_MODELS=3 # 동시 로드 모델 3개 (비전+리랭커+임베딩)
OLLAMA_KEEP_ALIVE=10m # 미사용 시 10분 후 언로드
# 모델 다운로드
ollama pull qwen2.5-vl:7b-instruct-q8_0 # 비전 모델 8Q (~8GB)
ollama pull bge-reranker-v2-m3 # 리랭커 (~1GB)
ollama pull nomic-embed-text # 임베딩 (~0.3GB)
# Mac mini에서 GPU 서버 호출 예시
# 비전 분석
curl http://gpu-server:11434/api/generate \
-d '{"model":"qwen2.5-vl:7b-instruct-q8_0", ...}'
# 임베딩 (배치)
curl http://gpu-server:11434/api/embed \
-d '{"model":"nomic-embed-text", "input":["문서1 텍스트", "문서2 텍스트", ...]}'
keep_alive 활용 전략:
- 비전 모델 (8Q):
keep_alive: "30m"— 자주 사용, 항상 대기 - 리랭커:
keep_alive: "10m"— RAG 쿼리 시 활성 - 임베딩:
keep_alive: "30m"— 새 문서 인덱싱 빈도에 맞춰
세 모델 모두 상주시켜도 ~9.3GB로 16GB VRAM의 58% 수준입니다.
RAG 시스템 구성
┌─────────────────────────────────────────────────────┐
│ RAG 파이프라인 │
│ │
│ [DEVONthink DB] (Mac mini) │
│ │ │
│ ▼ │
│ [문서 추출] ← Smart Rule (새 문서 추가 시 트리거) │
│ │ │
│ ▼ │
│ [청킹] → 의미 단위로 텍스트 분할 (500토큰) │
│ │ │
│ ▼ │
│ [임베딩] → GPU 서버 Ollama (nomic-embed-text, CUDA) │
│ │ │
│ ▼ │
│ [벡터 저장] → ChromaDB (Mac mini 로컬) │
│ │ │
│ ─ ─ ─ ─ ─ ─ 쿼리 시 ─ ─ ─ ─ ─ ─ │
│ │ │
│ [질문 입력] │
│ │ │
│ ▼ │
│ [쿼리 임베딩] → GPU 서버 (nomic-embed-text) │
│ │ │
│ ▼ │
│ [유사도 검색] → ChromaDB (Mac mini, Top-20) │
│ │ │
│ ▼ │
│ [리랭킹] → GPU 서버 (bge-reranker, Top-5 선정) │
│ │ │
│ ▼ │
│ [컨텍스트 조합] + 원본 DEVONthink 링크 │
│ │ │
│ ▼ │
│ [LLM 응답] → Mac mini (35B) 또는 Claude API │
│ └── 출처 링크 포함 (x-devonthink-item://UUID) │
└─────────────────────────────────────────────────────┘
DEVONagent + AI 리서치 자동화
검색 세트 전체 구성
Mac mini 자동 스케줄 (9개 검색 세트)
안전 분야 (7종, 상세 → 산업안전 설계서 §4 참조):
├── [SS-01] 🇰🇷 한국 산업안전 뉴스 매일 06:00 15~25건/주
├── [SS-02] 🇰🇷 중대재해·판례 매일 06:15 5~10건/주
├── [SS-04] 🇺🇸 미국 안전 동향 주 1회 (월) 10~15건/주
├── [SS-05] 🇯🇵 일본 안전 동향 주 1회 (수) 5~10건/주
├── [SS-06] 🇪🇺 유럽 안전 동향 월 2회 2~4건/주
├── [SS-07] 🌐 국제 안전 전문지 주 1회 (금) 5~10건/주
└── [SS-08] 📚 학술 논문 (안전공학) 주 1회 (토) 5~10건/주
기술/일반 (2종):
├── [SS-03] 🇰🇷 한국 기술 뉴스 (IT/AI) 매일 06:30 10~15건/주
└── [SS-09] 🔧 IT/개발 뉴스 매일 06:30 10~15건/주
전체 하루 평균: ~15~20건 (안전 8~12 + 기술 5~8)
MacBook 수동 (필요 시)
├── Quick Research (미팅 전 주제 조사)
└── Deep Dive (특정 사안 심층 리서치)
※ 안전 분야 검색 세트 상세 (소스, 쿼리, 양 조절 전략)
→ 산업안전 설계서 §4 참조
수집 결과 자동 처리 흐름
DEVONagent 수집 완료
│
▼
DEVONthink Inbox 도착 (자동 전송)
│
▼
Smart Rule 1차: AI 태깅 + 도메인 DB 판단
│
├─ 산업안전 관련 → 04_Industrial Safety/00_Inbox
├─ IT/기술 관련 → 05_Programming 또는 03_Engineering
└─ 기타 → 00_Note_BOX
│
▼
Smart Rule 2차: 하위 그룹 라우팅
│
├─ 뉴스 기사 ($유형/기사)
│ ├─ 사고사례 키워드 → 40_Cases/Domestic/
│ ├─ 법령 개정 키워드 → 10_Legislation/KR_Archive/
│ ├─ 해외 태그 → 40_Cases/International/
│ └─ 일반 안전뉴스 → 00_Inbox/ (수동 분류 대기)
│
├─ 판례 ($유형/법령 + 사고사례)
│ → 60_Compliance/Audit/
│
├─ 논문 ($유형/논문)
│ → 30_Papers/
│
└─ KOSHA Guide / 기술지침
→ 80_Reference/Standards/
│
▼
ChromaDB 벡터 인덱싱 (비동기)
→ RAG 검색에 즉시 반영
│
▼
주간 다이제스트 생성 (Claude API)
├── 한 주간 수집된 자료 종합 분석
├── 핵심 트렌드 및 인사이트 추출
└── OmniOutliner로 구조화된 보고서 생성
Omni 제품군 통합
통합 맵
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ OmniFocus │◄───►│ DEVONthink │◄───►│ OmniOutliner │
│ (작업 관리) │ │ (지식 허브) │ │ (구조화 사고) │
└──────┬──────┘ └──────┬───────┘ └──────────────┘
│ │ ▲
│ │ │
▼ ▼ │
┌─────────────┐ ┌──────────────┐ │
│ OmniPlan │ │ OmniGraffle │──────────────┘
│ (프로젝트) │ │ (시각화) │
└─────────────┘ └──────────────┘
연동 시나리오
시나리오 A: 리서치 → 계획 → 실행
DEVONagent로 주제 리서치
→ 결과가 DEVONthink에 축적
→ AI가 자동 분류 및 요약
→ OmniOutliner로 리서치 결과 구조화
→ OmniPlan으로 프로젝트 타임라인 수립
→ OmniFocus에 실행 가능한 작업 분배
→ OmniGraffle로 아키텍처/프로세스 다이어그램 작성
→ 모든 산출물이 DEVONthink에 저장 (역링크 유지)
시나리오 B: 문서 처리 파이프라인
문서 도착 (스캔, 이메일, 웹클립)
→ DEVONthink OCR 처리 (필요 시)
→ Ollama 자동 분류 + 태깅
→ 액션 아이템 감지 → OmniFocus 작업 생성
→ 관련 프로젝트 연결 → OmniPlan 업데이트
→ 정기 리뷰 시 DEVONsphere로 관련 자료 탐색
OmniFocus 통합 스크립트
-- DEVONthink 4에서 선택된 문서의 액션 아이템을
-- OmniFocus 프로젝트로 일괄 생성
tell application id "DNtp"
set selectedRecords to selection
repeat with theRecord in selectedRecords
set docName to name of theRecord
set docLink to reference URL of theRecord
set docText to plain text of theRecord
end repeat
end tell
-- AI로 액션 아이템 추출
set extractCmd to "curl -s http://localhost:11434/api/generate -d '{" & ¬
"\"model\":\"qwen3.5:35b-a3b-q4_K_M\"," & ¬
"\"prompt\":\"다음 텍스트에서 할 일(TODO)만 추출해서 " & ¬
"한 줄에 하나씩 출력해줘:\\n" & docText & "\"," & ¬
"\"stream\":false}'"
set aiResult to do shell script extractCmd
-- OmniFocus에 작업 생성
tell application "OmniFocus"
tell default document
set theProject to first flattened project where name is "DEVONthink Actions"
set taskLines to paragraphs of aiResult
repeat with taskLine in taskLines
if length of taskLine > 2 then
make new task with properties {
name: taskLine,
note: "출처: " & docLink,
project: theProject
}
end if
end repeat
end tell
end tell
MacBook Pro 외부 사용 연동
MacBook Pro (M3)는 소비 + 수집 클라이언트로 위치시킵니다. 외부에서 자료를 열람/검색하고, DEVONagent로 현장 리서치를 수행하며, DEVONsphere로 시스템 전역 검색을 하되, AI 처리는 홈 서버에 위임하는 구조입니다.
동기화 구성
┌─────────────────────┐ ┌──────────────────┐
│ MacBook Pro (M3) │ ◄── CloudKit ──► │ Mac mini (허브) │
│ │ ◄── WebDAV ──► │ │
│ DEVONthink 4 │ 동기화 DB: │ DEVONthink 4 │
│ · Inbox (CloudKit) │ · Inbox │ · 전체 13개 DB │
│ · Projects (CK) │ · Projects │ │
│ · 05_Programming │ · 자주 쓰는 │ │
│ · 03_Engineering │ 도메인 DB (WebDAV)│ │
│ │ │ │
│ DEVONagent Pro │ → 결과를 Inbox에 │ DEVONagent Pro │
│ (현장 리서치) │ → CloudKit 동기화 │ (자동 스케줄) │
│ │ │ │
│ DEVONsphere Express │ (로컬 전역 검색) │ DEVONsphere │
│ │ │ │
│ OmniFocus │ ◄── 자체 동기화 ──► │ OmniFocus │
│ OmniOutliner │ ◄── 자체 동기화 ──► │ OmniOutliner │
└─────────────────────┘ └──────────────────┘
동기화 전략:
- Inbox, Projects → CloudKit (빠른 동기화, 용량 작음)
- 자주 참조하는 도메인 DB → WebDAV 선택 동기화 (예: 05_Programming, 03_Engineering 등 업무에 따라 선택)
- 나머지 도메인 DB → 맥북에 동기화하지 않음 (용량 절약, 필요 시 Tailscale RAG로 검색)
- Archive → 맥북에 동기화하지 않음 (MailPlus 메일은 웹으로 직접 접근)
- 필요 시 Archive를 선택적으로 WebDAV 동기화 가능
DEVONsphere Express — 맥북의 만능 검색 입구
DEVONthink를 열지 않고도 단축키 하나로 모든 자료를 즉시 찾는 도구입니다. 맥북에서는 특히 가치가 높습니다:
검색 범위:
├── DEVONthink 동기화 DB (Inbox, Projects, 선택한 도메인 DB들)
├── DEVONthink Archive DB ← MailPlus 메일이 여기로 IMAP 임포트됨
├── 로컬 파일 (문서, 다운로드 등)
├── 브라우저 북마크 / 히스토리
└── 연락처
⚠️ Synology MailPlus 메일 검색:
DEVONsphere의 "Mail" 검색은 Apple Mail.app 전용입니다.
MailPlus를 쓰는 경우, 메일은 IMAP → DEVONthink Archive DB로
자동 임포트되므로 DEVONthink DB 검색을 통해 메일도 검색됩니다.
즉, MailPlus 메일도 DEVONsphere에서 찾을 수 있습니다.
사용 시나리오:
· 미팅 중 "그 보고서 어디 있었지?" → Ctrl+Cmd+Space → 즉시 검색
· "지난달 받은 견적서 어디 있지?" → Archive DB의 MailPlus 메일에서 검색
· 브라우저에서 읽다가 관련 자료 찾기 → DEVONsphere가 유사도까지 표시
· DEVONthink 열기 귀찮을 때 빠르게 문서 미리보기
· Spotlight보다 정확한 결과 (DEVONthink AI 유사도 기반)
설정 팁:
- 시작 시 자동 실행 (로그인 항목에 추가)
- 메모리: ~50MB 수준, 배터리 영향 무시
- 단축키:
Ctrl+Cmd+Space(기본값, Spotlight와 충돌 시 변경)
DEVONagent Pro — 맥북에서의 역할 분담
Mac mini에서는 자동 스케줄 리서치, 맥북에서는 현장 수동 리서치로 역할을 나눕니다.
┌─────────────────────────────────────────────────────────┐
│ DEVONagent 역할 분담 │
├────────────────────────┬────────────────────────────────┤
│ Mac mini (자동화) │ MacBook Pro (현장) │
├────────────────────────┼────────────────────────────────┤
│ 스케줄 검색 세트 │ 수동 딥 리서치 │
│ · 매일 06:00 자동 실행 │ · 미팅 전 주제 사전 조사 │
│ · 기술뉴스, 학술논문 등 │ · 새 프로젝트 킥오프 자료 수집 │
│ · 결과 → Inbox → AI 태깅│ · 현장에서 발생한 주제 즉시 리서치│
│ │ │
│ 배치 + 자동화 중심 │ 인터랙티브 + 즉시성 중심 │
├────────────────────────┴────────────────────────────────┤
│ 공통: 결과는 모두 DEVONthink Inbox → CloudKit 동기화 │
│ → Mac mini Smart Rule이 자동 태깅 + ChromaDB 인덱싱 │
└─────────────────────────────────────────────────────────┘
맥북에서 DEVONagent가 브라우저보다 나은 점:
- 여러 검색엔진(Google, Bing, DuckDuckGo, 학술 DB 등)을 동시에 돌림
- 결과를 자동 중복 제거 + 관련도 정렬
- 한 번에 DEVONthink Inbox로 전송 (개별 웹클리핑 불필요)
- 검색 세트를 저장해두면 같은 주제 후속 리서치가 빠름
맥북 전용 검색 세트 추천:
검색 세트 예시:
· "Quick Research" — Google + DuckDuckGo + Wikipedia, 상위 20개 결과
→ 미팅 전 빠른 사전 조사용
· "Academic Deep" — Google Scholar + arXiv + Semantic Scholar
→ 논문/기술 자료 심층 검색용
· "Industry News" — 커스텀 RSS/사이트 기반
→ 업계 동향 현장 체크용
워크플로우: 외부 미팅 시나리오
미팅 30분 전
→ DEVONagent "Quick Research"로 상대방/주제 검색
→ 결과 한 번에 Inbox로 전송
→ DEVONsphere로 내 기존 자료 중 관련 문서 탐색
→ 두 결과를 조합해 미팅 준비 완료
미팅 중
→ DEVONsphere로 키워드 즉시 검색 (관련 자료 찾기)
→ 메모를 DEVONthink Inbox에 마크다운으로 작성
미팅 후
→ CloudKit 동기화 → Mac mini가 자동 처리
→ 태깅 + 인덱싱 완료 → 다음에 RAG로 "지난 미팅 내용" 질의 가능
외부에서 RAG 접근
맥북에서도 내 지식베이스에 질문하고 싶을 때를 위한 두 가지 방안:
방안 A: Tailscale VPN (권장)
MacBook Pro → Tailscale → Mac mini:11434 (Ollama)
→ Mac mini:8000 (RAG API)
장점: 설정 간단, 어디서든 접속, 별도 포트포워딩 불필요
구현: Mac mini에 간단한 RAG API 서버 (FastAPI) 하나 띄우면
맥북에서 웹 브라우저나 Shortcuts로 질의 가능
방안 B: Synology 경유 역방향 프록시
MacBook Pro → Synology DDNS → 역방향 프록시 → Mac mini RAG API
장점: 이미 NAS 인프라 활용, HTTPS 자동 (Let's Encrypt)
단점: NAS 설정 필요, 보안 관리 포인트 추가
맥북에서의 워크플로우
[외부 작업 시]
DEVONthink에서 자료 검색/열람 (동기화된 DB)
→ 웹클리핑/메모 → Inbox에 저장 → CloudKit으로 Mac mini에 동기화
→ Mac mini Smart Rule이 자동 태깅 + 인덱싱 (비동기)
→ 다음에 맥북 열면 결과 동기화되어 있음
[RAG 질의 시]
Tailscale 연결 → RAG API에 자연어 질문
→ Mac mini에서 GPU 임베딩 → ChromaDB 검색 → 리랭킹 → 35B 응답
→ 결과에 x-devonthink-item:// 링크 포함
→ 맥북 DEVONthink에서 해당 문서 바로 열기
[OmniFocus 연동]
맥북에서 완료한 작업 → 자체 동기화로 Mac mini에 반영
→ Mac mini AppleScript가 DEVONthink 메타데이터 업데이트
맥북에 Ollama 로컬을 올릴 필요가 있는가?
권장: 올리지 않음. M3 맥북에서 35B 모델을 돌리면 배터리 소모가 크고, 주 용도가 DEVONthink 브라우징+검색이라면 DEVONthink 자체 검색 + VPN 경유 RAG API로 충분합니다. 오프라인이 필요한 상황이라면 가벼운 모델(Qwen3.5-3B 등)을 올리는 것은 선택 가능합니다.
일일 워크플로우
아침 루틴 (자동)
06:00 DEVONagent 자동 검색 실행
06:30 검색 결과 → DEVONthink Inbox
06:31 Smart Rule → Ollama 자동 분류/태깅
07:00 MailPlus 새 메일 → DEVONthink Archive
07:01 Chat 메시지 다이제스트 → DEVONthink Archive
작업 시 (수동 + 반자동)
DEVONsphere Express로 관련 자료 즉시 검색
DEVONthink에서 문서 작업 → 자동으로 OmniFocus 작업 생성
OmniOutliner로 아이디어 구조화 → DEVONthink에 저장
RAG 시스템으로 내 지식베이스에 질문
Daily Digest (자동 — 매일 20:00)
전체 DB의 하루 변화를 자동 집계하여 MD 파일 + OmniFocus 액션으로 분리 배달합니다.
실행 주체: pkm_daily_digest.py (launchd, 매일 20:00)
수집 대상:
DEVONthink → 오늘 추가/수정된 문서 (모든 DB)
법령 모니터 → 법령 제·개정 감지 건
DEVONagent → 오늘 수집된 뉴스/자료 수
TKSafety → 동기화된 업무 데이터 (활성화 시)
OmniFocus → 오늘 완료/추가/기한초과 작업
출력 1 — MD 다이제스트 (읽기용):
저장: 00_Note_BOX/Daily_Digest/2026-03-24_digest.md
형식:
┌─────────────────────────────────────────────┐
│ 📋 PKM Daily Digest — 2026-03-24 (월) │
├─────────────────────────────────────────────┤
│ │
│ ■ 문서 현황 │
│ 신규 12건 | 수정 3건 | 자동분류 10건 │
│ Inbox 미처리 2건 │
│ │
│ ■ DB별 변동 │
│ 04_Industrial Safety +5 (뉴스3, 법령1, 업무1)│
│ 03_Engineering +3 │
│ 05_Programming +2 │
│ 99_Reference Data +2 │
│ │
│ ■ 법령 변경 │
│ ⚠ 산업안전보건법 시행규칙 일부개정 │
│ (시행일: 2026-04-01) │
│ ⚠ OSHA CFR 1926.502 — Fall Protection │
│ (Proposed Rule Change) │
│ │
│ ■ 주요 뉴스 (DEVONagent 수집) │
│ · 국내 안전: 8건 수집 │
│ · 해외 안전: 4건 수집 │
│ · 상위 3건 요약 (Ollama 35B 생성) │
│ │
│ ■ TKSafety 동기화 (활성화 시) │
│ 위험성평가 2건 | 순회점검 1건 │
│ 시정조치 overdue 1건 ⚠ │
│ │
│ ■ OmniFocus 요약 │
│ 완료 5건 | 신규 3건 | 기한초과 1건 │
│ │
│ ■ 시스템 상태 │
│ ChromaDB 벡터: 12,847개 (+15) │
│ Inbox 잔여: 2건 │
│ NAS 동기화: 정상 │
└─────────────────────────────────────────────┘
출력 2 — OmniFocus 액션 (행동이 필요한 것만):
자동 생성 조건:
· 법령 변경 감지 → "법령 변경 검토: [법령명]" (프로젝트: PKM/법령리뷰)
· Inbox 미처리 3건 이상 → "Inbox 정리 필요 (N건 미분류)"
· 시정조치 overdue → "시정조치 기한초과: [내용]" (긴급 플래그)
· 분류 실패 문서 존재 → "수동 분류 필요 (N건)"
· ChromaDB 인덱싱 실패 → "벡터 인덱싱 오류 점검"
출력 3 — Synology Chat 알림 (선택, 한 줄 요약):
"📋 오늘 다이제스트: 신규 12건, 법령변경 2건, overdue 1건 ⚠"
→ DEVONthink 다이제스트 파일 링크 포함
데이터 수집 방법 (AppleScript + Python 혼합):
1. DEVONthink 문서 수집 — AppleScript
tell application id "DNtp"
set todayDocs to search "date:today" in database "..."
end tell
→ 각 DB별 today 신규/수정 건수 집계
2. 법령 변경 — law_monitor.py 로그 파싱
~/logs/law_monitor/ 에서 오늘자 변경 감지 로그 읽기
3. DEVONagent 수집 현황 — DEVONagent 로그 또는 Inbox 카운트
오늘 수집된 문서 중 sourceChannel = devonagent 카운트
4. OmniFocus 현황 — AppleScript
tell application "OmniFocus"
set todayCompleted to completed tasks whose completion date is today
end tell
5. 시스템 상태 — Python
ChromaDB collection.count(), NAS ping, sync 로그 확인
6. 상위 뉴스 요약 — Ollama 35B
오늘 수집된 뉴스 중 상위 3건을 2-3문장으로 요약
7. MD 생성 → DEVONthink 00_Note_BOX/Daily_Digest/에 저장
8. 액션 아이템 → OmniFocus에 자동 생성
9. (선택) Synology Chat webhook으로 알림 전송
보관 정책:
· Daily Digest MD: 90일 보관 후 90_Archive로 이동 (Smart Rule)
· 주간 요약: 매주 월요일, 지난 7일 다이제스트를 Ollama로 요약 → 주간 리포트 생성
· 월간 통계: 매월 1일, 문서 증가 추이/DB별 성장/법령 변경 이력 → 월간 리포트
저녁 리뷰 (반자동)
20:00 Daily Digest 자동 생성 (위 참조)
20:01 OmniFocus에 액션 아이템 자동 추가
DEVONthink Inbox 비우기 (AI가 대부분 처리, 검토만)
OmniFocus 리뷰 → 완료 작업의 DEVONthink 메타데이터 업데이트
주간 리뷰 시: Claude API로 한 주 다이제스트 자동 생성
설치 및 구성 순서
Phase 1: 기반 설치 (Day 1)
□ DEVONthink 4 설치 및 라이선스
□ DEVONagent Pro 설치
□ DEVONsphere Express 설치
□ OmniFocus, OmniOutliner, OmniGraffle, OmniPlan 설치
□ Ollama 확인 (이미 설치됨)
□ GPU 서버에 nomic-embed-text, Qwen2.5-VL-7B 8Q, bge-reranker 다운로드
□ ChromaDB 설치 (pip install chromadb) — Mac mini
□ Python 환경 설정 (venv 권장)
□ Plex Media Server를 GPU 서버로 이전
Phase 2: DEVONthink 설정 (Day 2-3)
□ 운영 DB 생성 (Inbox, Archive, Projects) — 기존 10개 도메인 DB는 유지
□ 기존 도메인 DB 점검 (00_Note_BOX ~ 99_Technicalkorea) — 그룹 구조 정리
□ 태그 체계 생성
□ 커스텀 메타데이터 필드 설정
□ Smart Rules 구성 (AI 자동 분류, 이메일 정리, OmniFocus 연동)
□ AppleScript 모듈 설치 및 테스트
Phase 3: Synology 연동 (Day 3-4)
□ WebDAV Server 설치 및 HTTPS 설정
□ DEVONthink WebDAV 동기화 구성
□ MailPlus IMAP → DEVONthink 가져오기 설정
□ Chat 아카이브 스크립트 설정 (launchd)
□ Time Machine 백업 대상 설정
Phase 4: AI 파이프라인 (Day 4-5)
□ Ollama 태깅/분류 프롬프트 최적화
□ Claude API 키 Keychain 등록
□ RAG 파이프라인 구축 (GPU 서버 임베딩 + Mac mini ChromaDB)
□ DEVONthink Smart Rule과 AI 연동 테스트
□ DEVONagent 자동 검색 스케줄 설정
Phase 5: Omni 통합 (Day 5-6)
□ OmniFocus 프로젝트 구조 설정
□ DEVONthink ↔ OmniFocus AppleScript 테스트
□ OmniOutliner 템플릿 생성
□ 전체 워크플로우 End-to-End 테스트
Phase 6: 최적화 (Day 7+)
□ AI 분류 정확도 모니터링 및 프롬프트 튜닝
□ 자주 쓰는 워크플로우 Keyboard Maestro/Shortcuts 등록
□ 성능 모니터링 (RAM, CPU 사용량)
□ 기존 데이터 마이그레이션 (있을 경우)
하드웨어 리소스 예상
Mac mini M4 Pro (64GB 통합메모리)
서비스 RAM CPU/GPU 비고
─────────────────────────────────────────────────────────────
DEVONthink 4 4-8GB 낮음 DB 크기에 따라
DEVONagent Pro 1-2GB 간헐적 검색 시에만
OmniFocus 0.5GB 낮음
OmniPlan 0.5GB 낮음
OmniOutliner 0.3GB 낮음
OmniGraffle 0.5GB 낮음
Ollama (Qwen3.5-35B-A3B 4Q) ~20GB 중간 MoE: 3B만 활성
ChromaDB 1-2GB 낮음
Roon Core 2-4GB 낮음
Komga 0.5GB 낮음
기타 시스템 4-6GB -
합계 예상 ~35-44GB
여유분 ~20-29GB ✅ 충분
MoE 모델의 이점: Qwen3.5-35B-A3B는 총 35B 파라미터이지만 추론 시 3B만 활성화되므로, 실제 연산량은 9B 모델보다 가벼우면서도 품질은 35B급입니다. M4 Pro의 통합메모리 + Neural Engine 조합으로 ~80 tok/s를 달성하며, 이는 Smart Rule 자동화에 실용적인 속도입니다.
Plex를 GPU 서버로 이전하고 임베딩도 GPU로 넘김으로써, Mac mini는 이전 대비 약 2GB 정도 여유가 더 생겼습니다.
GPU 서버 (RTX 4070 Ti Super 16GB VRAM)
서비스 VRAM 상태 비고
─────────────────────────────────────────────────────────────
Qwen2.5-VL-7B (8Q) ~8GB 상주 비전/이미지 분석
bge-reranker-v2-m3 ~1GB 상주 RAG 리랭킹
nomic-embed-text ~0.3GB 상주 임베딩 (CUDA 가속)
Plex HW Transcoding ~1-2GB 간헐적 NVENC/NVDEC 활용
시스템 오버헤드 ~2GB -
상주 AI 합계 ~9.3GB / 16GB ✅ 여유
Plex 트랜스코딩 포함 시 ~11.3GB / 16GB ✅ 가능
VL 모델 8Q 업그레이드 효과: 이전 4Q 대비 8Q는 VRAM을 ~3GB 더 사용하지만, 코더 모델을 제거하면서 확보한 여유분으로 충분히 커버됩니다. 비전 분석 품질이 눈에 띄게 향상되어, 스캔 문서 OCR 보완이나 사진 태깅 정확도가 올라갑니다.
Plex GPU 서버 이전 효과: RTX 4070 Ti Super의 NVENC/NVDEC 하드웨어 인코더를 활용하면 Mac mini의 소프트웨어 트랜스코딩 대비 전력 효율과 성능이 크게 개선됩니다. VRAM은 트랜스코딩 시에만 1-2GB 일시 사용하므로 AI 모델과 충돌하지 않습니다.