From 955fc4ee1e171e1bbe3b0b7cf1ebf40384b7afc9 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 27 Apr 2026 07:34:27 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20CLAUDE.md=C2=B7README.md=20=EC=B5=9C?= =?UTF-8?q?=EC=8B=A0=20=EC=83=81=ED=83=9C=20=EB=B0=98=EC=98=81=20(8?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=C2=B7travel=20=EC=A7=80=EC=97=AD?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=C2=B7RTX=20=EC=A0=95=EC=A0=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CLAUDE.md: 서비스 8개 정정, RTX 5070 Ti 정정, travel-proxy 지역 관리 API 추가 - README.md: travel-proxy SQLite DB 구조 반영, travel.db·lotto_briefings 추가, 스케줄러 보완 Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 20 +++++++++++++++----- README.md | 16 ++++++++++------ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 22bb026..47c5dbc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -7,9 +7,9 @@ ## 1. 프로젝트 개요 Synology NAS 기반의 개인 웹 플랫폼 백엔드 모노레포. -- **서비스**: lotto-lab, stock-lab, travel-album, music-lab, blog-lab, realestate-lab, deployer +- **서비스**: lotto-lab, stock-lab, travel-proxy, music-lab, blog-lab, realestate-lab, agent-office, deployer (8개) - **프론트엔드**: 별도 레포 (React + Vite SPA), 빌드 산출물만 NAS에 배포 -- **인프라**: Docker Compose + Nginx(리버스 프록시) + Gitea Webhook 자동 배포 +- **인프라**: Docker Compose (9컨테이너) + Nginx(리버스 프록시) + Gitea Webhook 자동 배포 --- @@ -22,7 +22,7 @@ Synology NAS 기반의 개인 웹 플랫폼 백엔드 모노레포. | 메모리 | 18 GB | | Docker | Synology Container Manager | | Git 서버 | Gitea (self-hosted, NAS 내부) | -| AI 서버 | Windows PC (192.168.45.59:8000) — NVIDIA 3070 Ti + Ollama | +| AI 서버 | Windows PC (192.168.45.59:8000) — NVIDIA RTX 5070 Ti (16GB VRAM) + Ollama | --- @@ -351,6 +351,7 @@ docker compose up -d - 썸네일 캐시: `/data/thumbs/` (RW) - DB: `/data/thumbs/travel.db` (photos, album_covers 테이블) - 메타: `/data/travel/_meta/region_map.json`, `regions.geojson` +- 지역 오버라이드: `/data/thumbs/region_map_extra.json` (RW, `_regions_meta` 포함) - 파일 구조: `main.py`, `db.py`, `indexer.py` - 썸네일: 480×480 리사이징 (Pillow), 동기화 시 사전 생성 + 온디맨드 폴백 - 데이터 흐름: 수동 sync → 폴더 스캔 → SQLite 인덱싱 + 썸네일 일괄 생성 @@ -362,15 +363,24 @@ docker compose up -d | `photos` | 사진 인덱스 (album, filename, mtime, has_thumb) | | `album_covers` | 앨범별 커버 사진 지정 | +**지역 관리 아키텍처** +- `region_map.json` (RO): 원본 지역→앨범 매핑 (`_meta/` 안에 위치) +- `region_map_extra.json` (RW): 사용자 수정분 오버라이드 (앨범 이동, 신규 지역) + - `_regions_meta`: 커스텀 지역의 이름·좌표 저장 (`{ "region_id": { "name": "...", "coordinates": [lng, lat] } }`) +- `regions.geojson` (RO): GeoJSON Polygon 지역 경계 +- 커스텀 지역: `GET /api/travel/regions`에서 `region_map`에 있지만 GeoJSON에 없는 지역을 자동 추가 (Point geometry 또는 null) + **travel-proxy API 목록** | 메서드 | 경로 | 설명 | |--------|------|------| -| GET | `/api/travel/regions` | 지역 GeoJSON | +| GET | `/api/travel/regions` | 지역 GeoJSON (커스텀 지역 동적 추가 포함) | | GET | `/api/travel/photos` | 사진 목록 (region, page=1, size=20) | | POST | `/api/travel/sync` | 폴더 스캔 → DB 동기화 + 썸네일 생성 | -| GET | `/api/travel/albums` | 앨범 목록 + 사진 수 + 커버 정보 | +| GET | `/api/travel/albums` | 앨범 목록 + 사진 수 + 커버 + region/regionName | | PUT | `/api/travel/albums/{album}/cover` | 앨범 커버 지정 | +| PUT | `/api/travel/albums/{album}/region` | 앨범 지역 변경 (region_map_extra 수정) | +| PUT | `/api/travel/regions/{region_id}` | 커스텀 지역 이름/좌표 수정 (지도 핀 표시용) | ### blog-lab (blog-lab/) - 블로그 마케팅 수익화 서비스 (키워드 분석 → AI 글 생성 → 마케팅 강화 → 품질 리뷰 → 포스팅 → 수익 추적) diff --git a/README.md b/README.md index 10c90c6..da27223 100644 --- a/README.md +++ b/README.md @@ -177,19 +177,22 @@ AI 에이전트 가상 오피스 — 2D 픽셀아트 사무실에서 4명의 에 #### 스케줄러 잡 -- 08:00 — Stock: 뉴스 요약 +- 07:00 월요일 — Lotto: AI 큐레이터 브리핑 (5세트 + 내러티브) +- 07:30 — Stock: 뉴스 요약 - 09:15 — Realestate: 매칭 리포트 - 10:00 — Blog: 자동 파이프라인 (리서치→생성→리뷰→승인 대기) - 60초 interval — 유휴 에이전트 휴식 체크 ### 7. travel-proxy (`/api/travel/`) -여행 사진 API + 온디맨드 썸네일 생성. +여행 사진 API + SQLite 인덱스 + 온디맨드 썸네일 + 지역 관리. - 원본: `/data/travel/` (RO 마운트) - 썸네일: 480×480 Pillow 리사이징, `/data/thumbs/` 영구 캐시 (tmp → rename 원자성 보장) -- 메모리 캐시: 앨범 스캔 결과 TTL 300초 -- 메타: `region_map.json`, `regions.geojson` +- DB: `/data/thumbs/travel.db` (photos, album_covers 테이블) +- 메타: `region_map.json` (RO) + `region_map_extra.json` (RW 오버라이드) + `regions.geojson` +- 지역 관리: 앨범 지역 변경, 커스텀 지역 생성, 지도 핀 좌표 지정 +- 데이터 흐름: 수동 sync → 폴더 스캔 → SQLite 인덱싱 + 썸네일 일괄 생성 ### 8. deployer (`/webhook`) @@ -262,12 +265,13 @@ git push → Gitea → X-Gitea-Signature (HMAC SHA256) | DB | 소유 서비스 | 주요 테이블 | |----|------------|-----------| -| `lotto.db` | lotto-backend | draws, recommendations, simulation_runs/candidates, best_picks, purchase_history, strategy_performance/weights, weekly_reports, todos, blog_posts | +| `lotto.db` | lotto-backend | draws, recommendations, simulation_runs/candidates, best_picks, purchase_history, strategy_performance/weights, weekly_reports, lotto_briefings, todos, blog_posts | | `stock.db` | stock-lab | articles, portfolio, broker_cash, asset_snapshots, sell_history | | `music.db` | music-lab | music_tasks, music_library (provider, lyrics, image_url, suno_id, file_hash, cover_images, wav_url, video_url, stem_urls) | | `blog_marketing.db` | blog-lab | keyword_analyses, blog_posts, brand_links, commissions, generation_tasks, prompt_templates | | `realestate.db` | realestate-lab | announcements, announcement_models, user_profile, match_results, collect_log | -| `agent_office.db` | agent-office | agent_config, agent_tasks, agent_logs, telegram_state | +| `agent_office.db` | agent-office | agent_config, agent_tasks, agent_logs, telegram_state, conversation_messages | +| `travel.db` | travel-proxy | photos (album, filename, mtime, has_thumb), album_covers | ---