박재오 결정 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>
10 KiB
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).