본문으로 건너뛰기

Demo Stage 시연 가이드

고객 앞에서 Caffeine 플랫폼의 전체 데이터 파이프라인을 "제로에서 라이브"로 시연하는 가이드입니다. Admin 대시보드의 Demo Stage 페이지를 사용하여 장비 연결 → 데이터 수집 → 알람 → 시나리오 전환까지 단계별로 진행합니다.

📋 개요​

Demo Stage는 고객 시연 전용 대시보드입니다. 실시간 SVG 아키텍처 맵으로 시스템 구성을 시각화하고, 8단계 가이드 패널로 시연자를 안내합니다.

왜 Demo Stage인가?​

기존 방식Demo Stage
노트북 1대에서 미리 준비된 데모PC 3대로 고객 앞에서 실시간 구성
"미리 맞춰온 것 아닌가?" 의심제로에서 라이브 데이터까지 투명하게
정적 스크린샷SVG 노드가 실시간으로 활성화

아키텍처​

구성 요소역할포트
Caffeine Engine데이터 수집·처리 코어HTTP :5001, gRPC :5050
DemoHubICaffeineEventBus → SignalR 실시간 브릿지/hubs/demo
Admin (Demo Stage)시연용 대시보드 UIDocker: :8080, 소스 실행: :5233
SimulatorMQTT 센서 데이터 생성 (Docker)MQTT :1883

📋 사전 요구사항​

항목확인 방법비고
Dockerdocker --version모든 PC 필수
Caffeine CLIcafe --versiondotnet tool install -g NEXCODE.Caffeine.Cli
네트워크ping 상호 확인Host↔Edge 같은 서브넷 (mDNS 검색용)
.NET 10 SDKdotnet --version조합 2(소스 기반)만 필요

🚀 데모 구성 조합​

데모 환경은 3가지 조합 중 상황에 맞게 선택합니다. 비교표에서 적합한 조합을 클릭하세요.

조합 1: Docker 배포조합 2: 단일 PC조합 3: Edge Runtime
용도고객 시연 (권장)빠른 확인/온라인 미팅운영 신뢰성 시연
PC 수2~3대1대2대
Host PCcafe setup → Servercafe setup → Servercafe setup → Server
Edge PCcafe setup → Edge Docker— (내장)cafe edge install
시뮬레이터cafe demo simulator— (내장)cafe demo simulator
mDNS 검색❌ (Docker bridge 격리)—✅ mDNS + 자동 재연결
자동 복구Docker restartDocker restartsystemd + heartbeat
인터넷 필요❌ (오프라인 팩)❌ (오프라인 팩)❌ (오프라인 팩)
시연 임팩트⭐⭐⭐⭐⭐⭐⭐⭐⭐
권장 조합

조합 1: Docker 배포 — 고객 시연 (권장)​

오프라인 팩으로 준비하면 인터넷 없이도 시연 가능. **"제로에서 라이브"**를 보여주는 최적 구성.

실행 순서​

1단계: Host PC — 중앙 서버 기동

# 오프라인 팩 설치 (최초 1회)
cafe setup --source caffeine-pack-3.2.0.tar.gz
# 프로파일 선택: "Server (중앙 서버 배포)"

Engine 준비 확인:

docker logs caffeine-engine
# 🌐 [Kestrel] Configuring Port 5001 (HTTP/1, IPv4)
# 🌐 [Kestrel] Configuring Port 5050 (HTTP/2 ONLY - gRPC/h2c)

Admin 대시보드 접속: http://<Host-IP>:8080 (Docker 배포 시)

2단계: Edge PC — 엣지 게이트웨이 기동

# 오프라인 팩 설치 (최초 1회)
cafe setup --source caffeine-pack-3.2.0.tar.gz
# 프로파일 선택: "Edge (엣지 게이트웨이)"

.env 설정 (설치 전 또는 후에 편집):

# Edge PC의 .env
Engine__Url=http://<Host-PC-IP>:5050 # 중앙 Engine gRPC 주소 (포트 5050)
Driver__Id=Edge-01 # 엣지 디바이스 식별자
Docker bridge 환경에서는 mDNS 불가

