chore: 프로젝트 구조 + 설계 문서 초기 커밋

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-26 11:22:04 +09:00
commit bec9579a8a
8 changed files with 2591 additions and 0 deletions

1369
docs/architecture.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,302 @@
# Claude Code 실행 명령어 — PKM 시스템 구축
> 작업 위치: MacBook Pro ~/Documents/code/DEVONThink_my server/
> Claude Code를 이 디렉토리에서 실행
> 완성 후 Gitea에 push → Mac mini에서 pull
```
개발/배포 흐름:
MacBook Pro (Claude Code)
~/Documents/code/DEVONThink_my server/
→ 스크립트/설정 파일 작성
→ git commit & push
Gitea (Synology NAS)
Mac mini (git pull → 실행)
```
---
## 0단계: 프로젝트 구조 생성 + credentials.env 복사
Claude Code 실행 전에 먼저:
```bash
# MacBook Pro에서
cd ~/Documents/code/DEVONThink_my\ server/
# credentials.env를 프로젝트에 복사 (gitignore 필수!)
cp ~/.config/pkm/credentials.env ./credentials.env.example
# example은 값을 비운 템플릿용, 실제 파일은 Mac mini에서 직접 생성
# Mac mini에서 (SSH 접속 후)
mkdir -p ~/.config/pkm
nano ~/.config/pkm/credentials.env
# → 실제 인증 정보 입력
chmod 600 ~/.config/pkm/credentials.env
```
---
## 1단계: 프로젝트 구조 + requirements.txt
```
이 프로젝트의 디렉토리 구조를 만들고 기본 설정 파일들을 생성해줘.
작업 디렉토리: 현재 디렉토리 (~/Documents/code/DEVONThink_my server/)
프로젝트 구조:
./
├── README.md ← 프로젝트 설명
├── requirements.txt ← Python 패키지 목록
├── .gitignore ← credentials.env, venv, logs, __pycache__ 등 제외
├── credentials.env.example ← 인증 정보 템플릿 (값은 비움)
├── scripts/
│ ├── law_monitor.py
│ ├── mailplus_archive.py
│ ├── pkm_daily_digest.py
│ ├── embed_to_chroma.py
│ └── prompts/
│ └── classify_document.txt
├── applescript/
│ ├── auto_classify.scpt
│ └── omnifocus_sync.scpt
├── launchd/
│ ├── net.hyungi.pkm.law-monitor.plist
│ ├── net.hyungi.pkm.mailplus.plist
│ └── net.hyungi.pkm.daily-digest.plist
├── docs/
│ ├── devonagent-setup.md
│ └── deploy.md ← Mac mini 배포 방법
└── tests/
└── test_classify.py
requirements.txt에 넣을 패키지:
- chromadb
- requests
- python-dotenv
- schedule
- markdown
.gitignore에 반드시 포함:
- credentials.env
- venv/
- logs/
- __pycache__/
- *.pyc
- .DS_Store
deploy.md에는 Mac mini에서의 설치 절차 작성:
1. git pull
2. python3 -m venv venv && source venv/bin/activate
3. pip install -r requirements.txt
4. credentials.env는 ~/.config/pkm/credentials.env에 별도 관리
5. launchd plist 심볼릭 링크 등록 방법
네트워크 환경:
- NAS 도메인: ds1525.hyungi.net (Tailscale: 100.101.79.37, 포트: 15001)
- MailPlus: mailplus.hyungi.net:993 (IMAP SSL)
- WebDAV: webdav.hyungi.net/Document_Server/DEVONThink/
- TKSafety: tksafety.technicalkorea.net (나중에 활성화)
```
---
## 2단계: Ollama 모델 확인 + 분류 프롬프트 테스트
```
Ollama가 정상 동작하는지 확인하고, PKM 문서 분류용 프롬프트를 테스트해줘.
1. ollama list로 현재 모델 확인
2. qwen3.5:35b-a3b 계열 모델이 있는지 확인 (없으면 알려줘)
3. 테스트 프롬프트 실행 — 아래 내용으로 분류 테스트:
테스트 문서: "산업안전보건법 시행규칙 일부개정령안 입법예고 - 고용노동부는 위험성평가에 관한 지침을 개정하여..."
기대 응답 JSON:
{
"tags": ["위험성평가", "법령개정", "고용노동부"],
"domain_db": "04_Industrial safety",
"sub_group": "10_Legislation/Notice",
"sourceChannel": "inbox_route",
"dataOrigin": "external"
}
도메인 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
sourceChannel 값: tksafety, devonagent, law_monitor, inbox_route, email, web_clip, manual
dataOrigin 값: work (자사 업무), external (외부 참고)
프롬프트를 최적화해서 ~/Documents/code/DEVONThink_my server/scripts/prompts/ 디렉토리에 저장해줘.
```
---
## 3단계: DEVONthink Smart Rule + AppleScript 배포
```
DEVONthink 4 Smart Rule용 AppleScript 모듈들을 만들어줘.
Mac mini에서 DEVONthink가 실행 중이야.
모듈 A: Ollama 연동 자동 분류 (~/Documents/code/DEVONThink_my server/applescript/auto_classify.scpt)
- DEVONthink Inbox DB에 새 문서가 들어오면 실행
- Ollama qwen3.5 35B에 문서 텍스트 전송
- 응답에서 tags, domain_db, sub_group, sourceChannel, dataOrigin 파싱
- DEVONthink 태그 설정 + 커스텀 메타데이터(sourceChannel, dataOrigin, lastAIProcess) 설정
- 해당 도메인 DB의 하위 그룹으로 문서 이동
- GPU 서버(Tailscale IP)로 벡터 임베딩 비동기 전송
모듈 B: OmniFocus 연동 (~/Documents/code/DEVONThink_my server/applescript/omnifocus_sync.scpt)
- Projects DB에 새 문서 추가 시 TODO 패턴 감지
- OmniFocus에 작업 생성 (DEVONthink 링크 포함)
- 커스텀 메타데이터에 omnifocusTaskID 저장
프롬프트 파일 위치: ~/Documents/code/DEVONThink_my server/scripts/prompts/
인증 정보: ~/.config/pkm/credentials.env
GPU 서버 Tailscale IP는 별도 확인 필요 (나중에 추가)
```
---
## 4단계: 법령 모니터링 스크립트
```
한국 법령 변경 모니터링 스크립트를 만들어줘.
스크립트: ~/Documents/code/DEVONThink_my server/scripts/law_monitor.py
인증: ~/.config/pkm/credentials.env의 LAW_OC 값 사용
API: open.law.go.kr OpenAPI
기능:
1. 산업안전보건법, 중대재해처벌법, 관련 시행령/시행규칙/고시 변경 추적
2. 변경 감지 시:
- 법령 본문(XML) 다운로드 → ~/Documents/code/DEVONThink_my server/data/laws/에 저장
- DEVONthink 04_Industrial Safety/10_Legislation/ 하위에 자동 임포트 (AppleScript 호출)
- 커스텀 메타데이터: sourceChannel=law_monitor, dataOrigin=external
- 로그: ~/Documents/code/DEVONThink_my server/logs/law_monitor.log
3. launchd plist 생성: 매일 07:00 실행
~/Documents/code/DEVONThink_my server/launchd/net.hyungi.pkm.law-monitor.plist
→ ~/Library/LaunchAgents/에 심볼릭 링크
※ 법령 API 승인 대기중이라 스크립트만 만들고 실제 테스트는 승인 후에
※ 해외 법령(US OSHA, JP, EU)은 나중에 추가 예정
```
---
## 5단계: MailPlus → DEVONthink 이메일 수집
```
MailPlus 이메일을 DEVONthink Archive DB로 자동 수집하는 스크립트를 만들어줘.
스크립트: ~/Documents/code/DEVONThink_my server/scripts/mailplus_archive.py
인증: ~/.config/pkm/credentials.env
접속 정보:
- IMAP 서버: mailplus.hyungi.net:993 (SSL)
- 계정: hyungi
기능:
1. IMAP으로 MailPlus 접속
2. 마지막 동기화 이후 새 메일 가져오기
3. DEVONthink Archive DB에 임포트 (AppleScript 호출)
4. 커스텀 메타데이터: sourceChannel=email
5. 안전 관련 키워드 감지 시 dataOrigin 자동 판별
launchd: 매일 07:00 + 18:00 실행
~/Documents/code/DEVONThink_my server/launchd/net.hyungi.pkm.mailplus.plist
```
---
## 6단계: Daily Digest 시스템
```
PKM 일일 다이제스트를 자동 생성하는 스크립트를 만들어줘.
스크립트: ~/Documents/code/DEVONThink_my server/scripts/pkm_daily_digest.py
인증: ~/.config/pkm/credentials.env
기능:
1. DEVONthink에서 오늘 추가/수정된 문서 집계 (AppleScript로 쿼리)
- DB별 신규 건수
- sourceChannel별 구분
2. law_monitor 로그에서 법령 변경 건 파싱
3. OmniFocus 오늘 완료/추가/기한초과 집계 (AppleScript)
4. 상위 뉴스 3건 요약 (Ollama 35B 호출)
5. MD 파일 생성 → DEVONthink 00_Note_BOX/Daily_Digest/에 저장
파일명: YYYY-MM-DD_digest.md
6. OmniFocus 액션 자동 생성 (법령변경, overdue, Inbox 미처리 등)
7. 90일 지난 다이제스트 → 90_Archive 이동 (Smart Rule 대체)
launchd: 매일 20:00 실행
~/Documents/code/DEVONThink_my server/launchd/net.hyungi.pkm.daily-digest.plist
※ Synology Chat 웹훅 알림은 나중에 추가 (CHAT_WEBHOOK_URL 설정 후)
```
---
## 7단계: DEVONagent 검색 세트 (수동 가이드)
```
DEVONagent Pro에서 안전 분야 자동 검색 세트를 설정하는 가이드를 만들어줘.
총 9개 검색 세트 (7 안전 + 2 기술):
1. 국내 산업안전 뉴스 (kosha, moel, safetynews 등)
2. 국내 중대재해 뉴스
3. KOSHA 가이드/지침
4. 국내 산업안전 학술/논문
5. US OSHA / Safety+Health Magazine
6. JP 厚生労働省 / 安全衛生
7. EU-OSHA
8. 기술 뉴스 (AI/서버/네트워크)
9. 프로그래밍 기술 동향
각 세트별로:
- 검색 키워드/연산자
- 사이트 제한
- 스케줄 (매일/주간)
- 수량 제한 (주간 합계 50~85건 수준)
- 결과 → DEVONthink Inbox로 전송 설정 방법
이건 DEVONagent GUI에서 수동 설정해야 하니까,
단계별 가이드 문서를 ~/Documents/code/DEVONThink_my server/docs/devonagent-setup.md로 만들어줘.
```
---
## 8단계: 전체 테스트
```
PKM 시스템 전체 End-to-End 테스트를 진행해줘.
테스트 항목:
1. Ollama 분류 테스트 — 5종 문서(법령, 뉴스, 논문, 메모, 이메일) 분류 정확도
2. DEVONthink Smart Rule — Inbox에 테스트 문서 추가 → 자동 분류 확인
3. sourceChannel/dataOrigin 메타데이터가 정상 설정되는지
4. OmniFocus 연동 — TODO 패턴 문서 → 작업 자동 생성
5. MailPlus IMAP 접속 테스트
6. launchd 스케줄 등록 확인 (launchctl list | grep pkm)
7. Daily Digest 수동 실행 테스트
각 항목 pass/fail 리포트를 ~/Documents/code/DEVONThink_my server/docs/test-report.md로 저장해줘.
```
---
## 참고: 네트워크 환경
```
Mac mini 접속: SSH (MacBook Pro → Mac mini)
NAS 도메인: ds1525.hyungi.net (Tailscale: 100.101.79.37, 포트: 15001)
MailPlus: mailplus.hyungi.net:993 (IMAP SSL)
WebDAV: webdav.hyungi.net/Document_Server/DEVONThink/
TKSafety: tksafety.technicalkorea.net (나중에 활성화)
내부 네트워크: Tailscale VPN 연결됨
```

