# Paper Monitor → Joplin 자동차 레이더 관련 신규 논문을 IEEE Xplore, Semantic Scholar, Crossref, Google Scholar Alert에서 수집하고 DOI/제목 기준으로 중복 제거한 뒤 Markdown 표와 Joplin note로 만드는 프로젝트입니다. ## 빠른 시작 ```bash cd paper-monitor cp config.example.yaml config.yaml cp .env.example .env python -m venv .venv # Linux/macOS: source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -e . ``` 환경변수에 필요한 키를 설정합니다. ```text IEEE_API_KEY=... SEMANTIC_SCHOLAR_API_KEY=... CROSSREF_MAILTO=you@example.com JOPLIN_TOKEN=... ``` 실행: ```bash python -m paper_monitor --config config.yaml --dry-run python -m paper_monitor --config config.yaml ``` `--dry-run`은 Joplin 쓰기만 생략합니다. SQLite와 Markdown 생성은 수행합니다. ## 동작 1. `config.yaml`의 각 검색어를 소스별로 조회 2. 최근 `lookback_days` 필터 3. DOI 우선, DOI 없으면 normalized-title hash로 중복 제거 4. category와 relevance 1~5 계산 5. 선택적으로 OpenAI API로 한국어 요약/relevance/category 보강 6. `data/papers.db`에 이미 본 논문 저장 7. 처음 발견한 논문만 `data/outbox/*.md`에 출력 8. Joplin Data API가 사용 가능하면 `Research/Radar Papers` note 자동 생성/갱신 ## Google Scholar Scholar 검색 결과 HTML을 직접 scraping하지 않습니다. Google Scholar Alert를 Gmail로 받은 뒤 IMAP으로 읽습니다. `google_scholar_alert.enabled: true`로 켜고 아래 변수를 설정합니다. ```text GMAIL_ADDRESS=... GMAIL_APP_PASSWORD=... ``` Google은 일반 계정 비밀번호를 IMAP 클라이언트에 직접 공유하는 방식을 권장하지 않습니다. 개인 계정에서 사용할 수 있는 경우 2단계 인증 + App Password를 쓰거나, 장기 운영에서는 Gmail OAuth/Gmail API로 collector를 교체하는 편이 좋습니다. ## Joplin 기본 출력은 Joplin Data API입니다. Joplin Desktop에서 Web Clipper service를 켜고 token을 발급한 뒤: ```yaml joplin: enabled: true base_url: http://127.0.0.1:41184 token_env: JOPLIN_TOKEN ``` Joplin API가 실패해도 Markdown은 항상 `data/outbox`에 남습니다. ### NAS에서 주의 NAS Docker 내부의 `127.0.0.1:41184`는 Windows PC가 아니라 NAS 컨테이너 자신입니다. 따라서 가장 간단한 1차 구성은 **Windows Task Scheduler + Joplin Desktop/Web Clipper + 이 프로그램**입니다. 논문 수집만 NAS에서 돌리고 Markdown을 NAS에 보관하는 것도 가능합니다. Joplin 공식 Terminal 앱은 WebDAV sync와 cron 실행을 지원하므로, 향후 완전 NAS-only 구성으로 바꿀 때 사용할 수 있습니다. ## AI 요약 기본은 off입니다. ```yaml ai: enabled: true api_key_env: OPENAI_API_KEY model: gpt-5-mini max_papers_per_run: 30 ``` AI 호출이 실패해도 keyword 기반 결과로 계속 진행됩니다. ## Docker / Synology Container Manager ```bash cp config.example.yaml config.yaml cp .env.example .env docker compose build docker compose run --rm paper-monitor ``` 매일 06:00 cron 예: ```cron 0 6 * * * cd /volume1/docker/paper-monitor && /usr/bin/docker compose run --rm paper-monitor >> ./data/cron.log 2>&1 ``` Synology Task Scheduler에서도 같은 명령을 User-defined script로 등록할 수 있습니다. 실제 docker 경로는 NAS에서 `which docker`로 확인하세요. ## 결과 형식 ```markdown | Relevance | Category | Paper | Authors | Venue | Date | Citations | Source | |---|---|---|---|---|---|---:|---| | ★★★★★ | Imaging Radar, MIMO | [Paper title](...) | ... | IEEE TAP | 2026-08-11 | 2 | IEEE Xplore | ``` 표 아래에 논문별 DOI, 링크, abstract excerpt 또는 AI summary가 추가됩니다. ## 권장 초기 설정 처음 1~2주는 AI와 Scholar Alert를 끄고 IEEE + Semantic Scholar + Crossref만 사용해 noise를 확인하는 것을 권장합니다. ```yaml app: lookback_days: 14 min_relevance: 2 ai: enabled: false sources: google_scholar_alert: enabled: false ``` 그 후 `queries`, `categories`, `relevance_terms`를 본인 관심 분야에 맞게 조정하면 됩니다. ## 보안 API key, Gmail App Password, Joplin token은 Git에 커밋하지 마세요. 환경변수/Docker secret 등을 사용하세요.