조합 1은 Docker bridge 네트워크를 사용하므로 mDNS 자동 검색이 불가능합니다. 반드시 Engine__Url을 수동으로 설정해야 합니다. mDNS 자동 검색이 필요하면 조합 3 또는 조합 4를 사용하세요.

Case 2(공장 엔지니어) 시나리오에서는 Edge PC 2대를 EDGE_DEVICE_ID=Edge-02로 추가 기동합니다.

3단계: Host PC Admin에서 Bridge 검색

Admin → 드라이버 및 통신 → Bridge Discovery → 스캔 클릭

Bridge.Host가 mDNS/DNS-SD로 자신을 광고하므로, 같은 서브넷의 Edge가 자동 발견됩니다. "스캔" 버튼 한 번이면 시연 하이라이트!

정리​

# Host PC
cafe setup down

# Edge PC
cafe setup down

# 완전 초기화 (필요 시)
cafe setup clean --all

조합 2: 단일 PC — 빠른 데모/내부 확인​

노트북 1대에서 전체 환경을 Docker로 기동. 빠른 확인이나 온라인 미팅용.

# 한 줄로 전체 기동
cafe setup
# 프로파일 선택: "Server (중앙 서버 배포)"

Server 프로파일은 Engine + Admin + Bridge + Simulator + 인프라 전체를 포함하므로 추가 작업이 필요 없습니다.

Admin 접속: http://localhost:8080


조합 3: Edge Runtime — 현장 배포 시뮬레이션​

실제 현장 배포와 동일한 구성으로 시연합니다. Bridge.Host를 systemd 서비스로 설치하고, mDNS 자동 검색 + 자동 복구를 시연하는 고급 데모입니다.

실행 순서​

1단계: Host PC — 중앙 서버 기동 (조합 1과 동일)

cafe setup --source caffeine-pack-3.2.0.tar.gz
# 프로파일: "Server (중앙 서버 배포)"

2단계: Edge PC — cafe edge install로 서비스 설치

# 팩 전송 후 설치 (한 줄로 완료)
cafe edge install --source caffeine-pack-3.2.0.tar.gz

대화형 설정에서:

  • Driver ID: Edge-01 (기본값)
  • Engine URL: 비워두면 → mDNS 자동 검색 (Engine이 같은 서브넷 + 네이티브 실행 시에만 동작)
  • Driver Type: Simulation (기본값)
Host PC의 Engine이 Docker로 실행되는 경우

조합 3에서 Host PC의 Engine이 cafe setup(Docker)으로 실행되면, Engine의 mDNS 광고가 불가능합니다. 이 경우 Bridge의 Engine URL을 수동으로 설정해야 합니다: Engine__Url=http://<Host-PC-IP>:5050 Engine도 네이티브로 실행하려면 조합 4를 사용하세요.

설치 완료 후 자동으로:

  • MQTT + Redis Docker 컨테이너 시작 (restart: always)
  • Bridge.Host systemd 서비스 시작 (Restart=always)
  • mDNS 광고 시작 (_caffeine-bridge._tcp, avahi-publish 사용)

3단계: 시뮬레이터 실행

cafe demo simulator

4단계: Host PC Admin에서 Bridge 검색

Admin → 드라이버 및 통신 → Bridge Discovery → 스캔 클릭

복원력 시연 시나리오​

이 구성의 핵심 차별점은 자동 복구 시연입니다. 고객 앞에서 장애를 일으키고, 자동으로 복구되는 것을 보여줄 수 있습니다.

시나리오 A: Bridge 크래시 복구​

# Edge PC에서 Bridge.Host 프로세스를 강제 종료
sudo systemctl kill -s SIGKILL caffeine-bridge

# 5초 후 자동 재시작 확인
cafe edge status
# → ● 실행 중 (PID: 새로운 PID)

고객에게: "프로세스가 죽어도 5초 내에 자동으로 되살아납니다."

시나리오 B: Engine 재시작 자동 재연결​

