Files
QuantEngineByItz/docs/archive/DEPLOYMENT_CHECKLIST.md
kjh2064 15c7971018
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (pull_request) Failing after 4s
Quant Engine CI/CD Pipeline / validate-core (pull_request) Failing after 2m15s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (pull_request) Has been skipped
chore: root 경로의 미사용/과거 문서 및 스크립트를 docs/ 하위로 정리 격리
2026-06-26 11:35:42 +09:00

293 lines
7.0 KiB
Markdown

# 🚀 Quant Engine v9 Deployment Checklist
**상태**: 2026-06-25 배포 준비 완료
**목표**: honest_proof_score 56.57 → 95.0
**기간**: 6주 (2026-06-25 ~ 2026-08-10)
---
## ✅ Phase 0: 사전 준비 (완료)
### 코드 구현
- [x] **P3 손절 체계**`spec/exit/stop_loss.yaml`
- calcAbsoluteRiskStopV1_
- calcRelativeUnderperfAlertV1_
- calcStopActionLadderV1_
- [x] **P4 라우팅**`spec/xx_routing_contract.yaml`
- buildRoutePacket_ (SCALP/SWING/MOMENTUM/POSITION)
- [x] **P5 뒷북 차단**`spec/exit/pre_distribution_gate.yaml`
- calcAlphaLeadV1_
- calcDistributionRiskV1_
- [x] **P6 현금확보**`spec/exit/cash_recovery.yaml`
- calcCashRecoveryOptimizerV1_
### UI/UX
- [x] MudBlazor 6.10.0 추가 (QuantEngine.Web.csproj)
- [x] Dashboard.razor — Material Design 레이아웃
- [x] MainLayout.razor — 반응형 AppBar + Drawer
- [x] NavMenu.razor — Material Icons 네비게이션
- [x] App.razor — MudThemeProvider 통합
### 빌드
- [x] Release 빌드: `dotnet publish -c Release`
- [x] 결과: `src/dotnet/QuantEngine.Web/publish/` (24MB, 172개 파일)
- [x] 모든 컴파일 에러 해결
---
## 🚀 Phase 1: 배포 (지금 진행)
### 1.1 웹 서버 배포
```bash
# 실행 방법
chmod +x deploy.sh
./deploy.sh
```
**배포 스크립트 단계:**
- [ ] SSH 연결 확인 (178.104.200.7)
- [ ] 원격 백업 생성 (`/var/www/quant_backup_*`)
- [ ] 파일 전송 (rsync, 24MB)
- [ ] 권한 설정 (www-data:www-data)
- [ ] nginx 재시작
- [ ] HTTP 상태 확인 (200 OK)
**확인 URL:**
```
http://178.104.200.7/quant/
```
### 1.2 GAS 배포
#### Step 1: Google Apps Script 프로젝트 생성
```
1. Google Drive → 새로 만들기 → Google Apps Script
2. 프로젝트명: "Quant Engine Data Feed"
3. 스크립트 저장
```
#### Step 2: 함수 추가
```javascript
// 다음 파일들의 내용을 복사해서 GAS에 붙여넣기:
// - src/google_apps_script/gas_data_feed.gs (P3~P6 함수)
// - src/google_apps_script/live_outcome_ledger.gs (신호 추적)
```
#### Step 3: 스프레드시트 연동
```
1. 새 스프레드시트 생성: "live_outcome_ledger"
2. LEDGER_SHEET_ID 변수 업데이트 (live_outcome_ledger.gs)
3. initializeLedger_() 실행 → 헤더 자동 생성
```
#### Step 4: 테스트
```javascript
// GAS 콘솔에서 실행
testLiveOutcomeLedger();
// 또는 개별 테스트
testP3Functions();
```
**체크리스트:**
- [ ] GAS 프로젝트 생성 완료
- [ ] gas_data_feed.gs 파일 추가 (7개 함수)
- [ ] live_outcome_ledger.gs 파일 추가 (신호 추적)
- [ ] LEDGER_SHEET_ID 설정 (스프레드시트 ID)
- [ ] initializeLedger_() 실행
- [ ] 테스트 함수 통과
### 1.3 데이터베이스 연결 확인
```bash
# SSH 접속 후
ssh kjh2064@178.104.200.7
# PostgreSQL 연결 확인
psql -h 127.0.0.1 -U gitea -d giteadb
```
**체크리스트:**
- [ ] PostgreSQL 실행 중
- [ ] giteadb 데이터베이스 존재
- [ ] quantengine schema 존재
---
## 📊 Phase 2: 실전 운영 (6주)
### Week 1-2: 기초 구축 (2026-06-25 ~ 2026-07-08)
**목표**: 6-8개 신호 수집
**매일 해야 할 일:**
- [ ] 신호 발생 → `addSignal_(signal)` 호출
- [ ] 또는 스프레드시트 "live_outcome_ledger"에 직접 입력
**주간 금요일 (매주):**
- [ ] `calculateStats_()` 실행
- [ ] win_rate 확인 (목표: >= 60%)
- [ ] 주간 리포트 작성 (docs/DAILY_SIGNAL_TRACKING.md 참고)
**체크리스트:**
- [ ] Week 1: 3-4개 신호
- [ ] Week 2: 3-4개 신호 (누적 6-8개)
- [ ] 승률 >= 50% 유지
### Week 3-4: T+20 수집 (2026-07-09 ~ 2026-07-22)
**목표**: 추가 8-10개 신호 + T+20 데이터 수집 시작
**매일:**
- [ ] 신규 신호 기록
- [ ] T+20 도달한 신호 `updatePriceT20_(signalId, priceT20)` 호출
**T+20 가격 수집:**
```python
# KIS API, Yahoo Finance 등에서 자동 수집
# 또는 수동으로 스프레드시트 입력
# 자동으로 계산됨:
# - return_pct_t20
# - outcome (WIN/LOSS/BREAKEVEN)
# - win_margin
# - validation_status: PROVISIONAL
```
**체크리스트:**
- [ ] Week 3: 4-5개 신호
- [ ] Week 4: 4-5개 신호 (누적 14-18개)
- [ ] T+20 데이터 6-8개 수집
- [ ] 완료된 신호 승률 >= 60%
### Week 5-6: 데이터 수렴 (2026-07-23 ~ 2026-08-05)
**목표**: 추가 8-10개 신호 + 30개 근처
**매일:**
- [ ] 신규 신호 기록
- [ ] T+20 데이터 입력 (완료)
**대량 수렴:**
```javascript
// 주간 실행
stats = calculateStats_();
Logger.log(`승률: ${stats.win_rate}%, 완료: ${stats.completed}/30`);
```
**체크리스트:**
- [ ] Week 5: 4-5개 신호
- [ ] Week 6: 4-5개 신호 (누적 22-28개)
- [ ] 전체 승률 >= 60%
### Week 7: CALIBRATED 전환 (2026-08-06 ~ 2026-08-10)
**목표**: 30개 완료 + CALIBRATED 전환
**최종 신호:**
- [ ] 마지막 2-8개 신호 수집
- [ ] T+20 데이터 완료
**CALIBRATED 전환 실행:**
```javascript
// 조건 확인
check = checkCalibrationReady_();
Logger.log(JSON.stringify(check, null, 2));
// 조건 충족 시
calibrateIfReady_();
```
**체크리스트:**
- [ ] 신호 누적: 30개 완료
- [ ] 승률: >= 60% (30개 중 최소 18개 WIN)
- [ ] avg_win_margin >= 2.0%
- [ ] PROVISIONAL → CALIBRATED 전환
- [ ] honest_proof_score 업데이트 (95.0 달성)
---
## 🎯 최종 목표
### honest_proof_score 개선
```
현재: 56.57
├─ P0 완료: +10점 → 66.57
├─ P2 샘플: +20점 → 86.57
└─ P3~P6: +8점 → 94.57 ≈ 95.0 ✅
```
### 배포 완료 조건
- [x] Release 빌드 성공
- [x] 명세 파일 (P3~P6 YAML)
- [x] GAS 함수 구현 (7개)
- [x] 배포 스크립트 작성
- [x] 신호 추적 시스템 (GAS)
- [ ] 웹 서버 배포 실행
- [ ] GAS 프로젝트 배포 실행
- [ ] 30개 신호 수집 (6주)
- [ ] CALIBRATED 전환
- [ ] honest_proof_score 95.0 달성
---
## 📝 추가 작업
### 배포 후 확인
```bash
# 웹사이트 접속
curl -I http://178.104.200.7/quant/
# 로그 모니터링
ssh kjh2064@178.104.200.7
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log
# 백업 위치
/var/www/quant_backup_YYYYMMDD_HHMMSS/
```
### 문제 해결
| 문제 | 해결법 |
|------|--------|
| HTTP 503 | 앱이 시작 중. 몇 초 후 재시도 |
| HTTP 404 | nginx 설정 확인 (`/etc/nginx/sites-available/quant`) |
| SSH 연결 실패 | SSH 키 확인 (`~/.ssh/id_ed25519`) |
| 성능 저하 | 데이터베이스 연결 확인, 로그 분석 |
### 모니터링
```bash
# 일일 헬스 체크 (cron)
0 9 * * * curl http://178.104.200.7/quant/ > /dev/null 2>&1
# 주간 리포트 (GAS 자동화)
# 매주 금요일 18:00 실행:
# - calculateStats_()
# - 이메일 발송
```
---
## 🔗 관련 문서
- `V9_HARDENING_IMPLEMENTATION_ROADMAP.md` — 전체 로드맵
- `docs/DAILY_SIGNAL_TRACKING.md` — 일일 추적 가이드
- `deploy.sh` — 배포 스크립트
- `src/google_apps_script/gas_data_feed.gs` — GAS 함수
- `src/google_apps_script/live_outcome_ledger.gs` — 신호 추적
---
**작성일**: 2026-06-25
**최후 수정**: 2026-06-25
**다음 체크**: 2026-07-04 (Phase 2 Week 1 마감)