# web-ai CHECK_POINT

> Windows AI Server (192.168.45.59), AMD 9800X3D + RTX 5070 Ti (16GB VRAM).
> V1(LSTM 레거시) + V2(Chronos-2 signal pipeline) 이중 구조.
> 2026-05-18 작성.

## 🚀 2026-05-18 박재오 7 결정 — Windows 컴퓨팅 노드 신설 (1주 작업)

박재오 결정 7건 완료. 상세 가이드: `Obsidian Vault/raw/2026-05-18-Windows-NAS-아키텍처-7결정-통합.md`

### 결정 6 — 옵션 4 하이브리드 운영

```
[Windows AI Server]

🔵 Native Python (NSSM 자동 시작, HIGH priority)
  ├─ ai_trade (트레이딩 :8001) ⭐ 절대 우선
  ├─ Ollama qwen3:14b (:11435)
  └─ MusicGen (:8765)

🟢 WSL2 + Docker Engine (Docker Desktop X, 라이선스·메모리 ↓)
  ├─ insta-render (:18710) ⭐ NEW
  ├─ music-render (:8771) ⭐ NEW
  ├─ video-render (:18712) ⭐ NEW (외부 API 게이트웨이)
  └─ task-watcher (옵션 d 작업 감지)
```

### Day 2 — WSL2 + Docker Engine 설치 ⭐ (2시간)

```powershell
# 관리자 PowerShell
wsl --install -d Ubuntu-22.04
# 재부팅 후 Ubuntu 초기 설정

wsl -d Ubuntu-22.04
# 안에서 Docker Engine 설치
sudo apt update && sudo apt install -y ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update && sudo apt install -y docker-ce docker-compose-plugin
sudo usermod -aG docker $USER
sudo systemctl enable docker
sudo systemctl start docker

# Tailscale (NAS와 같은 LAN 확인)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
```

- [ ] WSL2 + Ubuntu 22.04 설치
- [ ] Docker Engine 설치 (Desktop X)
- [ ] Tailscale 가입

### Day 3~4 — insta-render 컨테이너 신설 ⭐ (4시간)

**디렉토리**: `C:\Users\jaeoh\Desktop\workspace\web-ai-services\insta-render\`

**Dockerfile**: Playwright + Python 3.12 (raw 파일에 풀 코드)

**main.py**: Redis 큐 worker + Playwright Browser pool + Semaphore(1)

- [ ] 디렉토리 생성 + Dockerfile + main.py + requirements.txt
- [ ] `docker compose up -d insta-render`
- [ ] 테스트: NAS Redis에서 작업 push → Windows에서 처리 확인

### Day 6 — NSSM 자동 시작 ⭐ (1시간)

**NSSM 다운로드**: https://nssm.cc/download

```powershell
# 관리자 PowerShell

# 트레이딩 자동 시작 (HIGH priority — 결정 b)
nssm install ai_trade "C:\Python312\python.exe" "-m uvicorn main:app --host 0.0.0.0 --port 8001"
nssm set ai_trade AppDirectory "C:\Users\jaeoh\Desktop\workspace\web-ai\ai_trade"
nssm set ai_trade Priority HIGH_PRIORITY_CLASS
nssm set ai_trade AppStartup AUTO

# WSL2 + Docker 자동 시작
nssm install wsl_docker "wsl" "-d Ubuntu-22.04 -- sudo service docker start && cd /workspace/web-ai-services && docker compose up -d"
nssm set wsl_docker AppStartup AUTO