# Host PC에서 Engine 컨테이너 재시작
docker restart caffeine-engine

# Edge PC의 Bridge.Host가 heartbeat 실패 → mDNS 재스캔 → 자동 재연결
# Edge PC 로그 확인
cafe edge logs -f
# → [EngineDiscovery] Engine heartbeat 실패 (1/3)
# → [EngineDiscovery] Engine heartbeat 실패 (2/3)
# → [EngineDiscovery] Engine heartbeat 실패 (3/3)
# → [EngineDiscovery] Engine 연결 끊김 감지 — mDNS 재스캔 시작
# → [EngineDiscovery] ✅ Engine 재발견: Engine-01 @ http://192.168.1.100:5000

고객에게: "Engine이 재시작되어도 엣지가 자동으로 다시 찾아서 연결합니다. 관리자 개입이 필요 없습니다."

시나리오 C: 서비스 상태 모니터링​

# Edge 상태 확인
cafe edge status

# Health endpoint 직접 조회
curl http://edge-pc:5100/health

고객에게: "원격에서 엣지 상태를 실시간으로 확인할 수 있습니다."

정리​

# Edge PC
cafe edge uninstall

# Host PC
cafe setup down

조합 3 vs 조합 1 비교​

조합 1: Docker 배포조합 3: Edge Runtime
Bridge 관리Docker restart: alwayssystemd Restart=always
mDNS❌ (Docker 격리)✅ (네이티브 네트워크)
Engine 연결Engine__Url 수동 설정mDNS 자동 검색 + 자동 재연결
크래시 복구Docker 자동 재시작systemd 5초 복구
헬스 모니터링—/health (포트 5100) + heartbeat
시연 포인트Zero-Config Discovery자동 복구 + 운영 신뢰성
적합 대상첫 데모, 빠른 셋업현장 운영 데모, 신뢰성 시연
언제 조합 3를 사용하나?
  • 고객이 "현장에서 장비가 죽으면 어떻게 되나?"라고 질문할 때
  • 운영 안정성이 핵심 관심사인 공장장/설비 담당자 대상 시연
  • PoC 이후 실제 배포 계획을 논의하는 미팅

조합 4: 전체 네이티브 — 양쪽 모두 systemd​

Engine과 Bridge 모두 systemd 서비스로 배포하여 완전한 mDNS Zero-Config를 실현합니다.

# Host PC (Linux)
cafe engine install --source caffeine-pack-3.2.0.tar.gz

# Edge PC (Linux)
cafe edge install --source caffeine-pack-3.2.0.tar.gz
# Engine URL은 비워두면 → mDNS 자동 검색
조합 3조합 4
Host PCcafe setup (Docker)cafe engine install (systemd)
Edge PCcafe edge install (systemd)cafe edge install (systemd)
Engine mDNS 광고❌ (Docker bridge 격리)✅ (네이티브 네트워크)
Bridge mDNS 광고✅✅
Bridge → Engine 검색Engine URL 수동 설정mDNS 자동 검색
Admin Bridge Discovery✅ (dns-sd fallback)✅

📡 mDNS 네트워크 검색 상세​

mDNS란?​

mDNS(Multicast DNS)는 같은 서브넷(LAN) 내에서 서비스를 자동으로 발견하는 Zero-Configuration 프로토콜입니다. DNS 서버 없이 _caffeine-bridge._tcp, _caffeine-engine._tcp 서비스 타입으로 상호 검색합니다.

mDNS 동작 조건​

조건필수 여부설명
같은 서브넷 (LAN)필수mDNS는 멀티캐스트 UDP (224.0.0.251:5353). 라우터를 넘지 못함
네이티브 네트워크필수Docker bridge/overlay 네트워크에서는 불가
avahi-daemon (Linux)필수mDNS 광고에 avahi-publish-service 사용
avahi-utils (Linux)권장디버깅용 avahi-browse. cafe edge install 시 자동 설치
방화벽 개방필수UDP 5353 포트 (mDNS 멀티캐스트)

배포 방식별 mDNS 지원​