View File

@@ -0,0 +1,684 @@
# 04_Industrial Safety — DEVONthink DB 상세 설계서
> 메인 아키텍처: [mac-mini-pkm-architecture.md](computer:///sessions/amazing-vigilant-hypatia/mnt/outputs/mac-mini-pkm-architecture.md) 참조
---
## 1. DB 그룹 구조
```
04_Industrial Safety/
├── 00_Inbox ← 2차 분류 대기
├── 10_Legislation ← 법령, 고시, 행정규칙
│ ├── Act ← 산업안전보건법 등 법률 원문
│ ├── Decree ← 시행령, 시행규칙
│ ├── Notice ← 고시, 지침, 예규, 가이드라인
│ ├── SAPA ← 중대재해처벌법 (별도 법 체계)
│ ├── KR_Archive ← 개정 이력 자동 수집 (법령 API)
│ └── Foreign ← 해외 법령 (참고용)
│ ├── US ← OSHA Standards, CFR Title 29
│ ├── JP ← 労働安全衛生法
│ └── EU ← EU-OSHA Directives, REACH
├── 20_Theory ← 이론서, 교과서, 학습 자료
├── 30_Papers ← 학술 논문, 연구 보고서
├── 40_Cases ← 사고 사례, 재해 분석
│ ├── Domestic ← 국내 사례
│ └── International ← 해외 사례
├── 50_Practice ← 실무 문서 (현장 업무)
│ ├── Risk_Assessment ← 위험성평가
│ ├── Patrol_Inspection ← 순회점검
│ ├── Safety_Plan ← 안전관리계획서
│ ├── Education ← 안전교육 자료
│ ├── Checklist ← 점검표, 체크리스트
│ ├── Contractor_Management ← 도급/수급업체 안전관리
│ ├── Permit_to_Work ← 작업허가서 (화기, 밀폐, 고소 등)
│ ├── Emergency_Plan ← 비상조치계획, 대피/소방훈련
│ └── PPE ← 보호구 관리, 선정 기준, 지급 대장
├── 60_Compliance ← 신고, 보고, 감독 (실제 행정 문서)
│ ├── Report ← 산재 신고, 중대재해 보고
│ ├── Audit ← 감독 결과, 시정명령
│ └── Certification ← 자격증, 인증 관련
├── 70_Safety_Manager ← 안전관리자 직무 전용
│ ├── Appointment ← 선임 서류, 자격 관련
│ ├── Duty_Record ← 직무수행 기록, 월간/분기 보고
│ ├── Meeting ← 산업안전보건위원회, 회의록
│ ├── Inspection ← 안전관리자 점검 기록
│ └── Improvement ← 개선 요청, 시정 조치 이력
├── 75_Health_Manager ← 보건관리자 직무 전용
│ ├── Appointment ← 선임 서류, 자격 관련
│ ├── Duty_Record ← 직무수행 기록, 월간/분기 보고
│ ├── Work_Environment ← 작업환경측정, 유해인자 관리
│ ├── Health_Checkup ← 건강검진 관리, 사후관리
│ ├── MSDS ← 물질안전보건자료 관리
│ ├── Ergonomics ← 근골격계 유해요인조사, 직업병 예방
│ └── Mental_Health ← 직무스트레스 평가, 감정노동, 심리상담
├── 80_Reference ← 규격, 기준, 매뉴얼
│ ├── Standards ← KS, ISO, KOSHA Guide
│ └── Manual ← 장비 매뉴얼, 작업 지침서
└── 90_Archive ← 폐기 법령, 구버전 자료
```
---
## 2. AI 2차 분류 라우팅 (태그 → 그룹 매핑)
Inbox에서 1차 분류로 이 DB에 도착한 문서를, AI가 태그와 본문 키워드를 보고 하위 그룹까지 자동 이동시킵니다.
```
태그 조합 → 이동 대상 그룹
──────────────────────────────────────────────────────────
$유형/법령 → 10_Legislation/
$유형/법령 + #주제/산업안전/법령 → 10_Legislation/
├── 텍스트에 "법률" "법" 포함 → Act/
├── 텍스트에 "시행령" "시행규칙" 포함 → Decree/
├── 텍스트에 "고시" "지침" "예규" 포함 → Notice/
└── 텍스트에 "중대재해처벌" 포함 → SAPA/
$유형/논문 → 30_Papers/
#주제/산업안전/사고사례 → 40_Cases/
├── sourceURL에 kosha.or.kr 포함 → Domestic/
└── sourceURL에 osha.gov 등 포함 → International/
#주제/산업안전/위험성평가 → 50_Practice/Risk_Assessment/
#주제/산업안전/순회점검 → 50_Practice/Patrol_Inspection/
#주제/산업안전/안전교육 → 50_Practice/Education/
$유형/체크리스트 → 50_Practice/Checklist/
키워드: "도급" "수급" "협력업체" → 50_Practice/Contractor_Management/
키워드: "작업허가" "화기" "밀폐" → 50_Practice/Permit_to_Work/
키워드: "비상" "대피" "소방" → 50_Practice/Emergency_Plan/
키워드: "보호구" "안전화" "안전모" → 50_Practice/PPE/
#주제/산업안전/신고보고 → 60_Compliance/Report/
키워드: "감독" "시정명령" → 60_Compliance/Audit/
키워드: "자격증" "인증" "면허" → 60_Compliance/Certification/
#주제/산업안전/안전관리자 → 70_Safety_Manager/
├── "선임" "자격" → Appointment/
├── "직무수행" "월간보고" → Duty_Record/
├── "위원회" "회의록" → Meeting/
├── "점검" "순회" → Inspection/
└── "개선" "시정" → Improvement/
#주제/산업안전/보건관리자 → 75_Health_Manager/
├── "선임" "자격" → Appointment/
├── "작업환경측정" "유해인자" → Work_Environment/
├── "건강검진" "사후관리" → Health_Checkup/
├── "MSDS" "물질안전" → MSDS/
├── "근골격계" "직업병" → Ergonomics/
└── "스트레스" "감정노동" → Mental_Health/
#주제/산업안전/규격기준 → 80_Reference/Standards/
분류 불가 → 00_Inbox/ (수동 리뷰 대기)
```
---
## 3. 법령 자동 수집 및 변경 알림 시스템
### 3.1 모니터링 대상 법령
```
🇰🇷 한국 (필수) — 국가법령정보센터 Open API (open.law.go.kr)
─────────────────────────────────────────
· 산업안전보건법 (법률/시행령/시행규칙)
· 중대재해 처벌 등에 관한 법률 (법률/시행령)
· 건설기술 진흥법
· 화학물질관리법 / 화학물질의 등록 및 평가 등에 관한 법률
· 위험물안전관리법
· KOSHA Guide (한국산업안전보건공단 기술지침)
· 고용노동부 고시/지침 (관련 행정규칙)
🇺🇸 미국 (참고) — Federal Register API + OSHA
─────────────────────────────────────────
· OSHA Standards (29 CFR 1910 일반산업, 1926 건설)
· Federal Register: OSHA 관련 규칙 제정/개정 공지
· NIOSH 권고사항 (새 출판물)
🇯🇵 일본 (참고) — e-Gov 法令API (laws.e-gov.go.jp)
─────────────────────────────────────────
· 労働安全衛生法 (노동안전위생법)
· 労働安全衛生法施行令
· 労働安全衛生規則
🇪🇺 EU (참고) — EUR-Lex SPARQL / REST
─────────────────────────────────────────
· Framework Directive 89/391/EEC (산업안전 기본지침)
· REACH Regulation (화학물질 규정)
· CLP Regulation (분류/표시 규정)
· Machinery Directive 2006/42/EC
```
### 3.2 시스템 아키텍처
```
┌──────────────────────────────────────────────────────────────┐
│ 법령 모니터링 시스템 (Mac mini, launchd) │
│ │
│ ┌─────────────────┐ ┌──────────────────────────────┐ │
│ │ law_monitor.py │ │ 수집 스케줄 │ │
│ │ · KR: law.go.kr │ │ · 한국: 매일 06:00 │ │
│ │ · US: FedReg │ │ · 미국: 주 1회 (월) │ │
│ │ · JP: e-Gov │ │ · 일본: 주 1회 (수) │ │
│ │ · EU: EUR-Lex │ │ · EU: 월 1회 (1일) │ │
│ └───────┬─────────┘ └──────────────────────────────┘ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 변경 감지: API → SQLite 비교 → diff 생성 │ │
│ └───────┬──────────────────────────────────────────────┘ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 알림 + 저장 │ │
│ │ · DEVONthink: 10_Legislation/ 자동 분류 │ │
│ │ · Synology Chat 웹훅 즉시 알림 │ │
│ │ · OmniFocus 작업 생성 ("법령 변경 검토 필요") │ │
│ │ · Ollama 35B: 변경 요약 + 실무 영향 브리핑 │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
```
### 3.3 법적 근거 — 수집에 문제 없음
```
한국: 저작권법 제7조 — 법령, 조약, 판결 등은 저작권 보호 대상 아님
+ 국가법령정보센터 Open API 공공데이터 자유이용 허용
미국: 연방법/규정은 Public Domain (17 U.S.C. §105)
일본: 著作権法 第13条 — 법령은 저작권 대상 제외
EU: EUR-Lex 자유 재사용 정책 (Decision 2011/833/EU)
```
### 3.4 저장 구조 예시
```
04_Industrial Safety/10_Legislation/
├── Act/
│ └── 산업안전보건법_2026-03-01_시행.pdf
├── Decree/
│ └── 산업안전보건법_시행령_2026-01-01.pdf
├── SAPA/
│ └── 중대재해처벌법_2026-01-01_시행.pdf
├── KR_Archive/
│ ├── 2026-03-24_산업안전보건법_개정_diff.md ← 변경점 요약
│ └── 2026-03-24_산업안전보건법_개정_원문.pdf
└── Foreign/
├── US/
│ └── 29CFR1910_General_Industry.pdf
├── JP/
│ └── 労働安全衛生法_2026.pdf
└── EU/
└── Directive_89_391_EEC_Framework.pdf
```
---
## 4. DEVONagent 검색 세트 — 안전 분야
### 4.1 전체 구성
```
Mac mini 자동 스케줄
├── [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건/주
안전 분야 주간 합계: ~50~85건 (하루 평균 ~8~12건)
```
### 4.2 [SS-01] 한국 산업안전 뉴스 (매일)
```
검색 세트: KR_Safety_News
스케줄: 매일 06:00 / 새 결과만 수집
소스:
· kosha.or.kr — 공단 공지, 가이드, 재해사례
· portal.kosha.or.kr — 산재예방 포털
· moel.go.kr — 고용노동부 보도자료, 정책
· labor.moel.go.kr — 중대재해 알림e
· safety.or.kr — 대한산업안전협회
· safetyin.co.kr — 안전저널
· Google News — "산업안전" OR "산재" OR "안전보건" -채용 -구인
→ Inbox → AI 태깅 → 04_Industrial Safety 하위 그룹 자동 분류
```
### 4.3 [SS-02] 중대재해·판례 (매일)
```
검색 세트: KR_SAPA_Cases
스케줄: 매일 06:15 / 새 결과만 수집
소스:
· labor.moel.go.kr — 중대재해 알림e 공시
· nosanjae.kr — 중대재해 기업 검색
· law.go.kr — 판례 검색 (산업안전 관련)
· Google News — "중대재해" OR "중대재해처벌" OR "산재 사망" -채용
→ Inbox → AI 태깅 → 40_Cases/Domestic/ 또는 60_Compliance/
```
### 4.4 [SS-04] 🇺🇸 미국 안전 동향 (주 1회)
```
검색 세트: US_Safety
스케줄: 월요일 07:00 / 최대 15건
소스:
· osha.gov/rss — OSHA 보도자료, 벌금 부과, 규칙 (주 3~5건)
· osha.gov/quicktakes — OSHA QuickTakes 뉴스레터 (격주 1건)
· federalregister.gov — OSHA final rule / proposed (주 1~3건)
· ehstoday.com — EHS Today 산업안전 전문지 (주 3~5건)
쿼리: ("OSHA" OR "workplace fatality" OR "safety violation") -job -hiring
→ Inbox → 10_Legislation/Foreign/US/ 또는 40_Cases/International/
```
### 4.5 [SS-05] 🇯🇵 일본 안전 동향 (주 1회)
```
검색 세트: JP_Safety
스케줄: 수요일 07:00 / 최대 10건
소스:
· mhlw.go.jp/rss — 厚生労働省 보도자료 (주 2~4건)
· anzeninfo.mhlw.go.jp — 職場のあんぜんサイト (재해사례) (주 2~3건)
· jaish.gr.jp — 安全衛生情報センター (통달/지침) (주 1~2건)
쿼리: ("労働安全" OR "労働災害" OR "安全衛生" OR "重大災害")
→ Inbox → 10_Legislation/Foreign/JP/
→ AI 자동 처리: Ollama로 일본어 → 한국어 1줄 요약 생성
```
### 4.6 [SS-06] 🇪🇺 유럽 안전 동향 (월 2회)
```
검색 세트: EU_Safety
스케줄: 1일·15일 07:00 / 최대 10건
소스:
· osha.europa.eu RSS — EU-OSHA 발간물, 뉴스, 지침 (월 3~5건)
· eur-lex.europa.eu — 산업안전 관련 신규 지침/규정 (월 1~3건)
· hse.gov.uk — UK Health & Safety Executive (월 2~3건)
쿼리: ("EU-OSHA" OR "workplace safety directive" OR "REACH" OR "safety at work")
-vacancy -recruitment
→ Inbox → 10_Legislation/Foreign/EU/
```
### 4.7 [SS-07] 🌐 국제 안전 전문지 (주 1회)
```
검색 세트: Global_Safety_Magazines
스케줄: 금요일 07:00 / 최대 10건
소스:
· ishn.com/rss — Industrial Safety & Hygiene News (주 3~5건)
· ohsonline.com — Occupational Health & Safety (주 2~3건)
· safetyandhealthmagazine.com — NSC Safety+Health Magazine (주 1~2건)
쿼리: ("industrial safety" OR "process safety" OR "workplace accident"
OR "safety management" OR "risk assessment")
→ Inbox → AI 태깅 후 주제별 자동 분류
```
### 4.8 [SS-08] 학술 논문 — 안전공학 (주 1회)
```
검색 세트: Safety_Academic
스케줄: 토요일 08:00 / 최대 10건
소스:
· Google Scholar — 한국어: "산업안전" "위험성평가" "안전공학"
· Google Scholar — 영어: "occupational safety" "risk assessment"
· oshri.kosha.or.kr — 산업안전보건연구원 발간물
· dbpia.co.kr — 한국 학술논문
· sciencedirect.com — Safety Science 저널
→ Inbox → 30_Papers/
```
---
## 5. 양 조절 전략
### 5.1 주간 예상 유입량
```
검색 세트 주간 예상 빈도
──────────────────────────────────────────
SS-01 한국 안전뉴스 15~25건 매일
SS-02 중대재해/판례 5~10건 매일
SS-04 🇺🇸 미국 10~15건 주 1회
SS-05 🇯🇵 일본 5~10건 주 1회
SS-06 🇪🇺 유럽 2~4건 월 2회
SS-07 🌐 전문지 5~10건 주 1회
SS-08 학술 논문 5~10건 주 1회
──────────────────────────────────────────
안전 분야 합계 ~50~85건 /주
하루 평균 ~8~12건
```
### 5.2 과다 유입 방지 장치
```
1단계: DEVONagent "새 결과만" — 이전 수집분 자동 제외
2단계: 검색 세트별 최대 수집량 캡 (Max Results)
3단계: AI 관련도 필터 — Ollama가 관련도 판단
→ 낮으면 @상태/아카이브 → 90_Archive 이동
→ 높으면 @상태/검토필요 → 해당 그룹에 유지
4단계: 주간 다이제스트 — 금요일 Claude API가 주간 요약
→ "이번 주 꼭 봐야 할 5건" 브리핑 자동 생성
5단계: 30일 이상 미열람 → Smart Rule로 자동 90_Archive 이동
```
### 5.3 일본어 자료 자동 처리
```
수집 → Smart Rule: 일본 태그 감지
→ Ollama 35B: 일본어 → 한국어 1줄 요약
→ DEVONthink 커스텀 메타데이터 "summaryKR" 필드에 저장
→ 원문은 그대로 보존
※ 일본 산업안전 용어는 한자어 공통으로 번역 정확도 높음
```
---
## 6. 기존 자료 마이그레이션
```
현재 → 이동 대상
───────────────────────────────────────────────
0_Theory/ (72건) → 20_Theory/
8_Reference/ (1건) → 80_Reference/
9_일반자료_산업안전/ (33건) → 내용별 분산:
사고사례 → 40_Cases/Domestic/
실무서식 → 50_Practice/
신고관련 → 60_Compliance/
지게차 관련규칙 개정... (PDF) → 10_Legislation/Notice/
Industrial Safety... (HTML) → 20_Theory/ 또는 80_Reference/
```
---
## 7. 관련 태그 체계 (산업안전 영역)
```
#주제/산업안전/
├── 법령 ← 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
```
---
## 8. 유입 경로 추적 체계 (Source Tracking)
모든 문서에 유입 경로를 기록하여 "이 자료가 어디서 왔는지"를 즉시 파악할 수 있게 합니다.
실제 업무 데이터와 외부 참고자료를 명확히 구분하는 것이 핵심입니다.
### 8.1 유입 경로 분류
```
커스텀 메타데이터: sourceChannel (텍스트, 필수)
┌──────────────────────────────────────────────────────────────────┐
│ 자동 유입 (시스템) │
├────────────────┬─────────────────────────────────────────────────┤
│ tksafety │ TKSafety API 연동 — 업무 실적 (위험성평가, 점검 등) │
│ devonagent │ DEVONagent 검색 세트 — 뉴스/업계 동향 자동 수집 │
│ law_monitor │ 법령 모니터링 API — 법령 제·개정 추적 │
├──────────────────────────────────────────────────────────────────┤
│ 수동/반자동 유입 │
├────────────────┬─────────────────────────────────────────────────┤
│ inbox_route │ Inbox DB → AI 분류 → 이 DB로 라우팅된 문서 │
│ email │ MailPlus → Archive DB → 안전 관련 메일 전달 │
│ web_clip │ DEVONthink Web Clipper로 직접 스크랩 │
│ manual │ 드래그&드롭, 스캔, 파일 직접 추가 │
└────────────────┴─────────────────────────────────────────────────┘
```
### 8.2 메타데이터 자동 설정 규칙
```
유입 경로별 자동 태그:
tksafety → @출처/TKSafety + sourceURL = tksafety.technicalkorea.net/...
devonagent → @출처/뉴스수집 + sourceURL = 원본 기사 URL
law_monitor → @출처/법령API + sourceURL = law.go.kr/... 또는 해외 법령 URL
inbox_route → @출처/자동분류 + (원본 sourceURL 유지)
email → @출처/이메일 + sourceURL = mailplus 메시지 링크
web_clip → @출처/웹스크랩 + sourceURL = 스크랩 원본 URL
manual → @출처/수동입력 + sourceURL = 없음 (직접 기입 가능)
```
### 8.3 업무 데이터 vs 참고자료 구분
```
커스텀 메타데이터: dataOrigin (드롭다운, 필수)
work — 우리 회사 실제 업무에서 발생한 데이터
(TKSafety 연동, 직접 작성한 보고서, 내부 회의록 등)
external — 외부에서 수집한 참고/학습 자료
(뉴스, 법령 원문, 타사 사례, 학술 논문 등)
자동 판별 규칙:
· sourceChannel = tksafety → dataOrigin = work (항상)
· sourceChannel = law_monitor → dataOrigin = external (항상)
· sourceChannel = devonagent → dataOrigin = external (항상)
· sourceChannel = manual → dataOrigin = work (기본값, 수동 변경 가능)
· sourceChannel = inbox_route → AI가 내용 기반으로 판별
· sourceChannel = email → AI가 발신자/내용 기반으로 판별
· sourceChannel = web_clip → dataOrigin = external (기본값)
```
### 8.4 Smart Rule 적용
```
DEVONthink Smart Rule: "소스 채널 누락 검출"
조건: custom metadata "sourceChannel" is empty
AND database is "04_Industrial Safety"
AND NOT in group "00_Inbox"
동작:
1. @상태/미분류출처 태그 추가
2. 00_Inbox으로 이동 (출처 확인 후 재분류)
→ 어떤 경로로든 출처 없이 들어온 문서는 자동 포착
→ 주간 리뷰에서 정리 (수동 입력 자료 대부분 여기 해당)
```
### 8.5 활용 시나리오
```
검색/필터 예시:
"올해 우리 회사가 실시한 위험성평가만 보기"
→ 50_Practice/Risk_Assessment/ + dataOrigin = work
"외부 위험성평가 사례/참고자료"
→ 50_Practice/Risk_Assessment/ + dataOrigin = external
"TKSafety에서 자동 수집된 문서 전체"
→ sourceChannel = tksafety
"직접 스크랩한 자료 중 미정리 건"
→ sourceChannel = web_clip + @상태/미분류출처
Smart Group으로 상시 모니터링:
· "출처 미기입 문서" → sourceChannel is empty
· "이번 주 업무 문서" → dataOrigin = work + 최근 7일
· "외부 수집 미읽음" → dataOrigin = external + unread
```
---
## 9. TKSafety 시스템 연동 (설정 대기)
> **현재 상태: 설계 완료, 구현 대기**
> API 엔드포인트 명세와 연동 구조만 확정해두고, 실제 활성화는 PKM 기본 체계가 안정된 후 진행합니다.
> TKSafety는 자체 개발 시스템이므로 필요 시점에 API를 추가하면 됩니다.
### 9.1 시스템 정보
```
· URL: tksafety.technicalkorea.net (Cloudflare Tunnel)
· 호스팅: Synology DS1525+ Docker
· 내부 접근: Tailscale VPN
· 개발/수정: 직접 가능
· sourceChannel 값: tksafety
· dataOrigin 값: work (항상)
```
### 9.2 연동 아키텍처 (예정)
```
┌──────────────────────┐ ┌────────────────────────────┐
│ TKSafety │ │ Mac mini (PKM 허브) │
│ (Synology Docker) │ │ │
│ │ API │ tksafety_sync.py │
│ /api/v1/ │◄──────►│ (launchd 스케줄) │
│ risk-assessments │ Tailscale│ │
│ patrol-inspections │ │ ┌─────────────────────┐ │
│ corrective-actions │ │ │ 데이터 가공 │ │
│ incidents │ │ │ · JSON → PDF/MD 변환 │ │
│ education-records │ │ │ · sourceChannel 설정 │ │
│ meeting-minutes │ │ │ · dataOrigin = work │ │
│ │ │ └──────────┬──────────┘ │
└──────────────────────┘ │ ▼ │
│ DEVONthink 자동 임포트 │
│ → 04_Industrial Safety/ │
│ 하위 그룹 자동 라우팅 │
│ │
│ ChromaDB 벡터 인덱싱 │
│ → RAG 검색 가능 │
└────────────────────────────┘
```
### 9.3 API 엔드포인트 명세 (TKSafety에 추가 예정)
```
GET /api/v1/risk-assessments
?since=2026-03-01&status=completed → 위험성평가 결과 목록
GET /api/v1/risk-assessments/{id}/report → 상세 (PDF/JSON)
GET /api/v1/patrol-inspections
?since=2026-03-01 → 순회점검 결과 목록
GET /api/v1/patrol-inspections/{id}/report → 상세 + 사진
GET /api/v1/corrective-actions
?since=2026-03-01&status=open|completed|overdue → 시정조치 내역
GET /api/v1/incidents?since=2026-03-01 → 사고/아차사고 보고서
GET /api/v1/education-records?since=2026-03-01 → 안전교육 기록
GET /api/v1/meetings?type=safety-committee&since=2026-03-01 → 회의록
GET /api/v1/sync-status → 마지막 동기화 시점, 대기 건수
```
### 9.4 라우팅 매핑 (활성화 시 적용)
```
TKSafety 데이터 → DEVONthink 그룹 → 파일 형식
────────────────────────────────────────────────────────────────
risk-assessments → 50_Practice/Risk_Assessment/ → PDF
patrol-inspections → 50_Practice/Patrol_Inspection/ → MD + 사진
corrective-actions → 70_Safety_Manager/Improvement/ → MD
incidents → 40_Cases/Domestic/ → PDF
education-records → 50_Practice/Education/ → MD
meetings (safety-comm) → 70_Safety_Manager/Meeting/ → MD
파일명 규칙:
RA_2026-03-24_[작업명]_[위험등급].pdf
PI_2026-03-24_[구역명].md
CA_2026-03-24_[조치내용]_[상태].md
INC_2026-03-24_[사고유형]_[심각도].pdf
```
### 9.5 동기화 스케줄 (활성화 시 적용)
```
· 위험성평가, 순회점검 → 매일 07:00
· 시정조치 → 매일 07:00 + 18:00
· 사고/아차사고 → 1시간마다 (긴급성)
· 교육기록, 회의록 → 주 1회 (월요일 07:00)
· overdue 시정조치 → OmniFocus 작업 자동 생성
```
### 9.6 활성화 단계
```
지금 할 것:
✓ API 명세 확정 (이 문서)
✓ sourceChannel/dataOrigin 체계 설계
○ TKSafety에 /api/v1/ 엔드포인트 뼈대만 추가 (빈 응답 OK)
PKM 안정화 후:
Phase 1: API 실제 데이터 응답 구현
Phase 2: tksafety_sync.py 개발 + DEVONthink 임포트
Phase 3: 시정조치 → OmniFocus 연동
Phase 4: 양방향 확장 (DEVONthink → TKSafety 상태 업데이트)
```
---
## 10. 산업안전 Daily Digest 기여 항목
Daily Digest는 전체 PKM 차원에서 운영되지만 (메인 아키텍처 참조),
이 DB는 특히 다음 항목을 다이제스트에 공급합니다.
```
04_Industrial Safety → Daily Digest 공급 항목:
■ 문서 변동
· 오늘 추가된 문서 수 (sourceChannel별 구분)
예: "산업안전 +5 (뉴스3, 법령1, 업무1)"
· 분류 실패 → 00_Inbox 잔류 건수
■ 법령 변경 (law_monitor 연동)
· 한국 법령 제·개정 감지 → ⚠ 마크로 강조
· 해외 법령 변경 → 참고 표시
· OmniFocus 액션: "법령 변경 검토: [법령명]" 자동 생성
■ 뉴스/동향 (DEVONagent 연동)
· 오늘 수집된 안전 뉴스 건수 (국내/해외 구분)
· 상위 3건 자동 요약 (Ollama 35B)
■ 업무 데이터 (TKSafety 연동, 활성화 시)
· 위험성평가/순회점검 신규 건수
· 시정조치 overdue → ⚠ OmniFocus 긴급 액션
■ OmniFocus 액션 자동 생성 조건 (이 DB 관련):
· 법령 변경 감지 → "법령 변경 검토: [법령명]"
· 시정조치 기한초과 → "시정조치 기한초과: [내용]" (긴급)
· 안전 뉴스 중대 키워드 → "뉴스 확인: [제목]"
(키워드: 중대재해, 사망, 작업중지, 과태료)
· Inbox 미처리 5건 이상 → "산업안전 Inbox 정리 필요"
```
---
## 11. 향후 확장 계획
- 나머지 도메인 DB(03_Engineering, 05_Programming 등)도 동일한 넘버링 패턴으로 그룹 구조 설계 예정
- 각 DB별 DEVONagent 검색 세트 추가
- DB 간 크로스 레퍼런스 (예: 산업안전 + 공학 문서 연결)
- TKSafety 양방향 연동 확장 (Section 9.6 참조)
- sourceChannel/dataOrigin 체계를 다른 도메인 DB에도 확장 적용