# 시작
nssm start ai_trade
nssm start wsl_docker
```

- [ ] NSSM 다운로드 + 압축 해제 + PATH 추가
- [ ] ai_trade service 등록 (HIGH priority)
- [ ] wsl_docker service 등록
- [ ] 재부팅 후 자동 시작 확인

### Day 7 — 작업 감지 (옵션 d) — task-watcher ⭐ (2시간)

박재오 작업 중 → Redis `queue:paused` 플래그 → 워커 일시정지. 트레이딩은 영향 X.

선택지:
- **A. 자동 (Python pynput + PowerShell API)** — 마우스·게임 process 감지, 자동 토글
- **B. 수동 토글** — 박재오님이 작업 시작 시 `redis-cli SET queue:paused 1`, 종료 시 `DEL`
- **C. NAS frontend에 토글 UI 1개** — 클릭 한 번

→ 시작은 **B 수동 토글** (구현 0, 즉시 가능), 나중에 A 자동화로 진화.

- [ ] B 수동 토글 명령어 확인
- [ ] 또는 A Python pynput 자동 감지 구현 (선택, 2시간)

### Day 5 — music-render 컨테이너 (선택 — MusicGen 패턴 정착)

기존 NAS music-lab → Windows MusicGen 호출 패턴 이미 운영 중. 표준화만:
- [ ] Redis 큐 사용으로 전환 (HTTP 직접 호출 X)
- [ ] Browser pool 같은 패턴 적용 (Suno + MusicGen 동시 1개)

### Day 5 — video-render 컨테이너 (선택 — 영상 생성 결정 4)

외부 영상 API 6개 게이트웨이 (Runway·Sora·Veo·Pika·Kling·Luma):
- [ ] 박재오 자금·품질 판단 후 1~2개 가입
- [ ] `.env`에 API 키 추가
- [ ] video-render Docker 컨테이너 신설

---

## 🔥 2026-05-18 추가 — NAS API 부하 진짜 원인 발견

박재오 발견: 5건 + 중기 2건 적용 후 **web-ai V1+V2 4 process 종료가 NAS CPU 가장 큰 즉시 감소**.
→ 진짜 병목은 **web-ai → NAS stock(:18500) 인바운드 API 호출 빈도**.

상세: `Obsidian Vault/raw/2026-05-18-NAS-Window-AI-API-부하-해결방안.md`

### 🔴 추가 즉시 작업 (50분으로 70% 부담 감소)

#### A. 캐시 TTL 대폭 증가 ⭐⭐⭐ (10분)
**파일**: `ai_trade/stock_client.py`
```python
# 변경 전 → 변경 후
PORTFOLIO_TTL = 60   → 180  # 3분
NEWS_TTL      = 300  → 600  # 10분
SCREENER_TTL  = 60   → 300  # 5분
```
- [ ] 3 TTL 상수 증가
- 효과: 분당 12 호출 → 3~4 호출 (70% 감소)

#### B. V1·V2 단일화 결정 ⭐⭐ (10분 결정)
- 동시 운영 시 NAS API 부담 2배 + KIS rate limit 충돌
- **권장**: V1 폐기 + V2 단독 (Phase 4 자산 활용)
- 또는 V2 임시 종료 + V1 유지 → Phase 5 진입 시 V1 폐기
- [ ] 박재오 결정
- [ ] 선택 안 된 쪽 `legacy/` 또는 `.disabled`
- [ ] start.bat 한 쪽만

#### C. (NAS 측) stock TTLCache — web-backend CHECK_POINT.md #13 참고
- 박재오가 web-backend/stock에서 별도 적용

## 🟢 현재 상태

- **V2 Phase 4 완료** (5/17, 56/56 tests pass, main push)
- Chronos-2 zero-shot 1일 수익률 + 분봉 모멘텀 5단계
- 09:00~15:30 매 1분 / 16:00 일봉 추론
- Sell-first 우선순위 (stop_loss · anomaly · take_profit) + 매수 hard gate
- Confidence = chronos×0.5 + momentum×0.3 + screener×0.2

---

## 🔴 즉시 (이번 주)

### 1. V1 vs V2 KIS rate limit 충돌 해결
- **현재**: V1 + V2 동시 실행 시 KIS EGW00201 (초당 2회 제한) 충돌
- **임시 해결**: V2 종료 상태 (현재 V1만 운영 중)
- **결정 필요**: V1 deprecation 시점 (Phase 6)
- [ ] 박재오 결정 — V1 폐기 일자 (예: 5/20 / 5/31)
- [ ] Phase 5 진입 전 V1 정리

### 2. `.venv` 한글 경로 문제 해결
- 가상환경 한글 경로 깨짐 → 시스템 Python 사용 강제
- 다른 개발 머신 협업 시 문제
- [ ] `.venv`를 영문 경로로 이전 또는 시스템 Python으로 통일
- [ ] start.bat에 경로 명시

### 3. `state.signals` consumer-drain protocol 정의
- Phase 5 prereq
- 신호가 누적되기만 하고 소비 로직 미정의
- [ ] consumer (예: agent-office /signal endpoint)가 처리한 신호 marking
- [ ] 24h 만료 dedup 외에 *처리됨* 상태 추가

---

## 🟡 중기 (1~2주, Phase 5)

### 4. agent-office `/signal` 엔드포인트 통합
- web-ai V2가 매수/매도 신호 생성 → agent-office로 push
- agent-office가 텔레그램 발송 + 사용자 결정 대기
- [ ] V2에서 agent-office HTTP POST 호출 추가
- [ ] payload: ticker, action, confidence, reasoning, chronos_quantile

### 5. Ollama Qwen3 14B 통합 (Windows 로컬)
- 신호 *해석* 레이어 — 단순 규칙 결과 → LLM 자연어 설명
- 9.3GB VRAM 사용 (Chronos 7GB와 동시 가능, 15.5GB)
- [ ] Ollama Windows 설치 (이미 실행 중인지 확인)
- [ ] `state.signals` 큐에서 신호 pop → Qwen3 prompt → 결과 add
- [ ] 텔레그램 전송 시 LLM 해석 텍스트 포함

### 6. 이중 텔레그램 전송
- 현재: V1만 텔레그램 발송 (Telegram Bot + KIS 자동주문)
- Phase 5: V2도 별도 chat_id로 발송 (박재오 본인용 + 검증용)
- [ ] V2 텔레그램 chat_id 환경변수 (`TELEGRAM_V2_CHAT_ID`)
- [ ] V1·V2 메시지 톤 차별화 (V1 = 자동주문 / V2 = 신호 알림)

### 7. holidays.json 자동 동기화
- 현재: NAS에서 수동 copy
- 한국 휴장일 누락 시 V2 폴링 실수 (휴장일에도 KIS 호출)
- [ ] NAS realestate-lab 또는 별도 컨테이너에서 휴장일 자동 발급
- [ ] V2가 부팅 시·매일 00:00에 GET 갱신

---

## 🟢 장기 (1개월+, Phase 6+)

### 8. V1 완전 deprecation
- LSTM 7-feature 모델 + main_server.py 폐기
- 모든 자동매매 V2로 통일
- [ ] V1 종료 일자 박재오 결정
- [ ] V1 코드 `legacy/` 폴더로 이동 (read-only)

### 9. Chronos-2 모델 미세조정 검토
- 현재 zero-shot. 한국 주식 데이터로 미세조정 시 정확도 ↑ 가능?
- 박재오 자체 학습 데이터 (KIS 1년치) → finetune
- [ ] 데이터 수집·전처리
- [ ] LoRA 또는 full finetune 결정

### 10. KIS WebSocket 실 운영 검증
- 현재 코드는 있으나 검증 부족
- 실시간 호가가 1분 폴링보다 빠른 신호 확보 가능
- [ ] 1주일 운영 후 latency·드롭 측정

---

## ✅ 최근 완료 (참고)

- 2026-05-17: emit/skip 로깅 추가 (`2aa9f48`)
- 2026-05-17: signal_generator poll_loop 통합 — Phase 4 완료 (`cc6310d`)
- 2026-05-16: 코드 리뷰 수정 — sell-first 순서, anomaly 테스트 (`e574074`)
- 2026-05-16: signal_generator 초안 — 9개 unit test (`b9def06`)
- 2026-05-15: Foundation — 6개 env 임계값 + state.signals 필드 (`05ab284`)
- 2026-05-14: FP32 강제 — Chronos FP16 overflow 회피 (`760f914`)

---

## 🔧 운영 커맨드 (Windows PowerShell)

```powershell
# V2 시작
cd C:\Users\jaeoh\Desktop\workspace\web-ai\ai_trade
.\start.bat

# 테스트 실행 (56 tests)
pytest tests/ -v

# 로그 확인 (V2 실시간)
Get-Content logs/ai_trade.log -Wait

# Chronos 메모리 사용 확인
nvidia-smi

# KIS API 헬스 (REST)
curl http://localhost:8001/health
```

---

## 📚 참고

- 위키: [[자산-주식-자동매매]] (V3.1 → V2 Phase 4 정정 필요)
- NAS stock 연동: `192.168.45.54:18500` (X-WebAI-Key 인증)
- CLAUDE.md (본 디렉토리 루트): Phase 진행도 + 환경변수 명세

## 변경 이력

- 2026-05-18: 페이지 신설. 즉시 3건 (V1/V2 충돌, .venv 한글, consumer protocol) + 중기 4건 (Phase 5) + 장기 3건 (V1 deprecation·Chronos finetune·WebSocket).