배포 방식Engine mDNS 광고Bridge mDNS 광고Bridge → Engine 자동 검색Admin Bridge Discovery
Engine: Docker bridge❌—❌❌ (Zeroconf 제한)
Engine: Docker --network host✅—✅✅
Engine: cafe engine install (systemd)✅—✅✅
Engine: dotnet run (소스 실행)✅—✅✅
—————
Bridge: Docker bridge—❌—❌
Bridge: cafe edge install (systemd)—✅ (avahi-publish)—✅
Bridge: dotnet run (소스 실행, macOS)—✅ (Bonjour)—✅
Docker bridge 네트워크와 mDNS

Docker의 기본 bridge 네트워크는 컨테이너를 격리된 가상 네트워크에 배치합니다. mDNS 멀티캐스트 패킷이 호스트 네트워크로 전달되지 않으므로, Docker bridge 안에서 실행되는 서비스는 mDNS 광고/검색이 불가능합니다.

해결 방법:

  1. systemd 네이티브 배포 (cafe engine install, cafe edge install) — 권장
  2. --network host — Docker를 쓰되 호스트 네트워크 공유 (포트 충돌 주의)
  3. macvlan 네트워크 — 컨테이너에 별도 MAC/IP 할당 (고급 설정)

mDNS 없이 수동 연결 설정​

mDNS를 사용할 수 없는 환경(서로 다른 서브넷, VPN, WAN, Docker bridge)에서는 IP 주소를 직접 지정합니다.

Bridge → Engine 연결 (수동)​

# 방법 1: cafe edge install 시 대화형 설정
cafe edge install --source caffeine-pack-3.2.0.tar.gz
# "Engine URL" 입력: http://<Engine-IP>:5050

# 방법 2: .env 파일 직접 편집
sudo vi /opt/caffeine/bridge-host/.env
# Engine__Url=http://192.168.1.100:5050

# 방법 3: driver_settings.json 편집
sudo vi /opt/caffeine/bridge-host/driver_settings.json
# "Engine": { "Url": "http://192.168.1.100:5050" }

# 변경 후 서비스 재시작
sudo systemctl restart caffeine-bridge

Engine URL 설정 우선순위​

우선순위소스예시
1 (최우선)mDNS 자동 검색_caffeine-engine._tcp 서비스 발견
2환경변수 Engine__Url.env 파일 또는 systemd EnvironmentFile
3driver_settings.json"Engine": { "Url": "http://..." }
4 (기본값)코드 하드코딩http://localhost:5001

mDNS가 성공하면 환경변수/설정 파일의 URL보다 우선합니다. mDNS 검색이 실패하면 자동으로 설정값으로 fallback합니다.

포트 번호 안내​

포트프로토콜용도서비스
5001HTTP/1.1REST API, ProvisioningEngine
5050HTTP/2 (h2c)gRPC 데이터 스트림Engine
5100HTTP/1.1Bridge Config UI, HealthBridge.Host
1883TCPMQTT 브로커Mosquitto
6379TCPRedis 캐시Redis
8086HTTPInfluxDB 시계열 DBInfluxDB
Bridge → Engine 연결 시 포트 주의
  • gRPC Transport (데이터 전송): 5050 포트 사용
  • Provisioning (등록/heartbeat): 5001 포트 사용
  • .env의 Engine__Url은 gRPC 포트(5050)를 지정합니다
  • Provisioning URL은 Provisioning__EngineUrl로 별도 지정 (기본: 5001)

mDNS 디버깅​

# macOS에서 mDNS 서비스 검색
dns-sd -B _caffeine-bridge._tcp .
dns-sd -B _caffeine-engine._tcp .

# Linux에서 mDNS 서비스 검색
avahi-browse -t -r _caffeine-bridge._tcp
avahi-browse -t -r _caffeine-engine._tcp

# avahi-daemon 상태 확인 (Linux)
systemctl status avahi-daemon

# 방화벽에서 mDNS 허용 (Linux)
sudo ufw allow 5353/udp

# Bridge.Host mDNS 광고 상태 확인
cafe edge logs | grep -i "mdns\|avahi\|advertis"

