크라우니 게이트웨이 관제 시스템 (CGWCS) v1.0
개요
기존 JS 모니터(monitor-server.js)를 순수 한선씨 4상균형3진법 관제 시스템으로 완전 대체.
103개 전체 서비스를 gateway.yaml에서 이전하여 통합 관제.
무엇을 했는지
핵심 구현
게이트웨이관제.한선 — 단일 파일 통합 관제 (12,560 cubes)
모듈1: 서비스 레지스트리 — 103개 서비스 정적 등록
모듈2: 헬스 엔진 — 4상균형3진법 라운드로빈 (nc -z -w1 기반)
모듈3: 인증서 관리 — SSL 체크 (curl -sk) + 갱신 트리거
모듈4: 규칙 엔진 — R1(헬스) R2(인증서) R3(복구) R4(모드전환)
모듈5: 대시보드 — 103개 서비스 HTML 테이블 (6.9KB, 5초 자동새로고침)API 엔드포인트
| 경로 | 설명 |
|---|
/ /dashboard | HTML 대시보드 (103개 서비스) |
/health /ping | 헬스체크 JSON |
/api/status | 전체 상태 (ti/om/ta/mode/cert) |
/api/services | 103개 서비스 목록 JSON |
/api/cert | SSL 인증서 상태 |
/api/renew | 인증서 갱신 트리거 (POST) |
/api/rules | 규칙 엔진 상태 |
해결한 기술적 문제
- VM 소켓연결 크래시 —
소켓연결이 비수신 포트에서 VM을 크래시시킴. 체계("nc -z -w1") 로 대체하여 1초 타임아웃 확보
- 집계 인코딩 오버플로우 —
ti*10000+om*100+ta에서 om이 100을 넘으면 ti 필드 침범. ti*1000000+om*1000+ta로 수정
- 대시보드 틱 한도 — 103×11=1133 소켓전송이 VM 틱 한도 초과. 인라인+축소(7전송/행)로 721+20=741으로 감축
- JS 모니터 좀비 — 다른 세션이 monitor-server.js를 계속 재생성. 플레이스홀더 파일로 방지
- CSS 큐브 절약 — CSS를 3줄로 합쳐 전송 횟수 감소
4상균형3진법 (TOAU) 규칙
| 상태 | 값 | 의미 | 대시보드 색상 |
|---|
| Ti | +1 | 건강 | 초록 (#0c0) |
| Om | 0 | 미확인/관찰 | 회색 (#888) |
| Ta | -1 | 장애 | 빨강 (#e33) |
규칙 엔진 (4규칙)
- R1 HealthCheck: 매 요청 시 1개 서비스 라운드로빈 체크
- R2 CertMonitor: 50회 체크마다 SSL 인증서 검증
- R3 AutoRecovery: 연속 Ta 3회 시 복구 카운터 증가
- R4 ModeSwitch: Ti 비율 기반 — ≥80% NORMAL, ≥50% WATCH, <50% ALERT
실행
bash# 시작 스크립트
bash /Users/ef/crowny-gateway/scripts/start-control.sh
# 수동 실행
kill -9 $(lsof -ti :9150) 2>/dev/null
/Users/ef/CrownyOS/crownyc/hanseonc_high /Users/ef/crowny-gateway/게이트웨이관제.한선 > /tmp/gw-control.toau 2>/dev/null
/Users/ef/CrownyOS/crownyc/crownyc run /tmp/gw-control.toau &
관련 파일
- 관제 시스템:
/Users/ef/crowny-gateway/게이트웨이관제.한선
- 시작 스크립트:
/Users/ef/crowny-gateway/scripts/start-control.sh
- 이전 모니터:
/Users/ef/crowny-gateway/게이트웨이모니터.한선 (v6, 40개 서비스)
- JS 플레이스홀더:
/Users/ef/crowny-gateway/monitor-server.js (비활성화)
3중 장애 해결 루틴 (2026-05-14 추가)
구조
| 단계 | 이름 | 동작 |
|---|
| 1차 | 자동 재시작 | 서비스 디렉토리에서 node server.js 또는 한선씨 컴파일+실행 |
| 2차 | 클린 재시작 | 기존 프로세스 강제종료 + PID 정리 + 재시작 |
| 3차 | 플레이스홀더 | 최소 HTTP 서버 투입 (503 응답) + 수동 확인 알림 |
CGWCS 연동
- R3 규칙이 연속 Ta 3회 감지 시
service-recovery.sh 자동 호출
- SF(연속실패 카운터) 추가 — 체크() 함수에서 상태별 카운터 갱신
워치독
scripts/watchdog.sh once — 1회 전체 순회 (60개 주요 서비스)
scripts/watchdog.sh loop — 60초 무한 루프
- LaunchAgent 등록:
org.crowny.recovery (5분 간격)
버그 수정
- monitoring 포트 8750→9850 수정 (gateway.yaml과 일치)
- 규칙평가() 집계 디코딩 버그 수정 (10000→1000000)
관련 파일
scripts/service-recovery.sh — 3중 복구 스크립트
scripts/service-registry.sh — 서비스 디렉토리+명령 매핑
scripts/watchdog.sh — 순회 감시 + 복구 트리거
잔여 이슈
- crownyc VM
소켓연결 버그 — 비수신 포트에서 크래시. nc -z 우회 중, VM 근본 수정 필요
- 체크 속도 —
체계("nc -z") fork/exec 오버헤드. VM 소켓 타임아웃 지원 시 직접 연결로 전환
- probe.sh 연동 — monitoring-probe 결과와 상태 동기화 (향후)
- talk 한선씨 컴파일 불가 — RPN 스타일 코드, hanseonc_high 호환 안 됨