From 4d6296bce3dbd9e32acbbf71e0625ee6567908ad Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 27 Apr 2026 14:39:05 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20CLAUDE.md=EC=97=90=20portfolio=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=B6=94=EA=B0=80=20(9=EA=B0=9C?= =?UTF-8?q?=20=EC=84=9C=EB=B9=84=EC=8A=A4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- CLAUDE.md | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 47c5dbc..65d24f2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -7,7 +7,7 @@ ## 1. 프로젝트 개요 Synology NAS 기반의 개인 웹 플랫폼 백엔드 모노레포. -- **서비스**: lotto-lab, stock-lab, travel-proxy, music-lab, blog-lab, realestate-lab, agent-office, deployer (8개) +- **서비스**: lotto-lab, stock-lab, travel-proxy, music-lab, blog-lab, realestate-lab, agent-office, portfolio, deployer (9개) - **프론트엔드**: 별도 레포 (React + Vite SPA), 빌드 산출물만 NAS에 배포 - **인프라**: Docker Compose (9컨테이너) + Nginx(리버스 프록시) + Gitea Webhook 자동 배포 @@ -59,6 +59,7 @@ Synology NAS 기반의 개인 웹 플랫폼 백엔드 모노레포. | `blog-lab` | 18700 | 블로그 마케팅 수익화 API | | `realestate-lab` | 18800 | 부동산 청약 자동 수집·매칭 API | | `agent-office` | 18900 | AI 에이전트 오피스 (실시간 WebSocket + 텔레그램 연동) | +| `portfolio` | 18850 | 개인 포트폴리오 (프로필·경력·프로젝트·자기소개 관리) | | `travel-proxy` | 19000 | 여행 사진 API + 썸네일 생성 | | `lotto-frontend` (nginx) | 8080 | 정적 SPA 서빙 + API 리버스 프록시 | | `webpage-deployer` | 19010 | Gitea Webhook 수신 → 자동 배포 | @@ -77,6 +78,7 @@ Synology NAS 기반의 개인 웹 플랫폼 백엔드 모노레포. | `/api/music/` | `music-lab:8000` | AI 음악 생성·라이브러리 API | | `/api/blog-marketing/` | `blog-lab:8000` | 블로그 마케팅 수익화 API | | `/api/realestate/` | `realestate-lab:8000` | 부동산 청약 API | +| `/api/profile/` | `portfolio:8000` | 포트폴리오 API | | `/api/agent-office/` | `agent-office:8000` | AI 에이전트 오피스 API + WebSocket | | `/webhook`, `/webhook/` | `deployer:9000` | Gitea Webhook | | `/media/music/` | `/data/music/` (파일 직접 서빙) | 생성된 오디오 파일 | @@ -492,6 +494,41 @@ docker compose up -d | GET | `/api/agent-office/states` | 전체 에이전트 상태 조회 | | GET | `/api/agent-office/conversation/stats` | 텔레그램 자연어 대화 토큰·캐시 통계 (`days` 필터) | +### portfolio (portfolio/) +- 개인 포트폴리오 서비스 (프로필, 경력, 프로젝트, 기술스택, 자기소개 관리) +- DB: `/app/data/portfolio.db` (profile, careers, projects, skills, introductions 테이블) +- 편집 인증: `PORTFOLIO_EDIT_PASSWORD` 환경변수, Bearer 토큰 (24시간 TTL) +- 파일 구조: `main.py`, `db.py`, `models.py`, `auth.py` + +**환경변수** +- `PORTFOLIO_EDIT_PASSWORD`: 편집 모드 비밀번호 (미설정 시 편집 불가) + +**portfolio API 목록** + +| 메서드 | 경로 | 설명 | +|--------|------|------| +| GET | `/api/profile/public` | 공개 데이터 일괄 조회 | +| POST | `/api/profile/auth` | 비밀번호 인증 → 토큰 | +| GET | `/api/profile/profile` | 프로필 조회 (인증) | +| PUT | `/api/profile/profile` | 프로필 수정 (인증) | +| GET | `/api/profile/careers` | 경력 목록 (인증) | +| POST | `/api/profile/careers` | 경력 추가 (인증) | +| PUT | `/api/profile/careers/{id}` | 경력 수정 (인증) | +| DELETE | `/api/profile/careers/{id}` | 경력 삭제 (인증) | +| GET | `/api/profile/projects` | 프로젝트 목록 (인증) | +| POST | `/api/profile/projects` | 프로젝트 추가 (인증) | +| PUT | `/api/profile/projects/{id}` | 프로젝트 수정 (인증) | +| DELETE | `/api/profile/projects/{id}` | 프로젝트 삭제 (인증) | +| GET | `/api/profile/skills` | 기술 목록 (인증) | +| POST | `/api/profile/skills` | 기술 추가 (인증) | +| PUT | `/api/profile/skills/{id}` | 기술 수정 (인증) | +| DELETE | `/api/profile/skills/{id}` | 기술 삭제 (인증) | +| GET | `/api/profile/introductions` | 자기소개 목록 (인증) | +| POST | `/api/profile/introductions` | 자기소개 추가 (인증) | +| PUT | `/api/profile/introductions/{id}` | 자기소개 수정 (인증) | +| DELETE | `/api/profile/introductions/{id}` | 자기소개 삭제 (인증) | +| PATCH | `/api/profile/introductions/{id}/main` | 메인 자기소개 지정 (인증) | + ### deployer (deployer/) - Webhook 검증: `X-Gitea-Signature` (HMAC SHA256, `compare_digest` 사용) - `WEBHOOK_SECRET` 환경변수로 시크릿 관리