# Engine mDNS 광고 상태 확인
cafe engine logs | grep -i "mdns\|avahi\|advertis"

🔧 cafe demo simulator 옵션​

옵션기본값설명
--hostmqtt-brokerMQTT 호스트 (Docker 네트워크에서 서비스명 자동 사용)
--device-idEdge-01장치 ID prefix
--device-count5시뮬레이션 장치 수
--scenarioNormal초기 시나리오 (Normal, Overheat, PressureDrop, RandomSpike)
--imagenexcode/caffeine-simulator:latest시뮬레이터 Docker 이미지
--detachfalse백그라운드 실행

🏗️ 시나리오 선택​

Demo Stage에 처음 진입하면 시나리오 선택 오버레이가 표시됩니다. 고객 유형에 맞는 시나리오를 선택하세요.

Case 1: 설비 업체 (NexMind)​

대상: 설비를 만들어 납품하는 업체 (OEM)

  • AAS (IEC 63278) 디지털 트윈 자동 생성
  • 원격 장비 모니터링 + 예지정비
  • Edge PC 1대 연결로 진행
핵심 메시지설명
"장비에 Caffeine 탑재 → AAS 표준 자동 준수"개발 비용 절감
"납품 후 원격 모니터링"유지보수 수익 모델

Case 2: 공장 엔지니어​

대상: 다양한 벤더 장비를 운영하는 공장

  • 비표준 장비 데이터 통합 수집
  • 실시간 알람 + AI 이상 감지
  • Edge PC 2대 연결로 이기종 장비 통합 시연
핵심 메시지설명
"장비 제조사와 무관하게 데이터 통합"벤더 락인 해소
"실시간 알람으로 즉각 대응"다운타임 최소화

🎯 8단계 시연 흐름​

시나리오 선택 후 Demo Stage가 8단계 가이드를 표시합니다. 각 단계는 자동 감지 + 수동 진행 방식입니다.

Step제목자동 감지 조건타임아웃
1Host 환경 확인——
2Edge 시뮬레이터 연결Bridge 감지 (Case1: ≥1, Case2: ≥2)15초
3Admin 대시보드 확인——
4장비 등록 확인EquipmentCount ≥ 115초
5데이터 수집 확인IngestionCount > 015초
6알람 확인AlarmCount ≥ 115초
7시나리오 전환——
8마무리——
자동 감지와 수동 진행
  • 조건이 충족되면 "다음" 버튼이 초록색으로 하이라이트됩니다
  • 15초 내 자동 감지가 안 되면 수동으로 "다음" 버튼을 눌러 진행할 수 있습니다
  • "다음" 버튼은 항상 표시되어 데모가 멈추지 않습니다

Step 7 상세: 시나리오 전환​

이 단계에서 시뮬레이터의 데이터 패턴을 런타임으로 변경합니다. 시뮬레이터를 재시작할 필요 없이 버튼 클릭만으로 전환됩니다.

Admin UI 버튼 → Engine API (POST /api/v1/demo/scenario)
→ MQTT "caffeine/demo/command" 토픽 발행
→ Simulator가 구독하여 즉시 반영

🌐 AAS 디지털 트윈 시연​

데모 시연에서 AAS(Asset Administration Shell) 디지털 트윈을 생성하고 확인하는 흐름입니다.

Bridge AAS 설정 (현장 엔지니어 역할)​

Bridge Config UI(Edge:5100)에 접속하여 AAS 탭에서 설비 정보를 입력합니다.

  1. AAS 탭 선택
  2. Nameplate 입력 (제조사명, 제품명, 시리얼번호, 제조년도, 원산지)
  3. 서브모델 선택 (Nameplate, OperationalData, TechnicalData 기본 체크)
  4. 시맨틱 매핑 확인 (Temperature, Pressure 등 자동 매핑됨)
  5. 저장 클릭
Bridge Config UI → AAS 탭:
Nameplate: 제조사 정보 입력 폼
서브모델: 체크박스로 선택
시맨틱 매핑: 태그별 ECLASS IRDI 자동/수동 설정

