kcg-ai-monitoring/deploy
htlee 9251d7593c refactor: 프로젝트 뼈대 정리 — iran 잔재 제거 + 백엔드 계층 분리 + 카탈로그 등록
iran 백엔드 프록시 잔재 제거:
- IranBackendClient dead class 삭제, AppProperties/application.yml iran-backend 블록 제거
- Frontend UI 라벨/주석/system-flow manifest deprecated 마킹
- CLAUDE.md 시스템 구성 다이어그램 최신화

백엔드 계층 분리:
- AlertController/MasterDataController/AdminStatsController 에서 repository/JdbcTemplate 직접 주입 제거
- AlertService/MasterDataService/AdminStatsService 신규 계층 도입 + @Transactional(readOnly=true)
- Proxy controller 의 @PostConstruct RestClient 생성 → RestClientConfig @Bean 으로 통합

감사 로그 보강:
- EnforcementService createRecord/updateRecord/createPlan 에 @Auditable 추가
- VesselAnalysisGroupService.resolveParent 에 PARENT_RESOLVE 액션 기록

카탈로그 정합성:
- performanceStatus 를 catalogRegistry 에 등록 (쇼케이스 자동 노출)
- alertLevels 확장: isValidAlertLevel / isHighSeverity / getAlertLevelOrder
- LiveMapView/DarkVesselDetection 시각 매핑(opacity/radius/tier score) 상수로 추출
- GearIdentification/vesselAnomaly 직접 분기를 타입 가드/헬퍼로 치환
2026-04-16 16:18:18 +09:00
..
README.md refactor: 프로젝트 뼈대 정리 — iran 잔재 제거 + 백엔드 계층 분리 + 카탈로그 등록 2026-04-16 16:18:18 +09:00

배포 가이드

접속 정보

항목 URL / 경로
프론트엔드 https://kcg-ai-monitoring.gc-si.dev
백엔드 API https://kcg-ai-monitoring.gc-si.dev/api/*
prediction API https://kcg-ai-monitoring.gc-si.dev/api/prediction/*
데모 로그인 admin / admin1234! (또는 DemoQuickLogin)
DB psql -h 211.208.115.83 -U kcg-app -d kcgaidb (pw: Kcg2026ai)

서버 구성

서버 SSH IP 역할 포트
rocky-211 ssh rocky-211 211.208.115.83 프론트 + 백엔드 + nginx 443, 18080
redis-211 ssh redis-211 192.168.1.18 prediction + Redis + Ollama 18092, 6379, 11434

서비스 목록

rocky-211

서비스 systemd 포트 로그
백엔드 (Spring Boot) kcg-ai-backend.service 18080 journalctl -u kcg-ai-backend -f
nginx nginx.service 80/443 /var/log/nginx/

redis-211

서비스 systemd 포트 로그
kcg-ai-prediction kcg-ai-prediction.service 18092 journalctl -u kcg-ai-prediction -f
kcg-prediction (레거시) kcg-prediction.service 8001 journalctl -u kcg-prediction -f
kcg-prediction-lab kcg-prediction-lab.service 18091 journalctl -u kcg-prediction-lab -f

디렉토리 구조

rocky-211

/devdata/services/kcg-ai-monitoring/
├── dist/                           # 프론트엔드 빌드 산출물
│   ├── index.html
│   └── assets/
├── backend/
│   ├── kcg-ai-backend.jar          # Spring Boot 실행 JAR
│   └── application-prod.yml        # 운영 설정

redis-211

/home/apps/kcg-ai-prediction/       # 신규 (kcgaidb 연결)
├── .env                            # 환경변수
├── venv/                           # Python 가상환경
├── main.py                         # FastAPI 진입점
├── algorithms/                     # 14개 분석 알고리즘
├── pipeline/                       # 7단계 분류 파이프라인
├── output/                         # 이벤트/통계/KPI 출력 모듈
├── cache/                          # vessel_store
├── db/                             # DB 어댑터
└── ...

nginx 프록시 설정

파일: /etc/nginx/conf.d/kcg-ai-monitoring.conf (rocky-211)

kcg-ai-monitoring.gc-si.dev (443)
  ├── /              → /devdata/services/kcg-ai-monitoring/dist/ (SPA)
  ├── /api/          → http://127.0.0.1:18080 (Spring Boot)
  ├── /api/prediction/ → http://192.168.1.18:18092 (prediction)
  └── /api/prediction-chat → http://192.168.1.18:18092 (SSE)

배포 방법

프론트엔드 배포

# 로컬에서 빌드
cd frontend && npx vite build

# 서버에 전송
rsync -avz dist/ rocky-211:/devdata/services/kcg-ai-monitoring/dist/

백엔드 배포

# 로컬에서 JAR 빌드
cd backend && ./mvnw clean package -DskipTests

# 서버에 전송
scp target/kcg-ai-backend-0.0.1-SNAPSHOT.jar rocky-211:/devdata/services/kcg-ai-monitoring/backend/kcg-ai-backend.jar

# 서버에서 재시작
ssh rocky-211 "systemctl restart kcg-ai-backend"

