init
@@ -0,0 +1,80 @@
|
||||
# Nanobanana 인포그래픽 생성 요청 — 4종
|
||||
|
||||
이 문서는 agy 에이전트가 nanobanana로 생성해야 할 4개 인포그래픽의 사양을 정의한다.
|
||||
산출물 위치: /home/godopu16/pugit/lab/grpc_based_interface/figures/
|
||||
|
||||
요구사항:
|
||||
- 스타일: 학술 논문/기술 백서 톤, 깔끔하고 정보 전달 명확, 색상은 절제 (남색/청록/주황 강조색 사용)
|
||||
- 해상도: 1920x1080 또는 2400x1600, PNG
|
||||
- 텍스트는 명확하고 읽기 쉬운 산세리프 폰트
|
||||
- 데이터 흐름·계층 구조가 한눈에 보이도록
|
||||
- 한국어/영어 혼용 가능, 핵심 레이블은 영어 권장 (논문 출판 호환)
|
||||
- 4개 모두 동일한 색상 팔레트/스타일로 통일감 유지
|
||||
|
||||
---
|
||||
|
||||
## 1. edge_aiot_usecases_overview.png
|
||||
**용도**: §3 도입부에 배치 — 4대 엣지 AIoT 사용 사례 콜라주
|
||||
|
||||
**구성**: 2x2 격자로 4개 시나리오를 한 장에 표현. 각 셀에 다음 내용을 시각화:
|
||||
- (좌상) Smart Factory: AGV/로봇이 라인 위를 이동, 컨베이어 벨트, 엣지 컨트롤러, 클라우드 연결 표시
|
||||
- (우상) Smart Building/Energy: 빌딩 외관, 내부 HVAC·조명·PV 인버터, 변전소 엣지, 클라우드 에너지 최적화
|
||||
- (좌하) Connected Vehicle/V2X: 차량, RSU(로드사이드 유닛), 5G MEC 타워, HD 맵 클라우드
|
||||
- (우하) Healthcare/Wearable: 환자, 웨어러블 밴드·스마트워치, 병원 엣지 서버, 클라우드 EHR
|
||||
|
||||
각 셀 우상단에 작은 사각형으로 "① Smart Factory / ② Smart Building / ③ V2X / ④ Healthcare" 라벨, 셀 하단에 핵심 KPI 한 줄 (예: "p99 < 10ms", "10k+ nodes", "10ms safety", "1mo battery").
|
||||
|
||||
---
|
||||
|
||||
## 2. smart_factory_aiot.png
|
||||
**용도**: §3.① — 스마트 팩토리 단일 상세 인포그래픽
|
||||
|
||||
**구성 (3-tier vertical)**: 하단 T3 (현장: AGV·로봇·CCTV·진동 센서 다수), 중단 T2 (엣지 게이트웨이·Jetson 박스, 라인 컨트롤러), 상단 T1 (클라우드, GPU 서버 팜).
|
||||
|
||||
표시할 통신 흐름:
|
||||
- T3→T2: 다수 화살표 (sensor telemetry, AGV state), "MQTT / gRPC-Lite" 라벨
|
||||
- T3↔T3 (AGV간): "Bidi Streaming 합의" 라벨
|
||||
- T2↔T1: 양방향 굵은 화살표, "gRPC over QUIC" 라벨
|
||||
- T1→T2: Server Streaming (모델 업데이트)
|
||||
- T2→T1: Client Streaming (배치 텔레메트리)
|
||||
|
||||
좌측 또는 우측에 작은 callout 박스로 "p99 < 10ms (AGV 합의)", "TPM 쿼터, TPM 100k+", "SPIFFE SVID + TPM 부팅 attestation" 등 핵심 메트릭/보안 3개.
|
||||
|
||||
---
|
||||
|
||||
## 3. smart_building_energy.png
|
||||
**용도**: §3.② — 스마트 빌딩/에너지 단일 상세 인포그래픽
|
||||
|
||||
**구성**: 빌딩 외관이 배경, 내부에 HVAC·조명·스마트 미터 다수, 옆에 PV 인버터 + 변전소, 상단에 클라우드.
|
||||
|
||||
표시할 통신 흐름:
|
||||
- 빌딩 내부 센서→엣지: "LoRa / Wi-SUN / Zigbee" (저전력 무선)
|
||||
- PV/미터→엣지: "MQTT"
|
||||
- 엣지↔엣지: 빌딩 HVAC 협업 합의
|
||||
- 엣지↔클라우드: "gRPC + QUIC"
|
||||
- 클라우드→엣지: 에너지 최적화 명령, Server Streaming
|
||||
|
||||
callout: "수만 노드 fan-in", "배터리 5–10년 (PV 인버터)", "피크 셰이빙 -30%".
|
||||
|
||||
---
|
||||
|
||||
## 4. healthcare_aiot.png
|
||||
**용도**: §3.④ — 헬스케어/원격 모니터링 단일 상세 인포그래픽
|
||||
|
||||
**구성**: 좌측 환자 + 웨어러블 (스마트워치·ECG 패치·약물 디스펜서), 중앙 병원/요양시설 엣지 서버, 우측 클라우드 EHR + 임상 추론 에이전트.
|
||||
|
||||
표시할 통신 흐름:
|
||||
- 웨어러블→엣지: "BLE / Wi-Fi", "duty cycle 1% for battery"
|
||||
- 약물 디스펜서→엣지: "MQTT QoS 1", "Confirmable"
|
||||
- 엣지↔엣지: 환자 모니터링 합의
|
||||
- 엣지↔클라우드: "gRPC + 유선/4G"
|
||||
- 긴급 이벤트(부정맥·낙상): 굵은 빨간 화살표로 즉시 T1 알림
|
||||
|
||||
callout: "배터리 1주–1개월", "긴급 < 1s", "HIPAA + TPM + SPIRE attestation".
|
||||
|
||||
---
|
||||
|
||||
## 출력 명세
|
||||
- 파일 형식: PNG, 2400x1600 권장
|
||||
- 파일명: 위 4개 이름 그대로 figures/ 디렉터리에 저장
|
||||
- 보고서 본문에서  형식으로 참조
|
||||
|
After Width: | Height: | Size: 575 KiB |
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 720" font-family="Helvetica, Arial, sans-serif">
|
||||
<defs>
|
||||
<linearGradient id="tier1" x1="0" x2="0" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#e3f2fd"/>
|
||||
<stop offset="100%" stop-color="#bbdefb"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="tier2" x1="0" x2="0" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#e0f7fa"/>
|
||||
<stop offset="100%" stop-color="#b2ebf2"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="tier3" x1="0" x2="0" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#fff3e0"/>
|
||||
<stop offset="100%" stop-color="#ffe0b2"/>
|
||||
</linearGradient>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#37474f"/>
|
||||
</marker>
|
||||
<marker id="arrowRev" viewBox="0 0 10 10" refX="1" refY="5" markerWidth="6" markerHeight="6" orient="auto">
|
||||
<path d="M10,0 L0,5 L10,10 z" fill="#37474f"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<!-- Title -->
|
||||
<text x="550" y="32" text-anchor="middle" font-size="20" font-weight="700" fill="#102a43">엣지 AIoT 3-Tier 물리적 분산 구조</text>
|
||||
<text x="550" y="55" text-anchor="middle" font-size="13" fill="#486581">클라우드 — 엣지 — 현장 디바이스의 이질적 자원·네트워크·보안 제약</text>
|
||||
|
||||
<!-- T1: Cloud -->
|
||||
<rect x="60" y="80" width="980" height="130" rx="10" fill="url(#tier1)" stroke="#1976d2" stroke-width="2"/>
|
||||
<text x="100" y="115" font-size="16" font-weight="700" fill="#0d47a1">T1 — Cloud (데이터센터)</text>
|
||||
<text x="100" y="138" font-size="12" fill="#102a43">x86/GPU 서버, k8s 컨테이너 · TB RAM · GPU 다수</text>
|
||||
<text x="100" y="158" font-size="12" fill="#102a43">LLM·분석·중앙 PM 에이전트 · Istio Service Mesh · OTel Collector</text>
|
||||
<text x="100" y="178" font-size="12" fill="#0d47a1" font-weight="600">네트워크: 안정·고대역폭·상시 연결 · 보안 경계: 내부 (강)</text>
|
||||
<!-- icons -->
|
||||
<g transform="translate(800,95)">
|
||||
<rect x="0" y="0" width="60" height="50" rx="4" fill="#fff" stroke="#1976d2"/>
|
||||
<text x="30" y="32" text-anchor="middle" font-size="10" fill="#1976d2">GPU</text>
|
||||
<rect x="70" y="0" width="60" height="50" rx="4" fill="#fff" stroke="#1976d2"/>
|
||||
<text x="100" y="32" text-anchor="middle" font-size="10" fill="#1976d2">k8s</text>
|
||||
<rect x="140" y="0" width="60" height="50" rx="4" fill="#fff" stroke="#1976d2"/>
|
||||
<text x="170" y="32" text-anchor="middle" font-size="10" fill="#1976d2">LLM</text>
|
||||
</g>
|
||||
|
||||
<!-- T2: Edge -->
|
||||
<rect x="60" y="260" width="980" height="130" rx="10" fill="url(#tier2)" stroke="#00838f" stroke-width="2"/>
|
||||
<text x="100" y="295" font-size="16" font-weight="700" fill="#006064">T2 — Edge (현장 부근 게이트웨이)</text>
|
||||
<text x="100" y="318" font-size="12" fill="#102a43">Jetson / RK3588 / 산업용 PC · 4–32GB RAM · NPU</text>
|
||||
<text x="100" y="338" font-size="12" fill="#102a43">현장 추론·제어·프로토콜 변환 게이트웨이 · Envoy Edge Proxy</text>
|
||||
<text x="100" y="358" font-size="12" fill="#006064" font-weight="600">네트워크: 인터미턴트 (4G/5G/유선 혼합) · 보안 경계: 반노출 (중)</text>
|
||||
<g transform="translate(800,275)">
|
||||
<rect x="0" y="0" width="60" height="50" rx="4" fill="#fff" stroke="#00838f"/>
|
||||
<text x="30" y="32" text-anchor="middle" font-size="10" fill="#00838f">Jetson</text>
|
||||
<rect x="70" y="0" width="60" height="50" rx="4" fill="#fff" stroke="#00838f"/>
|
||||
<text x="100" y="32" text-anchor="middle" font-size="10" fill="#00838f">NPU</text>
|
||||
<rect x="140" y="0" width="60" height="50" rx="4" fill="#fff" stroke="#00838f"/>
|
||||
<text x="170" y="32" text-anchor="middle" font-size="10" fill="#00838f">GW</text>
|
||||
</g>
|
||||
|
||||
<!-- T3: Field -->
|
||||
<rect x="60" y="440" width="980" height="180" rx="10" fill="url(#tier3)" stroke="#e65100" stroke-width="2"/>
|
||||
<text x="100" y="475" font-size="16" font-weight="700" fill="#bf360c">T3 — Field (현장 IoT·임베디드·로봇·센서)</text>
|
||||
<text x="100" y="498" font-size="12" fill="#102a43">MCU (Cortex-M/A), 임베디드 리눅스, AGV·드론·CCTV·진동 센서 · KB–수십 MB RAM</text>
|
||||
<text x="100" y="518" font-size="12" fill="#102a43">저전력 디바이스 에이전트 · 텔레메트리·제어 · 오프라인 큐 · TPM/SE 부팅 attestation</text>
|
||||
<text x="100" y="538" font-size="12" fill="#bf360c" font-weight="600">네트워크: 불안정·저대역폭·다중 홉 (Wi-Fi/LoRa/BLE/5G) · 보안 경계: 물리 노출 (약)</text>
|
||||
<g transform="translate(800,455)">
|
||||
<rect x="0" y="0" width="60" height="50" rx="4" fill="#fff" stroke="#e65100"/>
|
||||
<text x="30" y="32" text-anchor="middle" font-size="10" fill="#e65100">AGV</text>
|
||||
<rect x="70" y="0" width="60" height="50" rx="4" fill="#fff" stroke="#e65100"/>
|
||||
<text x="100" y="32" text-anchor="middle" font-size="10" fill="#e65100">MCU</text>
|
||||
<rect x="140" y="0" width="60" height="50" rx="4" fill="#fff" stroke="#e65100"/>
|
||||
<text x="170" y="32" text-anchor="middle" font-size="10" fill="#e65100">Sensor</text>
|
||||
<rect x="0" y="60" width="60" height="50" rx="4" fill="#fff" stroke="#e65100"/>
|
||||
<text x="30" y="92" text-anchor="middle" font-size="10" fill="#e65100">Robot</text>
|
||||
<rect x="70" y="60" width="60" height="50" rx="4" fill="#fff" stroke="#e65100"/>
|
||||
<text x="100" y="92" text-anchor="middle" font-size="10" fill="#e65100">CCTV</text>
|
||||
<rect x="140" y="60" width="60" height="50" rx="4" fill="#fff" stroke="#e65100"/>
|
||||
<text x="170" y="92" text-anchor="middle" font-size="10" fill="#e65100">Wearable</text>
|
||||
</g>
|
||||
|
||||
<!-- Communication arrows T1<->T2 -->
|
||||
<line x1="550" y1="210" x2="550" y2="260" stroke="#37474f" stroke-width="2.5" marker-end="url(#arrow)" marker-start="url(#arrowRev)"/>
|
||||
<text x="565" y="240" font-size="12" font-weight="600" fill="#0d47a1">gRPC over QUIC / HTTP-2</text>
|
||||
<text x="565" y="256" font-size="11" fill="#486581">(Server Streaming / Bidi Streaming)</text>
|
||||
|
||||
<!-- Communication arrows T2<->T3 -->
|
||||
<line x1="550" y1="390" x2="550" y2="440" stroke="#37474f" stroke-width="2.5" marker-end="url(#arrow)" marker-start="url(#arrowRev)"/>
|
||||
<text x="565" y="418" font-size="12" font-weight="600" fill="#bf360c">MQTT / CoAP / BLE / C-V2X</text>
|
||||
<text x="565" y="434" font-size="11" fill="#486581">(low-power, lossy, intermittent)</text>
|
||||
|
||||
<!-- Resource gradient bar at bottom -->
|
||||
<text x="60" y="660" font-size="11" font-weight="600" fill="#486581">자원/네트워크/보안 강도:</text>
|
||||
<defs>
|
||||
<linearGradient id="bar" x1="0" x2="1" y1="0" y2="0">
|
||||
<stop offset="0%" stop-color="#e65100"/>
|
||||
<stop offset="50%" stop-color="#00838f"/>
|
||||
<stop offset="100%" stop-color="#0d47a1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect x="200" y="650" width="840" height="14" fill="url(#bar)"/>
|
||||
<text x="200" y="685" font-size="10" fill="#bf360c">약함 (T3)</text>
|
||||
<text x="620" y="685" font-size="10" fill="#006064" text-anchor="middle">중간 (T2)</text>
|
||||
<text x="1040" y="685" font-size="10" fill="#0d47a1" text-anchor="end">강함 (T1)</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.0 KiB |
@@ -0,0 +1,104 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 780" font-family="Helvetica, Arial, sans-serif">
|
||||
<defs>
|
||||
<marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#37474f"/>
|
||||
</marker>
|
||||
<marker id="arrRev" viewBox="0 0 10 10" refX="1" refY="5" markerWidth="6" markerHeight="6" orient="auto">
|
||||
<path d="M10,0 L0,5 L10,10 z" fill="#37474f"/>
|
||||
</marker>
|
||||
<marker id="arrO" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#e65100"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<text x="600" y="32" text-anchor="middle" font-size="20" font-weight="700" fill="#102a43">2-Tier 프로토콜 아키텍처 (핵심 제안)</text>
|
||||
<text x="600" y="55" text-anchor="middle" font-size="13" fill="#486581">T1↔T2: gRPC/QUIC (백본) · T2↔T3: MQTT/CoAP/C-V2X (현장 최적) · T2 게이트웨이 변환</text>
|
||||
|
||||
<!-- T1 Cloud -->
|
||||
<rect x="60" y="80" width="1080" height="120" rx="10" fill="#e3f2fd" stroke="#1976d2" stroke-width="2"/>
|
||||
<text x="90" y="115" font-size="15" font-weight="700" fill="#0d47a1">T1 — Cloud / On-Premises Servers</text>
|
||||
<text x="90" y="138" font-size="12" fill="#102a43">LLM·분석·중앙 PM·예지정비 에이전트</text>
|
||||
<text x="90" y="158" font-size="12" fill="#102a43">k8s · Istio Service Mesh · OTel Collector · BSR (Buf Schema Registry)</text>
|
||||
<text x="90" y="180" font-size="12" font-weight="600" fill="#0d47a1">전송: gRPC Unary / Server Streaming / Bidi Streaming</text>
|
||||
<g transform="translate(880,95)">
|
||||
<rect x="0" y="0" width="55" height="40" rx="3" fill="#fff" stroke="#1976d2"/>
|
||||
<text x="27" y="25" text-anchor="middle" font-size="10" fill="#1976d2">PM</text>
|
||||
<rect x="60" y="0" width="55" height="40" rx="3" fill="#fff" stroke="#1976d2"/>
|
||||
<text x="87" y="25" text-anchor="middle" font-size="10" fill="#1976d2">LLM</text>
|
||||
<rect x="120" y="0" width="55" height="40" rx="3" fill="#fff" stroke="#1976d2"/>
|
||||
<text x="147" y="25" text-anchor="middle" font-size="10" fill="#1976d2">분석</text>
|
||||
<rect x="180" y="0" width="55" height="40" rx="3" fill="#fff" stroke="#1976d2"/>
|
||||
<text x="207" y="25" text-anchor="middle" font-size="10" fill="#1976d2">OTA</text>
|
||||
</g>
|
||||
|
||||
<!-- Communication Channel T1<->T2 (gRPC) -->
|
||||
<rect x="60" y="210" width="1080" height="80" rx="6" fill="#fff" stroke="#0d47a1" stroke-dasharray="6,4" stroke-width="2"/>
|
||||
<text x="600" y="240" text-anchor="middle" font-size="14" font-weight="700" fill="#0d47a1">T1 ↔ T2 Communication Channel</text>
|
||||
<text x="600" y="265" text-anchor="middle" font-size="12" fill="#102a43">gRPC over HTTP/2 + QUIC (mobile/V2X handover) · mTLS · Server/Bidi Streaming · W3C traceparent</text>
|
||||
<line x1="600" y1="200" x2="600" y2="210" stroke="#37474f" stroke-width="2.5" marker-end="url(#arr)"/>
|
||||
<line x1="600" y1="290" x2="600" y2="300" stroke="#37474f" stroke-width="2.5" marker-end="url(#arr)"/>
|
||||
|
||||
<!-- T2 Edge -->
|
||||
<rect x="60" y="300" width="1080" height="160" rx="10" fill="#e0f7fa" stroke="#00838f" stroke-width="2"/>
|
||||
<text x="90" y="335" font-size="15" font-weight="700" fill="#006064">T2 — Edge Gateway (프로토콜 변환 + 인증 중계)</text>
|
||||
<text x="90" y="358" font-size="12" fill="#102a43">Jetson · RK3588 · 산업용 PC · 5G MEC (V2X용)</text>
|
||||
<text x="90" y="378" font-size="12" font-weight="600" fill="#006064">6대 책임:</text>
|
||||
<g font-size="11" fill="#102a43">
|
||||
<text x="100" y="398">① 프로토콜 변환 (MQTT topic ↔ gRPC method, JSON↔Protobuf transcoding)</text>
|
||||
<text x="100" y="416">② T3 fan-in 배치·버퍼링 (Stream Aggregation)</text>
|
||||
<text x="100" y="434">③ Resume Token 발급 (단절-재접속 이어받기)</text>
|
||||
<text x="100" y="452">④ 디바이스 인증 중계 (T3 SVID 검증 → T1 mTLS)</text>
|
||||
<text x="700" y="398">⑤ Trace fan-out (T3 segment를 T1 OTel로 전파)</text>
|
||||
<text x="700" y="416">⑥ 메트릭·관측 (Prometheus exporter → OTel Collector)</text>
|
||||
</g>
|
||||
<g transform="translate(880,315)">
|
||||
<rect x="0" y="0" width="55" height="40" rx="3" fill="#fff" stroke="#00838f"/>
|
||||
<text x="27" y="25" text-anchor="middle" font-size="10" fill="#00838f">추론</text>
|
||||
<rect x="60" y="0" width="55" height="40" rx="3" fill="#fff" stroke="#00838f"/>
|
||||
<text x="87" y="25" text-anchor="middle" font-size="10" fill="#00838f">제어</text>
|
||||
<rect x="120" y="0" width="55" height="40" rx="3" fill="#fff" stroke="#00838f"/>
|
||||
<text x="147" y="25" text-anchor="middle" font-size="10" fill="#00838f">GW</text>
|
||||
<rect x="180" y="0" width="55" height="40" rx="3" fill="#fff" stroke="#00838f"/>
|
||||
<text x="207" y="25" text-anchor="middle" font-size="10" fill="#00838f">5G MEC</text>
|
||||
</g>
|
||||
|
||||
<!-- Communication Channel T2<->T3 -->
|
||||
<rect x="60" y="470" width="1080" height="80" rx="6" fill="#fff" stroke="#bf360c" stroke-dasharray="6,4" stroke-width="2"/>
|
||||
<text x="600" y="500" text-anchor="middle" font-size="14" font-weight="700" fill="#bf360c">T2 ↔ T3 Communication Channel (tier-최적 혼합)</text>
|
||||
<text x="600" y="525" text-anchor="middle" font-size="12" fill="#102a43">MQTT 5.0 (low-power MCU) · CoAP (constrained) · gRPC-Lite/nanopb (고성능 임베디드) · C-V2X (차량) · BLE (웨어러블)</text>
|
||||
<line x1="600" y1="460" x2="600" y2="470" stroke="#37474f" stroke-width="2.5" marker-end="url(#arr)"/>
|
||||
<line x1="600" y1="550" x2="600" y2="560" stroke="#37474f" stroke-width="2.5" marker-end="url(#arr)"/>
|
||||
|
||||
<!-- T3 Field -->
|
||||
<rect x="60" y="560" width="1080" height="170" rx="10" fill="#fff3e0" stroke="#e65100" stroke-width="2"/>
|
||||
<text x="90" y="595" font-size="15" font-weight="700" fill="#bf360c">T3 — Field Devices (tier-최적 프로토콜 매핑)</text>
|
||||
<g font-size="11" fill="#102a43">
|
||||
<text x="100" y="618"><tspan font-weight="600">저전력 MCU (LoRa/Wi-SUN):</tspan> MQTT 5.0 (Pub/Sub, QoS 0/1/2, Last Will) — 빌딩 센서·PV 인버터</text>
|
||||
<text x="100" y="638"><tspan font-weight="600">제약 디바이스 (6LoWPAN):</tspan> CoAP (Confirmable, Observe) — 진동·환경 센서</text>
|
||||
<text x="100" y="658"><tspan font-weight="600">고성능 임베디드 (리눅스):</tspan> gRPC-Lite (nanopb) — AGV·협동로봇·CCTV</text>
|
||||
<text x="100" y="678"><tspan font-weight="600">차량 (5G/C-V2X):</tspan> C-V2X/ITS-G5 (CAM/DENM) — 10ms 안전 메시지</text>
|
||||
<text x="100" y="698"><tspan font-weight="600">웨어러블/헬스:</tspan> BLE (duty cycle 1%) + MQTT — 배터리 1개월</text>
|
||||
</g>
|
||||
<g transform="translate(880,580)">
|
||||
<rect x="0" y="0" width="55" height="35" rx="3" fill="#fff" stroke="#e65100"/>
|
||||
<text x="27" y="22" text-anchor="middle" font-size="9" fill="#e65100">AGV</text>
|
||||
<rect x="60" y="0" width="55" height="35" rx="3" fill="#fff" stroke="#e65100"/>
|
||||
<text x="87" y="22" text-anchor="middle" font-size="9" fill="#e65100">MCU</text>
|
||||
<rect x="120" y="0" width="55" height="35" rx="3" fill="#fff" stroke="#e65100"/>
|
||||
<text x="147" y="22" text-anchor="middle" font-size="9" fill="#e65100">Sensor</text>
|
||||
<rect x="180" y="0" width="55" height="35" rx="3" fill="#fff" stroke="#e65100"/>
|
||||
<text x="207" y="22" text-anchor="middle" font-size="9" fill="#e65100">Vehicle</text>
|
||||
<rect x="0" y="40" width="55" height="35" rx="3" fill="#fff" stroke="#e65100"/>
|
||||
<text x="27" y="62" text-anchor="middle" font-size="9" fill="#e65100">Robot</text>
|
||||
<rect x="60" y="40" width="55" height="35" rx="3" fill="#fff" stroke="#e65100"/>
|
||||
<text x="87" y="62" text-anchor="middle" font-size="9" fill="#e65100">PV</text>
|
||||
<rect x="120" y="40" width="55" height="35" rx="3" fill="#fff" stroke="#e65100"/>
|
||||
<text x="147" y="62" text-anchor="middle" font-size="9" fill="#e65100">HVAC</text>
|
||||
<rect x="180" y="40" width="55" height="35" rx="3" fill="#fff" stroke="#e65100"/>
|
||||
<text x="207" y="62" text-anchor="middle" font-size="9" fill="#e65100">Wearable</text>
|
||||
</g>
|
||||
|
||||
<!-- Annotation: gRPC active scope -->
|
||||
<text x="600" y="755" text-anchor="middle" font-size="11" font-style="italic" fill="#486581">gRPC의 활성 영역: T1↔T2 백본, T2↔T2 엣지-로컬 합의, T1→T2 모델 Streaming · T2→T3 일부(고성능 임베디드) — 나머지 T3는 tier-최적 프로토콜 혼용</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.2 KiB |
@@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 600" font-family="Helvetica, Arial, sans-serif">
|
||||
<defs>
|
||||
<marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#37474f"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<text x="550" y="32" text-anchor="middle" font-size="20" font-weight="700" fill="#102a43">gRPC 4대 RPC 모드 ↔ 엣지 AIoT 시나리오 매핑</text>
|
||||
<text x="550" y="55" text-anchor="middle" font-size="13" fill="#486581">통신 계층의 1급 시민인 4가지 모드를 MAS 상호작용에 1:1 매핑</text>
|
||||
|
||||
<!-- Unary -->
|
||||
<g>
|
||||
<rect x="60" y="80" width="500" height="220" rx="10" fill="#f1f8ff" stroke="#1976d2" stroke-width="2"/>
|
||||
<text x="80" y="110" font-size="15" font-weight="700" fill="#0d47a1">① Unary RPC</text>
|
||||
<text x="80" y="132" font-size="12" font-style="italic" fill="#486581">단일 요청 — 단일 응답</text>
|
||||
<!-- diagram -->
|
||||
<circle cx="140" cy="200" r="22" fill="#bbdefb" stroke="#1976d2" stroke-width="2"/>
|
||||
<text x="140" y="204" text-anchor="middle" font-size="10" fill="#0d47a1">T1</text>
|
||||
<circle cx="450" cy="200" r="22" fill="#ffe0b2" stroke="#e65100" stroke-width="2"/>
|
||||
<text x="450" y="204" text-anchor="middle" font-size="10" fill="#bf360c">T3</text>
|
||||
<line x1="165" y1="200" x2="425" y2="200" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="425" y1="215" x2="165" y2="215" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="295" y="194" text-anchor="middle" font-size="10" fill="#0d47a1">① Req</text>
|
||||
<text x="295" y="234" text-anchor="middle" font-size="10" fill="#bf360c">① Resp</text>
|
||||
<text x="80" y="260" font-size="11" fill="#102a43"><tspan font-weight="600">사례:</tspan> OTA 명령, 상태 조회, 설정 변경</text>
|
||||
<text x="80" y="280" font-size="11" fill="#486581">gRPC Service Config의 지수 백오프 Retry Policy 내장</text>
|
||||
</g>
|
||||
|
||||
<!-- Server Streaming -->
|
||||
<g>
|
||||
<rect x="580" y="80" width="500" height="220" rx="10" fill="#f1f8ff" stroke="#1976d2" stroke-width="2"/>
|
||||
<text x="600" y="110" font-size="15" font-weight="700" fill="#0d47a1">② Server Streaming RPC</text>
|
||||
<text x="600" y="132" font-size="12" font-style="italic" fill="#486581">단일 요청 — 지속 응답</text>
|
||||
<circle cx="640" cy="200" r="22" fill="#e0f7fa" stroke="#00838f" stroke-width="2"/>
|
||||
<text x="640" y="204" text-anchor="middle" font-size="10" fill="#006064">T1</text>
|
||||
<circle cx="1000" cy="200" r="22" fill="#e0f7fa" stroke="#00838f" stroke-width="2"/>
|
||||
<text x="1000" y="204" text-anchor="middle" font-size="10" fill="#006064">T2</text>
|
||||
<line x1="665" y1="200" x2="975" y2="200" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="820" y="194" text-anchor="middle" font-size="10" fill="#006064">① Req</text>
|
||||
<line x1="975" y1="220" x2="665" y2="220" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="975" y1="240" x2="665" y2="240" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="975" y1="260" x2="665" y2="260" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="820" y="276" text-anchor="middle" font-size="10" fill="#006064">② Stream (LLM token · telemetry)</text>
|
||||
<text x="600" y="290" font-size="11" fill="#102a43"><tspan font-weight="600">사례:</tspan> T1→T2 LLM 토큰 스트리밍, 모델 업데이트</text>
|
||||
</g>
|
||||
|
||||
<!-- Client Streaming -->
|
||||
<g>
|
||||
<rect x="60" y="320" width="500" height="220" rx="10" fill="#fff3e0" stroke="#e65100" stroke-width="2"/>
|
||||
<text x="80" y="350" font-size="15" font-weight="700" fill="#bf360c">③ Client Streaming RPC</text>
|
||||
<text x="80" y="372" font-size="12" font-style="italic" fill="#486581">지속 요청 — 단일 응답</text>
|
||||
<circle cx="140" cy="440" r="22" fill="#e0f7fa" stroke="#00838f" stroke-width="2"/>
|
||||
<text x="140" y="444" text-anchor="middle" font-size="10" fill="#006064">T2</text>
|
||||
<circle cx="450" cy="440" r="22" fill="#ffe0b2" stroke="#e65100" stroke-width="2"/>
|
||||
<text x="450" y="444" text-anchor="middle" font-size="10" fill="#bf360c">T3 (×N)</text>
|
||||
<line x1="165" y1="430" x2="425" y2="430" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="165" y1="445" x2="425" y2="445" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="165" y1="460" x2="425" y2="460" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="165" y1="475" x2="425" y2="475" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="295" y="422" text-anchor="middle" font-size="10" fill="#bf360c">① Telemetry chunks</text>
|
||||
<line x1="425" y1="500" x2="165" y2="500" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="295" y="518" text-anchor="middle" font-size="10" fill="#006064">② Summarized Resp</text>
|
||||
<text x="80" y="540" font-size="11" fill="#102a43"><tspan font-weight="600">사례:</tspan> T3 다수 센서 배치 업로드, OTA 펌웨어 청크</text>
|
||||
</g>
|
||||
|
||||
<!-- Bidi -->
|
||||
<g>
|
||||
<rect x="580" y="320" width="500" height="220" rx="10" fill="#fff3e0" stroke="#e65100" stroke-width="2"/>
|
||||
<text x="600" y="350" font-size="15" font-weight="700" fill="#bf360c">④ Bidirectional Streaming RPC</text>
|
||||
<text x="600" y="372" font-size="12" font-style="italic" fill="#486581">지속 요청 — 지속 응답</text>
|
||||
<circle cx="640" cy="440" r="22" fill="#ffe0b2" stroke="#e65100" stroke-width="2"/>
|
||||
<text x="640" y="444" text-anchor="middle" font-size="10" fill="#bf360c">T2</text>
|
||||
<circle cx="1000" cy="440" r="22" fill="#ffe0b2" stroke="#e65100" stroke-width="2"/>
|
||||
<text x="1000" y="444" text-anchor="middle" font-size="10" fill="#bf360c">T3</text>
|
||||
<line x1="665" y1="430" x2="975" y2="430" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="975" y1="445" x2="665" y2="445" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="665" y1="460" x2="975" y2="460" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="975" y1="475" x2="665" y2="475" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="820" y="416" text-anchor="middle" font-size="10" fill="#bf360c">① Negotiation · State</text>
|
||||
<text x="820" y="500" text-anchor="middle" font-size="10" fill="#bf360c">② Continues…</text>
|
||||
<text x="600" y="520" font-size="11" fill="#102a43"><tspan font-weight="600">사례:</tspan> T2↔T2 엣지 합의, T3↔T2 AGV/차량 V2X 실시간 협업</text>
|
||||
</g>
|
||||
|
||||
<text x="550" y="575" text-anchor="middle" font-size="11" font-style="italic" fill="#486581">HTTP/2 Flow Control(백프레셔) + Deadline + Resume Token이 모든 모드의 단절·핸드오버 내성을 보장</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.8 KiB |
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 680" font-family="Helvetica, Arial, sans-serif">
|
||||
<defs>
|
||||
<marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#37474f"/>
|
||||
</marker>
|
||||
<linearGradient id="g1" x1="0" x2="0" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#fff3e0"/>
|
||||
<stop offset="100%" stop-color="#ffe0b2"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="g2" x1="0" x2="0" y1="0" y2="1">
|
||||
<stop offset="0%" stop-color="#e0f7fa"/>
|
||||
<stop offset="100%" stop-color="#b2ebf2"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<text x="600" y="32" text-anchor="middle" font-size="20" font-weight="700" fill="#102a43">2계층 통신 제어 (2-Layer Governance)</text>
|
||||
<text x="600" y="55" text-anchor="middle" font-size="13" fill="#486581">인프라(Service Mesh) + 애플리케이션(gRPC Interceptor) 관심사 분리</text>
|
||||
|
||||
<!-- Request inflow arrow -->
|
||||
<text x="40" y="120" font-size="13" font-weight="700" fill="#102a43">Request</text>
|
||||
<text x="40" y="138" font-size="13" font-weight="700" fill="#102a43">Inflow</text>
|
||||
<line x1="100" y1="125" x2="540" y2="125" stroke="#37474f" stroke-width="3" marker-end="url(#arr)"/>
|
||||
|
||||
<!-- Layer 1: Service Mesh -->
|
||||
<rect x="120" y="160" width="960" height="160" rx="10" fill="url(#g1)" stroke="#e65100" stroke-width="2"/>
|
||||
<text x="150" y="195" font-size="16" font-weight="700" fill="#bf360c">1계층 — Service Mesh (Envoy Proxy · Infrastructure)</text>
|
||||
<text x="150" y="222" font-size="12" fill="#102a43">인프라 트래픽 수송 통제 및 전송 레벨 신뢰 체계 구축</text>
|
||||
<g font-size="12" fill="#102a43">
|
||||
<text x="150" y="252">▸ <tspan font-weight="600">mTLS 종단</tspan> (SPIFFE SVID 검증)</text>
|
||||
<text x="150" y="274">▸ <tspan font-weight="600">카나리 / 블루-그린</tspan> 라우팅</text>
|
||||
<text x="150" y="296">▸ <tspan font-weight="600">서킷 브레이커</tspan> (에이전트 다운 시 차단)</text>
|
||||
<text x="640" y="252">▸ <tspan font-weight="600">글로벌 Rate Limiting</tspan> (Envoy + RLS)</text>
|
||||
<text x="640" y="274">▸ <tspan font-weight="600">xDS Light</tspan>로 T2 게이트웨이에 정책 push</text>
|
||||
<text x="640" y="296">▸ <tspan font-weight="600">Load Balancing</tspan> (eBPF / XDS)</text>
|
||||
</g>
|
||||
|
||||
<!-- Vertical arrow -->
|
||||
<line x1="600" y1="320" x2="600" y2="355" stroke="#37474f" stroke-width="2.5" marker-end="url(#arr)"/>
|
||||
<text x="615" y="345" font-size="11" fill="#486581">to Pod / Local Container Loopback</text>
|
||||
|
||||
<!-- Layer 2: Interceptor -->
|
||||
<rect x="120" y="365" width="960" height="160" rx="10" fill="url(#g2)" stroke="#00838f" stroke-width="2"/>
|
||||
<text x="150" y="400" font-size="16" font-weight="700" fill="#006064">2계층 — gRPC Interceptor (Application · Business Logic)</text>
|
||||
<text x="150" y="427" font-size="12" fill="#102a43">비즈니스 내부 및 데이터 페이로드 검증</text>
|
||||
<g font-size="12" fill="#102a43">
|
||||
<text x="150" y="457">▸ <tspan font-weight="600">Payload Validation</tspan> (프롬프트 인젝션 필터)</text>
|
||||
<text x="150" y="479">▸ <tspan font-weight="600">디바이스 컨텍스트 전파</tspan> (battery, link-quality)</text>
|
||||
<text x="150" y="501">▸ <tspan font-weight="600">비즈니스 AuthZ</tspan> (테넌트 Claims 검증)</text>
|
||||
<text x="640" y="457">▸ <tspan font-weight="600">Resume Token 발급</tspan> (단절-재접속 이어받기)</text>
|
||||
<text x="640" y="479">▸ <tspan font-weight="600">W3C Traceparent</tspan> 주입·전파</text>
|
||||
<text x="640" y="501">▸ <tspan font-weight="600">Deadline 강제 주입</tspan></text>
|
||||
</g>
|
||||
|
||||
<!-- Vertical arrow -->
|
||||
<line x1="600" y1="525" x2="600" y2="560" stroke="#37474f" stroke-width="2.5" marker-end="url(#arr)"/>
|
||||
|
||||
<!-- Destination -->
|
||||
<rect x="450" y="565" width="300" height="50" rx="8" fill="#102a43"/>
|
||||
<text x="600" y="595" text-anchor="middle" font-size="15" font-weight="700" fill="#fff">Agent Core Code (Python / Go / Rust)</text>
|
||||
|
||||
<!-- Right side annotation -->
|
||||
<text x="1100" y="200" text-anchor="end" font-size="11" font-style="italic" fill="#bf360c">infra-team owned</text>
|
||||
<text x="1100" y="405" text-anchor="end" font-size="11" font-style="italic" fill="#006064">app-team owned</text>
|
||||
<text x="1100" y="595" text-anchor="end" font-size="11" font-style="italic" fill="#102a43">agent owner</text>
|
||||
|
||||
<!-- bottom note -->
|
||||
<text x="600" y="650" text-anchor="middle" font-size="11" font-style="italic" fill="#486581">관심사 분리로 인프라 변경 없이 비즈니스 정책 진화, 그 반대도 가능 (Decoupling)</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 600" font-family="Helvetica, Arial, sans-serif">
|
||||
<defs>
|
||||
<marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#37474f"/>
|
||||
</marker>
|
||||
<marker id="arrRed" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
|
||||
<path d="M0,0 L10,5 L0,10 z" fill="#c62828"/>
|
||||
</marker>
|
||||
</defs>
|
||||
|
||||
<text x="550" y="32" text-anchor="middle" font-size="20" font-weight="700" fill="#102a43">Resume Token 시퀀스 — 단절-재접속 이어받기</text>
|
||||
<text x="550" y="55" text-anchor="middle" font-size="13" fill="#486581">T3 디바이스 또는 T2 게이트웨이의 일시 단절 시, gRPC 스트리밍 위치 보존</text>
|
||||
|
||||
<!-- Lanes -->
|
||||
<line x1="180" y1="100" x2="180" y2="540" stroke="#9e9e9e" stroke-width="1.5" stroke-dasharray="4,3"/>
|
||||
<line x1="500" y1="100" x2="500" y2="540" stroke="#9e9e9e" stroke-width="1.5" stroke-dasharray="4,3"/>
|
||||
<line x1="820" y1="100" x2="820" y2="540" stroke="#9e9e9e" stroke-width="1.5" stroke-dasharray="4,3"/>
|
||||
|
||||
<!-- Lane labels -->
|
||||
<rect x="60" y="85" width="120" height="40" rx="6" fill="#fff3e0" stroke="#e65100"/>
|
||||
<text x="120" y="110" text-anchor="middle" font-size="13" font-weight="700" fill="#bf360c">T3 Device</text>
|
||||
<rect x="380" y="85" width="120" height="40" rx="6" fill="#e0f7fa" stroke="#00838f"/>
|
||||
<text x="440" y="110" text-anchor="middle" font-size="13" font-weight="700" fill="#006064">T2 Gateway</text>
|
||||
<rect x="700" y="85" width="120" height="40" rx="6" fill="#e3f2fd" stroke="#1976d2"/>
|
||||
<text x="760" y="110" text-anchor="middle" font-size="13" font-weight="700" fill="#0d47a1">T1 Server</text>
|
||||
|
||||
<!-- 1. Start streaming -->
|
||||
<text x="40" y="160" font-size="12" font-weight="700" fill="#102a43">① Start</text>
|
||||
<line x1="500" y1="160" x2="820" y2="160" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="660" y="155" text-anchor="middle" font-size="11" fill="#006064">StartStream(token=null)</text>
|
||||
|
||||
<!-- 2. Server streams data -->
|
||||
<text x="40" y="200" font-size="12" font-weight="700" fill="#102a43">② Stream</text>
|
||||
<line x1="820" y1="200" x2="180" y2="200" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="500" y="195" text-anchor="middle" font-size="11" fill="#0d47a1">Data[1..1000] (Protobuf streaming)</text>
|
||||
|
||||
<line x1="820" y1="230" x2="180" y2="230" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="820" y1="260" x2="180" y2="260" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="500" y="278" text-anchor="middle" font-size="11" fill="#0d47a1">Data[1001..2000] ...</text>
|
||||
|
||||
<!-- 3. Network disruption -->
|
||||
<text x="40" y="320" font-size="12" font-weight="700" fill="#c62828">③ Disrupt</text>
|
||||
<line x1="180" y1="305" x2="820" y2="305" stroke="#c62828" stroke-width="3" stroke-dasharray="8,4" marker-end="url(#arrRed)"/>
|
||||
<text x="500" y="298" text-anchor="middle" font-size="11" font-weight="700" fill="#c62828">⚠ Network Disconnected (Wi-Fi/5G handover)</text>
|
||||
|
||||
<text x="40" y="345" font-size="12" font-weight="700" fill="#102a43">④ Cache</text>
|
||||
<text x="500" y="345" font-size="11" fill="#006064">T2: 큐잉 + 마지막 Token = "TKN@2000" 저장</text>
|
||||
<text x="500" y="365" font-size="11" fill="#006064">T3: 오프라인 큐 + Resume Token 보관</text>
|
||||
|
||||
<!-- 5. Reconnect with token -->
|
||||
<text x="40" y="410" font-size="12" font-weight="700" fill="#102a43">⑤ Reconnect</text>
|
||||
<line x1="180" y1="410" x2="820" y2="410" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="500" y="405" text-anchor="middle" font-size="11" fill="#bf360c">StartStream(token="TKN@2000") via metadata</text>
|
||||
|
||||
<!-- 6. Resume from 2001 -->
|
||||
<text x="40" y="450" font-size="12" font-weight="700" fill="#102a43">⑥ Resume</text>
|
||||
<line x1="820" y1="450" x2="180" y2="450" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<line x1="820" y1="480" x2="180" y2="480" stroke="#37474f" stroke-width="2" marker-end="url(#arr)"/>
|
||||
<text x="500" y="445" text-anchor="middle" font-size="11" fill="#0d47a1">Data[2001..3000] (이어서 전송)</text>
|
||||
<text x="500" y="475" text-anchor="middle" font-size="11" fill="#0d47a1">Data[3001..4000] ...</text>
|
||||
|
||||
<!-- 7. Trace continues -->
|
||||
<text x="40" y="520" font-size="12" font-weight="700" fill="#102a43">⑦ Trace</text>
|
||||
<text x="500" y="520" font-size="11" fill="#486581">단절-재접속에도 W3C traceparent가 Token에 임베드되어 trace 연속성 유지</text>
|
||||
|
||||
<!-- bottom note -->
|
||||
<text x="550" y="565" text-anchor="middle" font-size="11" font-style="italic" fill="#486581">구현: gRPC ClientInterceptor에서 Resume Token을 Metadata 헤더에 자동 주입·추출</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 460" font-family="Helvetica, Arial, sans-serif">
|
||||
<text x="500" y="30" text-anchor="middle" font-size="18" font-weight="700" fill="#102a43">gRPC vs REST 정량 비교 — 엣지 AIoT 무선 구간</text>
|
||||
<text x="500" y="52" text-anchor="middle" font-size="12" fill="#486581">예시적 추정치 (Illustrative Estimates). 페이로드 복잡도·라이브러리·런타임에 따라 변동</text>
|
||||
|
||||
<!-- Left chart: Payload size -->
|
||||
<g>
|
||||
<text x="60" y="100" font-size="14" font-weight="700" fill="#102a43">① 페이로드 크기 (단일 메시지)</text>
|
||||
<text x="60" y="120" font-size="11" fill="#486581">작을수록 무선 대역폭 절약</text>
|
||||
|
||||
<rect x="60" y="140" width="180" height="36" fill="#1976d2"/>
|
||||
<text x="250" y="163" font-size="12" font-weight="600" fill="#102a43">JSON 450 B (100%)</text>
|
||||
|
||||
<rect x="60" y="190" width="37" height="36" fill="#00838f"/>
|
||||
<text x="107" y="213" font-size="12" font-weight="600" fill="#102a43">Protobuf 92 B (20%)</text>
|
||||
<text x="250" y="213" font-size="11" fill="#00838f" font-weight="600">▼ 80% 대역폭 절감</text>
|
||||
|
||||
<line x1="60" y1="245" x2="500" y2="245" stroke="#9e9e9e" stroke-width="1"/>
|
||||
<text x="60" y="265" font-size="10" fill="#486581">0 B</text>
|
||||
<text x="500" y="265" font-size="10" fill="#486581" text-anchor="end">500 B</text>
|
||||
</g>
|
||||
|
||||
<!-- Right chart: CPU parsing -->
|
||||
<g>
|
||||
<text x="560" y="100" font-size="14" font-weight="700" fill="#102a43">② 10,000 메시지 파싱 CPU</text>
|
||||
<text x="560" y="120" font-size="11" fill="#486581">짧을수록 ms 단위 핑퐁 유리</text>
|
||||
|
||||
<rect x="560" y="140" width="380" height="36" fill="#1976d2"/>
|
||||
<text x="950" y="163" text-anchor="end" font-size="12" font-weight="600" fill="#fff">JSON ~500 ms (100%)</text>
|
||||
|
||||
<rect x="560" y="190" width="34" height="36" fill="#00838f"/>
|
||||
<text x="604" y="213" font-size="12" font-weight="600" fill="#102a43">Protobuf ~45 ms (9%)</text>
|
||||
<text x="950" y="213" text-anchor="end" font-size="11" fill="#00838f" font-weight="600">▼ ×11 CPU 효율</text>
|
||||
|
||||
<line x1="560" y1="245" x2="950" y2="245" stroke="#9e9e9e" stroke-width="1"/>
|
||||
<text x="560" y="265" font-size="10" fill="#486581">0 ms</text>
|
||||
<text x="950" y="265" font-size="10" fill="#486581" text-anchor="end">500 ms</text>
|
||||
</g>
|
||||
|
||||
<!-- Implication panel -->
|
||||
<rect x="60" y="300" width="890" height="130" rx="8" fill="#f1f8ff" stroke="#1976d2" stroke-width="1.5"/>
|
||||
<text x="80" y="328" font-size="13" font-weight="700" fill="#0d47a1">엣지 AIoT 환경에서의 함의 (Implications)</text>
|
||||
<g font-size="11" fill="#102a43">
|
||||
<text x="80" y="350">▸ <tspan font-weight="600">무선 구간 비용·지연 절감</tspan>: LoRa·BLE·저전력 Wi-Fi 구간에서 페이로드 80% 감소는 배터리 수명·전력 예산에 직결</text>
|
||||
<text x="80" y="370">▸ <tspan font-weight="600">ms 단위 핑퐁 누적 해소</tspan>: 사례 ① AGV 합의처럼 초당 수십~수백 회의 RPC가 필요한 환경에서 ×11 CPU 효율은 필수</text>
|
||||
<text x="80" y="390">▸ <tspan font-weight="600">단, 임베디드 제약</tspan>: 8-bit MCU·저전력 디바이스는 Protobuf 라이브러리 자체가 부담 → gRPC-Lite/nanopb 또는 T2 변환 게이트웨이 사용</text>
|
||||
<text x="80" y="410">▸ <tspan font-weight="600">타입 안전성</tspan>: Protobuf의 컴파일 단계 검증은 컴파일-배포 주기가 긴 임베디드에서도 빌드-시-에러를 보장</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 618 KiB |
|
After Width: | Height: | Size: 439 KiB |
|
After Width: | Height: | Size: 614 KiB |