refactor(web-ai): rename signal_v2→ai_trade, deprecate signal_v1
박재오 결정 2026-05-19 — V2를 정식 명칭 ai_trade로 graduation, V1은 deprecated 마킹 (legacy 디렉토리 이동은 file lock 풀린 후 후속). 변경 사항: - signal_v2/ → ai_trade/ (git mv, import 일괄 sed: signal_v2.x → ai_trade.x) - root start.bat → legacy/start_v1.bat (V1 자동 시작 차단) - ai_trade/start.bat 내부 uvicorn target signal_v2.main → ai_trade.main - signal_v1/DEPRECATED.md 추가 (사용 금지 명시) - CLAUDE.md 디렉토리 표·서버 시작 방식 갱신 - services/ 디렉토리 미래 예정 (Plan-B-Insta 작업 시 신설) ai_trade tests 59/59 PASS 확인. signal_v1/ 디렉토리 자체 이동(legacy/signal_v1/)은 telegram_bot.log + data/news_snapshots.db file lock으로 보류. lock 해제 후 후속 커밋. 후속 작업: Plan-B-Insta (services/insta-render + NAS insta 분할) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
277
CHECK_POINT.md
Normal file
277
CHECK_POINT.md
Normal file
@@ -0,0 +1,277 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user