# 로그 확인
ssh rocky-211 "journalctl -u kcg-ai-backend -f"

prediction 배포

# 파일 동기화 (venv 제외)
rsync -avz --exclude='.venv' --exclude='__pycache__' --exclude='.env' --exclude='*.pyc' \
  prediction/ redis-211:/home/apps/kcg-ai-prediction/

# 서버에서 재시작
ssh redis-211 "systemctl restart kcg-ai-prediction"

# 로그 확인
ssh redis-211 "journalctl -u kcg-ai-prediction -f"

의존성 변경 시 (prediction)

ssh redis-211 "cd /home/apps/kcg-ai-prediction && source venv/bin/activate && pip install -r requirements.txt"
ssh redis-211 "systemctl restart kcg-ai-prediction"

로컬 개발 설정

기본 (서버 프록시)

cd frontend && npm run dev
# → /api 요청이 https://kcg-ai-monitoring.gc-si.dev로 프록시됨

로컬 백엔드 사용 시

VITE_API_PROXY=http://localhost:8080 npm run dev
# 또는 backend와 함께:
make dev  # frontend + backend 동시 실행

서비스 관리

# 상태 확인
ssh rocky-211 "systemctl status kcg-ai-backend"
ssh redis-211 "systemctl status kcg-ai-prediction"

# 재시작
ssh rocky-211 "systemctl restart kcg-ai-backend"
ssh redis-211 "systemctl restart kcg-ai-prediction"

# 로그 (실시간)
ssh rocky-211 "journalctl -u kcg-ai-backend -f"
ssh redis-211 "journalctl -u kcg-ai-prediction -f"

# health check
curl -s https://kcg-ai-monitoring.gc-si.dev/actuator/health
curl -s http://192.168.1.18:18092/health  # redis-211 내부

DB 접속

PGPASSWORD='Kcg2026ai' psql -h 211.208.115.83 -U kcg-app -d kcgaidb
# 스키마: kcg, 테이블 37개

포트 정리

포트 서비스 서버
443 nginx (HTTPS) rocky-211
18080 kcg-ai-backend (Spring Boot) rocky-211
18092 kcg-ai-prediction (FastAPI) redis-211
8001 kcg-prediction (레거시) redis-211
18091 kcg-prediction-lab redis-211
5432 PostgreSQL (kcgaidb, snpdb) 211.208.115.83
6379 Redis redis-211
11434 Ollama redis-211

CI/CD

프론트엔드 — Gitea Actions 자동배포

  • 워크플로우: .gitea/workflows/deploy.yml
  • 트리거: main 브랜치 push, frontend/** 변경 시
  • 빌드: Node.js 24, frontend/ 디렉토리에서 npm ci && npm run build
  • 배포: frontend/dist//deploy/kcg-ai-monitoring/ (Gitea runner mount)
  • Gitea runner가 rocky-211에서 실행 중이므로 dist가 자동 배포됨

백엔드 — SSH 수동배포

# 1. 로컬 빌드
cd backend && ./mvnw clean package -DskipTests

# 2. 서버 전송
scp target/kcg-ai-backend-0.0.1-SNAPSHOT.jar \
  rocky-211:/devdata/services/kcg-ai-monitoring/backend/kcg-ai-backend.jar

# 3. 재시작
ssh rocky-211 "systemctl restart kcg-ai-backend"

prediction — SSH 수동배포

# 1. 파일 동기화
rsync -avz --exclude='.venv' --exclude='__pycache__' --exclude='.env' --exclude='*.pyc' \
  prediction/ redis-211:/home/apps/kcg-ai-prediction/

# 2. 의존성 변경 시
ssh redis-211 "cd /home/apps/kcg-ai-prediction && source venv/bin/activate && pip install -r requirements.txt"

# 3. 재시작
ssh redis-211 "systemctl restart kcg-ai-prediction"

서버 실행 경로 정리

rocky-211 (211.208.115.83)

경로 용도
/devdata/services/kcg-ai-monitoring/dist/ 프론트 빌드 산출물 (nginx root)
/devdata/services/kcg-ai-monitoring/backend/kcg-ai-backend.jar 백엔드 실행 JAR
/devdata/services/kcg-ai-monitoring/backend/application-prod.yml 백엔드 운영 설정
/etc/nginx/conf.d/kcg-ai-monitoring.conf nginx 프록시 설정
/etc/systemd/system/kcg-ai-backend.service 백엔드 systemd 서비스
/usr/lib/jvm/java-21-openjdk/bin/java Java 21 실행 경로

redis-211 (192.168.1.18)

경로 용도
/home/apps/kcg-ai-prediction/ prediction 앱 디렉토리
/home/apps/kcg-ai-prediction/.env prediction 환경변수
/home/apps/kcg-ai-prediction/venv/ Python 3.9 가상환경
/etc/systemd/system/kcg-ai-prediction.service prediction systemd 서비스
/home/apps/kcg-prediction/ 레거시 prediction (포트 8001)
/home/apps/kcg-prediction-lab/ 기존 lab prediction (포트 18091)