Files
ai-trade/CHECK_POINT.md
gahusb 139e4e3382 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>
2026-05-19 01:31:47 +09:00

10 KiB
Raw Blame History

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
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

# 트레이딩 자동 시작 (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

# 변경 전 → 변경 후
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)

# 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).