Admin에서 디지털 트윈 생성 (운영자 역할)​

Admin 대시보드(Admin:5003)에서 설비 구성 위저드를 실행합니다.

  1. 설비 구성 메뉴 → 위저드 시작
  2. Step 1: Bridge 선택 (자동 검색된 Bridge 클릭)
  3. Step 2: 태그 확인 (Bridge에서 자동 조회된 3개 태그 표시)
  4. Step 3: AAS 매핑 확인 (Bridge에서 Pull한 Nameplate/서브모델/시맨틱 매핑이 자동 채움)
  5. Step 4: "디지털 트윈 생성" 클릭
Plug & Twin

Bridge에서 설정한 AAS 정보가 Admin 위저드에 자동으로 반영됩니다. 현장 엔지니어가 입력 → 사무실 운영자가 확인 → 트윈 완성. 이중 작업 없이 한 번의 흐름으로 디지털 트윈이 생성됩니다.

AAS 대시보드 확인​

Admin의 AAS 관리 페이지(/aas)에서 생성된 디지털 트윈을 확인합니다.

  • 카드 클릭 → 상세 모달에서 서브모델 내용 확인:
    • OperationalData: AliveBit, Temperature, Pressure 태그 엘리먼트
    • Nameplate: ManufacturerName, SerialNumber, YearOfConstruction
    • TechnicalData: 태그 기반 사양 데이터

Bridge AAS Config REST API​

Bridge Host는 AAS 설정을 위한 REST API를 제공합니다.

메서드경로설명권한
GET/api/bridge/config/aasAAS 설정 조회viewer
GET/api/bridge/config/aas/exportAAS 설정 조회 (인증 불필요)공개
PUT/api/bridge/config/aasAAS 설정 저장admin

export 엔드포인트: Admin 위저드가 Bridge에서 AAS 설정을 Pull할 때 사용합니다. 인증 없이 접근 가능하므로, 자동화 스크립트에서도 활용할 수 있습니다.

응답 예시 (GET):

{
"nameplate": {
"manufacturerName": "Hyundai Robotics",
"productDesignation": "HA006B",
"serialNumber": "HR-2024-00142",
"yearOfConstruction": "2024",
"countryOfOrigin": "KR"
},
"selectedSubmodels": ["Nameplate", "OperationalData", "TechnicalData"],
"semanticMappings": {
"Temperature": "0173-1#02-AAI835#001",
"Pressure": "0173-1#02-AAE912#007"
},
"lastModified": "2026-03-29T06:47:38Z"
}

AAS 서브모델 REST API​

Admin/Engine의 AAS REST API에서 서브모델 내용을 조회합니다.

메서드경로설명
GET/api/aas/shells/{shellId}/submodels모든 서브모델 조회
GET/api/aas/shells/{shellId}/submodels/{type}특정 타입 서브모델 조회

서브모델은 ISubmodelProvider가 EquipmentManifest 기반으로 동적 생성합니다.

🎭 텔레메트리 시나리오​

시뮬레이터는 4가지 데이터 패턴을 지원합니다. Demo Stage의 Step 7에서 런타임 전환할 수 있습니다.

Normal (정상)​

안정적인 정상 범위 데이터를 생성합니다.

센서범위특성
온도20 ~ 30 °C균일 분포
압력1000 ~ 1020 hPa균일 분포

시연 포인트: "정상 상태에서 안정적인 데이터 수집과 대시보드 표시를 확인하세요."

Overheat (과열)​

온도가 위험 수준으로 지속적으로 높은 데이터를 생성합니다.

센서범위특성
온도80 ~ 120 °C위험 수준
압력1000 ~ 1020 hPa정상 유지

시연 포인트: "온도가 임계값을 초과하면 자동으로 Critical 알람이 발생합니다. 알람 페이지에서 실시간 확인하세요."

PressureDrop (압력 급락)​

압력이 정상 범위 아래로 떨어지는 데이터를 생성합니다.

센서범위특성
온도20 ~ 30 °C정상 유지
압력600 ~ 800 hPa저압 이상

