diff --git a/DEPLOYMENT_SSH_GUIDE.md b/DEPLOYMENT_SSH_GUIDE.md
new file mode 100644
index 0000000..3064b9c
--- /dev/null
+++ b/DEPLOYMENT_SSH_GUIDE.md
@@ -0,0 +1,347 @@
+# π SSH λ°°ν¬ κ°μ΄λ
+
+**λͺ©ν**: SSHλ‘ μ격 μλ²μ μ§μ μ μνμ¬ νκ²½μ νμ
ν ν λ°°ν¬
+**λμ**: 178.104.200.7 (κ³΅μΈ IP) / 192.168.123.100 (λ΄λΆ IP)
+
+---
+
+## π μ¬μ μ€λΉ
+
+### 1. SSH ν€ μ€μ (μ΅μ΄ 1ν)
+
+#### 1.1 λ‘컬μμ SSH ν€ μμ±
+```bash
+ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
+```
+
+#### 1.2 κ³΅κ° ν€λ₯Ό μ격 μλ²μ λ±λ‘
+```bash
+ssh-copy-id -i ~/.ssh/id_ed25519.pub kjh2064@178.104.200.7
+# λλ λ΄λΆ IP
+ssh-copy-id -i ~/.ssh/id_ed25519.pub kjh2064@192.168.123.100
+```
+
+#### 1.3 SSH μ°κ²° ν
μ€νΈ
+```bash
+ssh -i ~/.ssh/id_ed25519 kjh2064@192.168.123.100 "echo 'β
μ°κ²° μ±κ³΅'"
+```
+
+---
+
+## π Step 1: νκ²½ νμ
+
+### μμ€ν
μ 보 νμΈ
+
+```bash
+# SSH μ μ
+ssh -i ~/.ssh/id_ed25519 kjh2064@192.168.123.100
+
+# μ격 μλ²μμ μ€ν:
+# βββββββββββββββββββββββββββββββββββββββββββββ
+
+# 1. μμ€ν
μ 보
+uname -a
+lsb_release -a
+
+# 2. λμ€ν¬ μν
+df -h
+
+# 3. μΉ μλ² μν
+sudo systemctl status nginx
+
+# 4. μΉ μλ² κ²½λ‘
+ls -la /var/www/quant/
+ls -la /var/www/quant/publish/
+
+# 5. Nginx μ€μ νμΈ
+sudo cat /etc/nginx/sites-available/default | grep -A 10 "location"
+
+# 6. ν¬νΈ μν
+sudo netstat -tuln | grep :80
+
+# 7. μ¬μ©μ κΆν νμΈ
+id
+sudo -l
+```
+
+### μμ νκ²½
+
+```
+β Linux (Ubuntu 20.04 λλ κ·Έ μ΄μ)
+β nginx (1.18 μ΄μ)
+β /var/www/quant/ λλ ν 리 μ‘΄μ¬ λλ μμ± κ°λ₯
+β www-data λλ μ μ¬ μΉ μλ² μ¬μ©μ
+β sudo κΆν (webmaster κ·Έλ£Ή)
+```
+
+---
+
+## π¦ Step 2: Release λΉλ
+
+```bash
+# λ‘컬μμ μ€ν
+cd /c/Temp/data_feed
+
+# Release λΉλ
+dotnet publish -c Release \
+ -o src/dotnet/QuantEngine.Web/publish
+
+# κ²°κ³Ό νμΈ
+ls -lh src/dotnet/QuantEngine.Web/publish/
+```
+
+---
+
+## π Step 3: λ°°ν¬ μ€ν¬λ¦½νΈ μ€ν
+
+### λ°©λ² 1: μλ λ°°ν¬ μ€ν¬λ¦½νΈ (κΆμ₯)
+
+```bash
+# μ€ν¬λ¦½νΈμ μ€ν κΆν λΆμ¬
+chmod +x deploy-manual.sh
+
+# λ°°ν¬ μ€ν
+./deploy-manual.sh 192.168.123.100
+# λλ
+./deploy-manual.sh 178.104.200.7
+```
+
+**μ€ν¬λ¦½νΈκ° μλμΌλ‘:**
+- β SSH μ°κ²° νμΈ
+- β μ격 νκ²½ νμ
+- β λ°±μ
μμ±
+- β νμΌ μ μ‘ (rsync)
+- β κΆν μ€μ
+- β nginx μ¬μμ
+- β ν¬μ€ 체ν¬
+
+### λ°©λ² 2: μλ λ°°ν¬ (λ¨κ³λ³)
+
+```bash
+# 1. SSH μ μ
+ssh -i ~/.ssh/id_ed25519 kjh2064@192.168.123.100
+
+# μ격 μλ²μμ:
+# βββββββββββββββββββββββββββββββββββββββββββββ
+
+# 2. λ°±μ
μμ±
+sudo mkdir -p /var/www/quant_backup
+sudo cp -r /var/www/quant/publish \
+ /var/www/quant_backup/quant_$(date +%Y%m%d_%H%M%S)
+echo "β λ°±μ
μμ± μλ£"
+
+# 3. λ°°ν¬ λλ ν 리 μ€λΉ
+sudo mkdir -p /var/www/quant/publish
+sudo chmod 777 /var/www/quant/publish
+
+# 4. κΆν μ€μ
+sudo chown -R www-data:www-data /var/www/quant/publish
+sudo chmod -R 755 /var/www/quant/publish
+
+# 5. SSH μ’
λ£
+exit
+```
+
+```bash
+# λ‘컬μμ: νμΌ μ μ‘
+rsync -avz --delete \
+ -e "ssh -i ~/.ssh/id_ed25519" \
+ src/dotnet/QuantEngine.Web/publish/ \
+ kjh2064@192.168.123.100:/var/www/quant/publish/
+```
+
+```bash
+# λ€μ SSH μ μ
+ssh -i ~/.ssh/id_ed25519 kjh2064@192.168.123.100
+
+# μ격 μλ²μμ:
+# βββββββββββββββββββββββββββββββββββββββββββββ
+
+# 6. nginx μ¬μμ
+sudo systemctl restart nginx
+
+# 7. μν νμΈ
+sudo systemctl status nginx
+
+# μ’
λ£
+exit
+```
+
+---
+
+## β
Step 4: λ°°ν¬ κ²μ¦
+
+```bash
+# 1. HTTP μν νμΈ
+curl -I http://178.104.200.7/quant/
+# λλ
+curl -I http://192.168.123.100/quant/
+
+# κΈ°λ: HTTP/1.1 200 OK
+
+# 2. MudBlazor λ‘λ νμΈ
+curl -s http://178.104.200.7/quant/ | grep -c "MudBlazor"
+# κΈ°λ: > 0
+
+# 3. νμ΄μ§ μ λͺ© νμΈ
+curl -s http://178.104.200.7/quant/ | grep -o "
.*"
+# κΈ°λ: Quant Engine - Dashboard
+
+# 4. nginx λ‘κ·Έ νμΈ
+ssh -i ~/.ssh/id_ed25519 kjh2064@192.168.123.100 \
+ 'sudo tail -20 /var/log/nginx/error.log'
+
+# 5. λΈλΌμ°μ ν
μ€νΈ
+# http://178.104.200.7/quant/ μ μ
+```
+
+---
+
+## π λ‘€λ°± (λ°°ν¬ μ€ν¨ μ)
+
+```bash
+ssh -i ~/.ssh/id_ed25519 kjh2064@192.168.123.100 << 'EOF'
+# μ΅μ λ°±μ
νμΈ
+ls -lt /var/www/quant_backup/
+
+# μ΅μ λ°±μ
μΌλ‘ 볡μ
+LATEST=$(ls -t /var/www/quant_backup | head -1)
+echo "볡μ μ€: $LATEST"
+
+sudo cp -r /var/www/quant_backup/$LATEST/* /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
+```
+
+---
+
+## π λ°°ν¬ μ²΄ν¬λ¦¬μ€νΈ
+
+### λ°°ν¬ μ
+```
+[ ] SSH ν€ μ€μ μλ£ (~/.ssh/id_ed25519)
+[ ] SSH μ°κ²° ν
μ€νΈ μ±κ³΅
+[ ] Release λΉλ μλ£ (24MB)
+[ ] λ°°ν¬ μ€ν¬λ¦½νΈ μ€λΉ
+```
+
+### λ°°ν¬ μ€
+```
+[ ] νκ²½ νμ
μλ£
+[ ] λ°±μ
μμ± μλ£
+[ ] νμΌ μ μ‘ μλ£
+[ ] κΆν μ€μ μλ£
+[ ] nginx μ¬μμ μλ£
+```
+
+### λ°°ν¬ ν
+```
+[ ] HTTP 200 OK νμΈ
+[ ] MudBlazor 리μμ€ λ‘λλ¨
+[ ] νμ΄μ§ μ λͺ© νμΈ
+[ ] nginx λ‘κ·Έ μλ¬ μμ
+[ ] λΈλΌμ°μ μ μ ν
μ€νΈ
+```
+
+---
+
+## π λ¬Έμ ν΄κ²°
+
+### SSH μ°κ²° νμμμ
+```bash
+# μμΈ: IP μ£Όμ μ€λ₯ λλ λ°©νλ²½
+
+# ν΄κ²°:
+1. IP νμΈ: 178.104.200.7 λλ 192.168.123.100?
+2. SSH ν¬νΈ νμΈ: 22 (κΈ°λ³Έκ°)
+3. λ°©νλ²½ κ·μΉ νμΈ
+4. κ³΅κ° ν€ λ±λ‘ μ¬νμΈ
+```
+
+### κΆν μ€λ₯ (sudo λΆκ°)
+```bash
+# μμΈ: sudo κΆν μμ
+
+# νμΈ:
+sudo -l
+
+# ν΄κ²°: κ΄λ¦¬μμκ² webmaster κ·Έλ£Ή μΆκ° μμ²
+```
+
+### nginx μ¬μμ μ€ν¨
+```bash
+# λ‘κ·Έ νμΈ
+sudo systemctl status nginx
+sudo journalctl -u nginx -n 20
+
+# μ€μ ν
μ€νΈ
+sudo nginx -t
+
+# ν¬νΈ μΆ©λ νμΈ
+sudo netstat -tuln | grep :80
+```
+
+### νμΌ κΆν λ¬Έμ
+```bash
+# νμ¬ κΆν νμΈ
+ls -la /var/www/quant/publish/
+
+# κΆν μμ
+sudo chown -R www-data:www-data /var/www/quant/publish
+sudo chmod -R 755 /var/www/quant/publish
+```
+
+---
+
+## π κ΄λ ¨ νμΌ
+
+```
+λ°°ν¬ μ€ν¬λ¦½νΈ:
+βββ deploy.sh (μλ λ°°ν¬, bash)
+βββ deploy-manual.sh (λνν λ°°ν¬, μ΄ νμΌ)
+
+λ°°ν¬ κ°μ΄λ:
+βββ DEPLOYMENT_GUIDE.md (μ 체 κ°μ΄λ)
+βββ DEPLOYMENT_STEPS.md (λ¨κ³λ³ μ§μΉ¨)
+βββ DEPLOYMENT_CHECKLIST.md (μ΄μ 체ν¬λ¦¬μ€νΈ)
+βββ DEPLOYMENT_SSH_GUIDE.md (μ΄ νμΌ)
+
+CI/CD:
+βββ .gitea/workflows/deploy-prod.yml (μλν)
+βββ CI_CD_PIPELINE.md (CI/CD λ¬Έμ)
+```
+
+---
+
+## β‘ λΉ λ₯Έ λ°°ν¬ λͺ
λ Ήμ΄
+
+### ν λ²μ λ°°ν¬
+```bash
+chmod +x deploy-manual.sh && ./deploy-manual.sh 192.168.123.100
+```
+
+### λ΄λΆ IP μ¬μ©
+```bash
+# Giteaμμ λ°°ν¬ν λ (μλ CI/CD)
+DEPLOY_HOST=192.168.123.100
+```
+
+### μΈλΆ μ μ
+```bash
+# μ¬μ©μκ° μ μν λ
+http://178.104.200.7/quant/
+```
+
+---
+
+**λ°°ν¬ μ€λΉ μλ£!** π
+
+deploy-manual.sh μ€ν¬λ¦½νΈλ₯Ό μ€ννκ±°λ, μμ μλ λ¨κ³λ₯Ό λ°λΌ λ°°ν¬νμΈμ.
diff --git a/deploy-manual.sh b/deploy-manual.sh
new file mode 100644
index 0000000..092be28
--- /dev/null
+++ b/deploy-manual.sh
@@ -0,0 +1,226 @@
+#!/bin/bash
+# Quant Engine Manual Deployment Script
+# μ격 μλ²μ μ§μ SSH μ μνμ¬ νκ²½ νμ
ν λ°°ν¬
+
+set -e
+
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# μ€μ
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+DEPLOY_HOST="${1:-192.168.123.100}"
+DEPLOY_USER="kjh2064"
+SSH_KEY="${HOME}/.ssh/id_ed25519"
+LOCAL_PUBLISH_DIR="$(pwd)/src/dotnet/QuantEngine.Web/publish"
+REMOTE_DEPLOY_PATH="/var/www/quant"
+
+echo "π Quant Engine Manual Deployment"
+echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
+echo "Deploy Host: $DEPLOY_HOST"
+echo "Deploy User: $DEPLOY_USER"
+echo "Local Path: $LOCAL_PUBLISH_DIR"
+echo "Remote Path: $REMOTE_DEPLOY_PATH"
+echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
+echo ""
+
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# Step 1: SSH μ°κ²° νμΈ
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+echo "π Step 1: SSH μ°κ²° λ° νκ²½ νμ
..."
+
+ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" << 'ENVCHECK'
+echo "β SSH μ°κ²° μ±κ³΅"
+echo ""
+echo "μμ€ν
μ 보:"
+uname -a
+echo ""
+
+echo "λμ€ν¬ μν:"
+df -h | grep -E "^/dev|Filesystem|/$"
+echo ""
+
+echo "μλΉμ€ μν:"
+sudo systemctl status nginx --no-pager 2>/dev/null | grep -E "Active:|Loaded:" || echo "β οΈ nginx μν νμΈ νμ"
+echo ""
+
+echo "μΉ μλ² λλ ν 리:"
+if [ -d /var/www/quant/publish ]; then
+ echo "β /var/www/quant/publish μ‘΄μ¬"
+ ls -lh /var/www/quant/publish | head -5
+ echo "..."
+else
+ echo "β /var/www/quant/publish μμ (첫 λ°°ν¬)"
+fi
+echo ""
+
+echo "μΉ μλ² κΆν:"
+ls -ld /var/www/quant 2>/dev/null || echo "β οΈ /var/www/quant μμ"
+echo ""
+
+echo "Nginx ν¬νΈ νμΈ:"
+sudo netstat -tuln 2>/dev/null | grep :80 || echo "β οΈ ν¬νΈ 80 νμΈ νμ"
+ENVCHECK
+
+echo ""
+
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# Step 2: λ°°ν¬ νμΌ μ€λΉ νμΈ
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+echo "π¦ Step 2: λ°°ν¬ νμΌ νμΈ..."
+
+if [ ! -d "$LOCAL_PUBLISH_DIR" ]; then
+ echo "β μ€λ₯: $LOCAL_PUBLISH_DIR μμ"
+ echo "λ¨Όμ 'dotnet publish -c Release'λ₯Ό μ€ννμΈμ"
+ exit 1
+fi
+
+PACKAGE_SIZE=$(du -sh "$LOCAL_PUBLISH_DIR" | cut -f1)
+FILE_COUNT=$(find "$LOCAL_PUBLISH_DIR" -type f | wc -l)
+
+echo "β λ°°ν¬ ν¨ν€μ§:"
+echo " ν¬κΈ°: $PACKAGE_SIZE"
+echo " νμΌ μ: $FILE_COUNT"
+echo ""
+
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# Step 3: μ¬μ νμΈ
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+echo "β
λ°°ν¬ μ νμΈ μ¬ν:"
+echo " [ ] Release λΉλ μλ£λ¨"
+echo " [ ] publish ν΄λ νμΈλ¨ ($PACKAGE_SIZE)"
+echo " [ ] SSH ν€ μ€μ λ¨ ($SSH_KEY)"
+echo ""
+
+read -p "λ°°ν¬λ₯Ό μ§ννμκ² μ΅λκΉ? (y/n) " -n 1 -r
+echo ""
+
+if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+ echo "β λ°°ν¬ μ·¨μλ¨"
+ exit 1
+fi
+
+echo ""
+
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# Step 4: λ°±μ
μμ±
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+echo "πΎ Step 3: λ°±μ
μμ±..."
+
+ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" << 'BACKUP'
+set -e
+
+BACKUP_DIR="/var/www/quant_backup"
+BACKUP_NAME="quant_backup_$(date +%Y%m%d_%H%M%S)"
+
+if [ -d /var/www/quant/publish ]; then
+ sudo mkdir -p "$BACKUP_DIR"
+ sudo cp -r /var/www/quant/publish "$BACKUP_DIR/$BACKUP_NAME"
+ echo "β λ°±μ
μμ±: $BACKUP_DIR/$BACKUP_NAME"
+
+ # μ΅κ·Ό 5κ°λ§ μ μ§
+ BACKUP_COUNT=$(ls -1 "$BACKUP_DIR" | wc -l)
+ if [ "$BACKUP_COUNT" -gt 5 ]; then
+ OLD_BACKUPS=$(ls -1t "$BACKUP_DIR" | tail -n +6)
+ for backup in $OLD_BACKUPS; do
+ sudo rm -rf "$BACKUP_DIR/$backup"
+ echo "π§Ή μ€λλ λ°±μ
μμ : $backup"
+ done
+ fi
+else
+ echo "β οΈ κΈ°μ‘΄ λ°°ν¬ μμ (첫 λ°°ν¬)"
+fi
+BACKUP
+
+echo ""
+
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# Step 5: νμΌ μ μ‘
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+echo "π€ Step 4: νμΌ μ μ‘ (rsync)..."
+
+rsync -avz --delete \
+ --rsh="ssh -i $SSH_KEY" \
+ "$LOCAL_PUBLISH_DIR/" \
+ "$DEPLOY_USER@$DEPLOY_HOST:$REMOTE_DEPLOY_PATH/publish/"
+
+echo "β νμΌ μ μ‘ μλ£"
+echo ""
+
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# Step 6: κΆν μ€μ λ° μλΉμ€ μ¬μμ
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+echo "π§ Step 5: κΆν μ€μ λ° μλΉμ€ μ¬μμ..."
+
+ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" << 'FINALIZE'
+set -e
+
+DEPLOY_PATH="/var/www/quant"
+
+echo " κΆν μ€μ μ€..."
+sudo chown -R www-data:www-data "$DEPLOY_PATH/publish" 2>/dev/null || true
+sudo chmod -R 755 "$DEPLOY_PATH/publish" 2>/dev/null || true
+echo " β κΆν μ€μ μλ£"
+
+echo " nginx μ¬μμ μ€..."
+sudo systemctl restart nginx 2>/dev/null || echo " β οΈ nginx μ¬μμ μ€ν¨ (sudo κΆν νμΈ)"
+sleep 2
+
+if sudo systemctl is-active --quiet nginx 2>/dev/null; then
+ echo " β nginx μ¬μμ μλ£"
+else
+ echo " β οΈ nginx μν νμΈ νμ"
+fi
+FINALIZE
+
+echo ""
+
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# Step 7: ν¬μ€ 체ν¬
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+echo "π§ͺ Step 6: ν¬μ€ 체ν¬..."
+
+for i in {1..5}; do
+ HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
+ http://$DEPLOY_HOST/quant/ 2>/dev/null || echo "000")
+
+ if [ "$HTTP_CODE" = "200" ]; then
+ echo "β Health check PASS (HTTP 200)"
+ break
+ fi
+
+ echo " μλ $i/5: HTTP $HTTP_CODE (λκΈ° μ€...)"
+ sleep 2
+done
+
+echo ""
+
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+# λ°°ν¬ μλ£
+# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
+echo "β
λ°°ν¬ μλ£!"
+echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
+echo ""
+echo "π λ°°ν¬ μ 보:"
+echo " URL: http://$DEPLOY_HOST/quant/"
+echo " κ²½λ‘: $REMOTE_DEPLOY_PATH/publish"
+echo " ν¬κΈ°: $PACKAGE_SIZE"
+echo ""
+echo "π λ‘κ·Έ νμΈ:"
+echo " ssh -i $SSH_KEY $DEPLOY_USER@$DEPLOY_HOST 'sudo tail -50 /var/log/nginx/error.log'"
+echo ""
+echo "π λ‘€λ°± (νμμ):"
+echo " ssh -i $SSH_KEY $DEPLOY_USER@$DEPLOY_HOST << 'EOF'"
+echo " LATEST=\$(ls -t /var/www/quant_backup | head -1)"
+echo " sudo cp -r /var/www/quant_backup/\$LATEST/* /var/www/quant/publish/"
+echo " sudo systemctl restart nginx"
+echo " EOF"
+echo ""