This commit is contained in:
2026-06-25 11:46:39 +09:00
commit 06a95a6d5b
56 changed files with 10023 additions and 0 deletions
@@ -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