시연 포인트: "압력 이상은 AI 이상 감지 모듈이 패턴을 학습하여 예측 알람을 발생시킵니다."

RandomSpike (간헐적 스파이크)​

15% 확률로 비정상 데이터가 발생하는 현실적인 패턴입니다.

상태온도압력확률
정상20 ~ 30 °C1000 ~ 1020 hPa85%
스파이크60 ~ 110 °C600 ~ 700 hPa15%

시연 포인트: "실제 현장처럼 간헐적 이상이 발생합니다. Caffeine이 노이즈와 실제 이상을 어떻게 구분하는지 확인하세요."

시나리오 전환​

CLI로 전환 (권장)​

# 직접 지정
cafe demo scenario Overheat

# 대화형 선택 (인자 생략 시)
cafe demo scenario

REST API로 전환​

POST /api/v1/demo/scenario
Content-Type: application/json

{
"scenario": "Overheat"
}
응답 코드의미
200 OK시나리오 전환 성공
400 Bad Request유효하지 않은 시나리오명
503 Service UnavailableMQTT 브로커 연결 실패

유효한 시나리오: Normal, Overheat, PressureDrop, RandomSpike

🔧 데모 리셋​

시연을 반복하려면 Demo Stage 상단의 리셋 버튼을 클릭합니다:

  • 모든 SVG 노드 → 비활성(회색) 상태
  • 카운터(장비/알람/수집) → 0
  • 현재 단계 → 0 (시나리오 선택 화면)
  • 시나리오 → Normal

📊 실시간 데이터 흐름​

Demo Stage는 SignalR을 통해 실시간 이벤트를 수신합니다:

SignalR 이벤트트리거UI 반영
OnAlarmRaised알람 발생 시알람 카운터 증가 + SVG 노드 강조
OnIngestionStats데이터 수집 시 (1초 버퍼)수집 카운터 업데이트
OnEquipmentRegistered장비 등록 시장비 카운터 증가 + SVG 노드 활성화
SignalR 자동 재연결

네트워크가 일시적으로 끊어져도 자동 재연결됩니다 (재시도 간격: 즉시 → 2초 → 5초). 연결이 끊긴 동안 SVG 노드가 회색으로 표시됩니다.

🔒 장애 대응​

상황증상해결
MQTT 브로커 다운시나리오 전환 실패 토스트cafe demo down && cafe demo up
SignalR 연결 끊김노드가 회색으로 전환자동 재연결 대기 (최대 5초)
Edge PC 미감지Step 2에서 Bridge 카운트 0네트워크 서브넷 확인, ping 테스트
15초 타임아웃"다음" 버튼 하이라이트수동으로 다음 단계 진행
상태 확인컨테이너 실행 여부 불확실cafe demo status

🛠️ 고급: 수동 Docker 실행​

Caffeine CLI를 사용할 수 없는 환경에서는 Docker 명령어를 직접 실행할 수 있습니다.

인프라 시작​

docker run -d --name caffeine-demo-mqtt -p 1883:1883 eclipse-mosquitto:2
docker run -d --name caffeine-demo-redis -p 6379:6379 redis:7-alpine

시뮬레이터 실행​

# Edge PC 1
docker run --rm \
-e MQTT_HOST=<Host-PC-IP> \
-e DEVICE_ID=Edge-01 \
-e DEVICE_COUNT=5 \
-e SCENARIO=Normal \
-e TARGET_RPS=10 \
-e BATCH_SIZE=5 \
nexcode/caffeine-simulator:latest

# Edge PC 2 (Case 2 시나리오 시)
docker run --rm \
-e MQTT_HOST=<Host-PC-IP> \
-e DEVICE_ID=Edge-02 \
-e DEVICE_COUNT=5 \
-e SCENARIO=Normal \
-e TARGET_RPS=10 \
-e BATCH_SIZE=5 \
nexcode/caffeine-simulator:latest

정리​

docker stop caffeine-demo-mqtt caffeine-demo-redis
docker rm caffeine-demo-mqtt caffeine-demo-redis

📚 다음 단계​