# πŸš€ Quant Engine 배포 (Step-by-Step) **μƒνƒœ**: 배포 μ€€λΉ„ μ™„λ£Œ **μΌμ‹œ**: 2026-06-25 18:30 KST **νŒ¨ν‚€μ§€**: 24MB (173 파일) --- ## 🎯 배포 체크 ### βœ… ν˜„μž¬ μƒνƒœ ``` [βœ“] Release λΉŒλ“œ: μ™„λ£Œ (24MB) [βœ“] SSH μ—°κ²°: 성곡 (178.104.200.7) [βœ“] 배포 슀크립트: 쀀비됨 [⚠] sudo κΆŒν•œ: 터미널 μƒν˜Έμž‘μš© ν•„μš” ``` --- ## πŸ“‹ 배포 μ˜΅μ…˜ ### **ꢌμž₯: 원격 SSH 배포** (κ΄€λ¦¬μž κΆŒν•œ ν•„μš”) #### ν„°λ―Έλ„μ—μ„œ μ‹€ν–‰ (λŒ€ν™”ν˜• λͺ¨λ“œ) ```bash # 1단계: 배포 디렉토리 이동 cd /c/Temp/data_feed # 2단계: SSH 접속 (λŒ€ν™”ν˜•) ssh kjh2064@178.104.200.7 # 원격 μ„œλ²„μ—μ„œ μ‹€ν–‰: # ───────────────────────────────────── # 3단계: λ°±μ—… 생성 sudo mkdir -p /var/www/quant_backup sudo cp -r /var/www/quant/publish /var/www/quant_backup/backup_$(date +%Y%m%d_%H%M%S) echo "βœ“ λ°±μ—… μ™„λ£Œ" # 4단계: 배포 폴더 κΆŒν•œ μ„€μ • sudo chmod -R 777 /var/www/quant/publish echo "βœ“ κΆŒν•œ μ„€μ •" # 5단계: λ‘œμ»¬μ—μ„œ 파일 전솑 μ€€λΉ„ # (λ‹€μŒ ν„°λ―Έλ„μ—μ„œ μ‹€ν–‰) ``` #### 둜컬 터미널 (μƒˆ μ°½) ```bash # 파일 전솑 cd /c/Temp/data_feed rsync -avz --delete --progress \ src/dotnet/QuantEngine.Web/publish/ \ kjh2064@178.104.200.7:/var/www/quant/publish/ # 좜λ ₯: # - μ‚­μ œλœ 파일: (μ—†μŒ) # - μ „μ†‘λœ 파일: 173개 # - 전솑 크기: 24MB # - μ˜ˆμƒ μ‹œκ°„: 1-3λΆ„ ``` #### 원격 μ„œλ²„ 계속 (첫 터미널) ```bash # 6단계: κΆŒν•œ μ΅œμ’… μ„€μ • sudo chown -R www-data:www-data /var/www/quant/publish sudo chmod -R 755 /var/www/quant/publish echo "βœ“ κΆŒν•œ μ΅œμ’… μ„€μ •" # 7단계: nginx μž¬μ‹œμž‘ sudo systemctl restart nginx echo "βœ“ nginx μž¬μ‹œμž‘ μ™„λ£Œ" # 8단계: μƒνƒœ 확인 sudo systemctl status nginx curl -I http://localhost/quant/ echo "βœ“ 배포 μ™„λ£Œ" # 9단계: SSH μ’…λ£Œ exit ``` --- ### **λΉ λ₯Έ 배포** (SSH ν‚€ 기반, λΉ„λŒ€ν™”ν˜•) #### ν•œ 쀄 λͺ…λ Ή ```bash cd /c/Temp/data_feed && \ rsync -avz --delete src/dotnet/QuantEngine.Web/publish/ \ kjh2064@178.104.200.7:/var/www/quant/publish/ && \ ssh kjh2064@178.104.200.7 \ 'sudo systemctl restart nginx && echo "βœ“ 배포 μ™„λ£Œ"' ``` --- ### **둜컬 ν…ŒμŠ€νŠΈ 배포** (λ„€νŠΈμ›Œν¬ λΆˆν•„μš”) #### Windows PowerShell ```powershell # 1. IIS μ‚¬μ΄νŠΈ 폴더 생성 New-Item -ItemType Directory -Path "C:\var\www\quant\publish" -Force # 2. 배포 파일 볡사 Copy-Item -Path "src/dotnet/QuantEngine.Web/publish/*" ` -Destination "C:\var\www\quant\publish" ` -Recurse -Force # 3. IISμ—μ„œ μƒˆ μ‚¬μ΄νŠΈ 생성 # 이름: Quant Engine # 경둜: C:\var\www\quant\publish # 포트: 8080 # 4. μ•± ν’€ μ„€μ • # .NET λŸ°νƒ€μž„: 10.0 # νŒŒμ΄ν”„λΌμΈ λͺ¨λ“œ: Integrated # 5. 접속 # http://localhost:8080 ``` --- ## πŸ” 배포 ν›„ 검증 ### 1️⃣ μ›Ή μ„œλΉ„μŠ€ μƒνƒœ 확인 ```bash # HTTP 응닡 확인 curl -I http://178.104.200.7/quant/ # κΈ°λŒ€ κ²°κ³Ό: # HTTP/1.1 200 OK # Content-Type: text/html; charset=utf-8 # Server: nginx ``` ### 2️⃣ 둜그 확인 ```bash # nginx μ—λŸ¬ 둜그 ssh kjh2064@178.104.200.7 'sudo tail -20 /var/log/nginx/error.log' # κΈ°λŒ€: μ—λŸ¬ μ—†μŒ # μ ‘κ·Ό 둜그 ssh kjh2064@178.104.200.7 'sudo tail -10 /var/log/nginx/access.log' # κΈ°λŒ€: GET /quant/ 200 응닡 ``` ### 3️⃣ κΈ°λŠ₯ ν…ŒμŠ€νŠΈ ```bash # νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œκ°„ time curl -s http://178.104.200.7/quant/ | wc -l # κΈ°λŒ€: < 2초, > 1000 라인 # MudBlazor λ‘œλ“œ 확인 curl -s http://178.104.200.7/quant/ | grep "MudBlazor" # κΈ°λŒ€: MudBlazor.min.css, MudBlazor.min.js 포함 ``` ### 4️⃣ λΈŒλΌμš°μ € ν…ŒμŠ€νŠΈ ``` 1. http://178.104.200.7/quant/ 접속 2. Dashboard νŽ˜μ΄μ§€ λ‘œλ“œ 확인 3. KPI μΉ΄λ“œ λ Œλ”λ§ 확인 4. μ„±κ³Ό λ©”νŠΈλ¦­ ν‘œμ‹œ 확인 5. μ•Œκ³ λ¦¬μ¦˜ ν…Œμ΄λΈ” ν‘œμ‹œ 확인 6. μ‹ ν˜Έ ν”Όλ“œ ν‘œμ‹œ 확인 7. MudBlazor μŠ€νƒ€μΌ 적용 확인 8. λͺ¨λ°”일 λ°˜μ‘ν˜• 확인 (F12 β†’ λͺ¨λ°”일 λͺ¨λ“œ) ``` --- ## βœ… 배포 체크리슀트 ### 배포 μ „ ``` [ ] Release λΉŒλ“œ μ™„λ£Œ 확인 [ ] SSH ν‚€ κΆŒν•œ 확인 (chmod 600 ~/.ssh/id_ed25519) [ ] 원격 μ„œλ²„ 접속 κ°€λŠ₯ 확인 [ ] λ””μŠ€ν¬ 곡간 확인 (df -h: > 500MB ν•„μš”) [ ] nginx μ‹€ν–‰ 확인 (systemctl status nginx) ``` ### 배포 쀑 ``` [ ] λ°±μ—… 생성 확인 [ ] 파일 전솑 μ§„ν–‰ 상황 λͺ¨λ‹ˆν„°λ§ [ ] κΆŒν•œ μ„€μ • μ™„λ£Œ 확인 [ ] nginx μž¬μ‹œμž‘ 성곡 확인 ``` ### 배포 ν›„ ``` [ ] HTTP 200 응닡 확인 [ ] Dashboard νŽ˜μ΄μ§€ λ‘œλ“œ 확인 [ ] MudBlazor μŠ€νƒ€μΌ λ Œλ”λ§ 확인 [ ] λͺ¨λ“  μΉ΄λ“œ ν‘œμ‹œ 확인 [ ] ν…Œμ΄λΈ” 데이터 ν‘œμ‹œ 확인 [ ] λͺ¨λ°”일 λ°˜μ‘ν˜• μž‘λ™ 확인 [ ] 둜그 μ—λŸ¬ μ—†μŒ 확인 ``` --- ## πŸ†˜ κΈ΄κΈ‰ 볡ꡬ ### 이전 λ²„μ „μœΌλ‘œ 볡원 ```bash ssh kjh2064@178.104.200.7 << 'EOF' # λ°±μ—… λͺ©λ‘ 확인 ls -la /var/www/quant_backup/ # μ΅œμ‹  λ°±μ—…μœΌλ‘œ 볡원 LATEST_BACKUP=$(ls -t /var/www/quant_backup/ | head -1) sudo cp -r /var/www/quant_backup/$LATEST_BACKUP/* /var/www/quant/publish/ # κΆŒν•œ μž¬μ„€μ • sudo chown -R www-data:www-data /var/www/quant/publish sudo chmod -R 755 /var/www/quant/publish # nginx μž¬μ‹œμž‘ sudo systemctl restart nginx echo "βœ“ 볡원 μ™„λ£Œ" EOF ``` --- ## πŸ“Š 배포 κ²°κ³Ό μš”μ•½ ### μ˜ˆμƒ κ²°κ³Ό ``` 배포 νŒ¨ν‚€μ§€: 24MB (173 파일) 전솑 μ‹œκ°„: 1-3λΆ„ 배포 ν›„ μƒνƒœ: HTTP 200 OK MudBlazor λ‘œλ“œ: βœ… CSS + JS 포함 Dashboard λ Œλ”λ§: βœ… KPI + λ©”νŠΈλ¦­ + μ•Œκ³ λ¦¬μ¦˜ + μ‹ ν˜Έ 응닡 μ‹œκ°„: < 1초 λ©”λͺ¨λ¦¬ μ‚¬μš©: ~150MB (초기) ``` ### 배포 μ™„λ£Œ ν›„ ``` βœ… μ›Ή μ„œλΉ„μŠ€ 운영 μ‹œμž‘ βœ… μ‹€μ‹œκ°„ μ‹ ν˜Έ λͺ¨λ‹ˆν„°λ§ κ°€λŠ₯ βœ… μ„±κ³Ό λ©”νŠΈλ¦­ λŒ€μ‹œλ³΄λ“œ 접속 κ°€λŠ₯ βœ… μ•Œκ³ λ¦¬μ¦˜ μ§„ν–‰ 상황 좔적 κ°€λŠ₯ βœ… λͺ¨λ°”일 접속 κ°€λŠ₯ (λ°˜μ‘ν˜•) ``` --- ## πŸ“ž 배포 문제 ν•΄κ²° | 문제 | 원인 | ν•΄κ²° | |------|------|------| | SSH μ—°κ²° μ‹€νŒ¨ | SSH ν‚€ μ—†μŒ | `ssh-keygen -t ed25519` | | sudo μ•”ν˜Έ μš”μ²­ | 터미널 μƒν˜Έμž‘μš© | SSH λŒ€ν™”ν˜• λͺ¨λ“œ μ‚¬μš© | | 파일 전솑 μ‹€νŒ¨ | λ„€νŠΈμ›Œν¬ λ‹¨μ ˆ | rsync μž¬μ‹€ν–‰ (재개 κ°€λŠ₯) | | HTTP 403 | 파일 κΆŒν•œ | `sudo chmod -R 755 /var/www/quant` | | μŠ€νƒ€μΌ 미적용 | CSS λ‘œλ“œ μ‹€νŒ¨ | nginx μΊμ‹œ μ‚­μ œ, λΈŒλΌμš°μ € μΊμ‹œ μ‚­μ œ | | 포트 좩돌 | nginx λ―Έμ‹€ν–‰ | `sudo systemctl start nginx` | --- ## 🎯 λ‹€μŒ 단계 ### 배포 μ™„λ£Œ ν›„ ``` 1. βœ… μ›Ή μ„œλΉ„μŠ€ λͺ¨λ‹ˆν„°λ§ μ„€μ • 2. βœ… 둜그 μˆ˜μ§‘ μ„€μ • (ELK Stack λ˜λŠ” CloudWatch) 3. βœ… λ°±μ—… μžλ™ν™” (cron λ˜λŠ” systemd timer) 4. βœ… μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§ (Prometheus + Grafana) 5. ⏳ μΆ”κ°€ κΈ°λŠ₯ κ΅¬ν˜„ (Portfolio, Analytics, Reports) ``` ### 운영 ``` 1. 일일 ν—¬μŠ€ 체크 (cron) 2. μ£Όκ°„ 둜그 뢄석 3. μ›”κ°„ μ„±λŠ₯ 리뷰 4. μ‹€μ‹œκ°„ μ‹ ν˜Έ λͺ¨λ‹ˆν„°λ§ 5. 거래 κ²°κ³Ό 좔적 (live_outcome_ledger) ``` --- ## πŸ“ 배포 λͺ…λ Ήμ–΄ 볡사 ### λΉ λ₯Έ 배포 (ν•œ 쀄) ```bash cd /c/Temp/data_feed && rsync -avz --delete src/dotnet/QuantEngine.Web/publish/ kjh2064@178.104.200.7:/var/www/quant/publish/ && ssh kjh2064@178.104.200.7 'sudo systemctl restart nginx' ``` ### μ•ˆμ „ν•œ 배포 (단계별) ```bash # Step 1: λ°±μ—… ssh kjh2064@178.104.200.7 'sudo cp -r /var/www/quant/publish /var/www/quant_backup/backup_$(date +%Y%m%d_%H%M%S)' # Step 2: 전솑 rsync -avz --delete src/dotnet/QuantEngine.Web/publish/ kjh2064@178.104.200.7:/var/www/quant/publish/ # Step 3: κΆŒν•œ ssh kjh2064@178.104.200.7 'sudo chown -R www-data:www-data /var/www/quant/publish && sudo chmod -R 755 /var/www/quant/publish' # Step 4: μž¬μ‹œμž‘ ssh kjh2064@178.104.200.7 'sudo systemctl restart nginx' # Step 5: 확인 curl -I http://178.104.200.7/quant/ ``` --- **배포 μ€€λΉ„ μ™„λ£Œ!** πŸš€ μœ„μ˜ λͺ…λ Ήμ–΄λ₯Ό λ³΅μ‚¬ν•˜μ—¬ 터미널에 λΆ™μ—¬λ„£κΈ°ν•˜μ—¬ 배포λ₯Ό μ‹œμž‘ν•˜μ„Έμš”.