설계 개편

This commit is contained in:
DongHyeonka
2026-07-24 16:31:12 +09:00
parent f43e909162
commit 8daa568746
70 changed files with 6554 additions and 956 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1310" height="515" viewBox="0 0 1310 515" role="img" aria-labelledby="diagram-title diagram-description">
<title id="diagram-title">resource-controller runtime fixture</title>
<desc id="diagram-description">This fixture validates the node roles, edges, and layout rules of the resource-controller profile.</desc>
<metadata>{&quot;techviz&quot;:{&quot;spec_version&quot;:&quot;1.1&quot;,&quot;id&quot;:&quot;resource-controller&quot;,&quot;profile&quot;:&quot;resource-controller&quot;},&quot;source_context&quot;:{&quot;document&quot;:&quot;examples/runtime-profiles/fixture.md&quot;,&quot;document_sha256&quot;:&quot;0000000000000000000000000000000000000000000000000000000000000000&quot;,&quot;anchor&quot;:{&quot;kind&quot;:&quot;line&quot;,&quot;value&quot;:1,&quot;line&quot;:1}},&quot;evidence_policy&quot;:&quot;Each factual element cites source lines or is marked assumption.&quot;,&quot;diagram_only&quot;:true}</metadata>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
<style>
:root { color-scheme: light; }
text { font-family: Inter, Pretendard, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #111827; }
.canvas { fill: #ffffff; }
.group-box { fill: #ffffff; stroke: #9ca3af; stroke-width: 1.4; stroke-dasharray: 7 5; }
.group-label-bg { fill: #ffffff; }
.group-label { font-size: 13px; font-weight: 650; fill: #374151; }
.edge { fill: none; stroke: #374151; stroke-width: 1.8; stroke-linejoin: round; stroke-linecap: round; marker-end: url(#arrow); }
.edge.style-dashed, .edge.semantic-dashed, .edge.assumption { stroke-dasharray: 7 5; }
.edge.style-dotted { stroke-dasharray: 2 5; }
.edge.emphasis-primary { stroke: #2563eb; stroke-width: 2.2; }
.edge.emphasis-muted { stroke: #9ca3af; }
.edge.emphasis-warning, .edge.kind-failure, .edge.kind-error { stroke: #dc2626; stroke-width: 2.2; }
.edge-label-bg { fill: #ffffff; }
.edge-label { font-size: 12px; font-weight: 560; text-anchor: middle; }
.node-shape { fill: #ffffff; stroke: #4b5563; stroke-width: 1.7; }
.node-shape.emphasis-primary { stroke: #2563eb; stroke-width: 2.2; }
.node-shape.emphasis-muted { stroke: #9ca3af; fill: #f9fafb; }
.node-shape.emphasis-warning { stroke: #d97706; stroke-width: 2; fill: #fffdf5; }
.node-shape.kind-database, .node-shape.kind-datastore, .node-shape.kind-storage { fill: #f8fafc; }
.node-shape.kind-queue, .node-shape.kind-event, .node-shape.kind-topic { fill: #fafafa; }
.node-shape.assumption { stroke-dasharray: 4 4; }
.storage-bottom, .controller-divider { fill: none; stroke: #4b5563; stroke-width: 1.4; }
.controller-led { fill: #4b5563; }
.actor-symbol { fill: none; stroke: #4b5563; stroke-width: 1.8; stroke-linecap: round; }
.actor-symbol.emphasis-primary { stroke: #2563eb; stroke-width: 2.2; }
.node-label { font-size: 14px; font-weight: 650; text-anchor: middle; }
.node-role { font-size: 10px; letter-spacing: 0.04em; text-anchor: middle; fill: #6b7280; }
.node-detail-divider { stroke: #d1d5db; stroke-width: 1; }
.node-detail { font-size: 11px; fill: #374151; }
.assumption-badge { font-size: 9px; font-weight: 700; fill: #92400e; }
.failure-mark { stroke: #dc2626; stroke-width: 4; stroke-linecap: round; }
.lifeline { stroke: #9ca3af; stroke-width: 1.2; stroke-dasharray: 5 5; }
.timeline-axis { stroke: #374151; stroke-width: 1.8; marker-end: url(#arrow); }
.timeline-stem { stroke: #6b7280; stroke-width: 1.3; }
.timeline-marker { fill: #ffffff; stroke: #374151; stroke-width: 1.7; }
.timeline-marker.primary { fill: #2563eb; stroke: #2563eb; }
.timeline-marker.warning { fill: #dc2626; stroke: #dc2626; }
.timeline-label { font-size: 13px; font-weight: 650; text-anchor: middle; }
.timeline-detail { font-size: 11px; fill: #4b5563; text-anchor: middle; }
</style>
</defs>
<rect class="canvas" width="1310" height="515" />
<polyline class="edge kind-request style-solid emphasis-normal" points="1265.0,170.0 1150.0,170.0 1150.0,351.0 1035.0,351.0" data-evidence="1-1" />
<rect class="edge-label-bg" x="1131.5" y="246.5" width="85.0" height="22" rx="3" />
<text class="edge-label" x="1174.0" y="261.5">DB command</text>
<polyline class="edge kind-request style-solid emphasis-normal" points="690.0,424.0 720.0,424.0 720.0,199.0 695.0,199.0 695.0,305.0 725.0,305.0" data-evidence="1-1" />
<rect class="edge-label-bg" x="704.9" y="232.0" width="78.3" height="22" rx="3" />
<text class="edge-label" x="744.0" y="247.0">create ×3</text>
<polyline class="edge kind-request style-solid emphasis-normal" points="180.0,222.0 210.0,222.0 210.0,59.0 195.0,59.0 195.0,172.5 225.0,172.5" data-evidence="1-1" />
<rect class="edge-label-bg" x="204.9" y="62.2" width="58.2" height="22" rx="3" />
<text class="edge-label" x="234.0" y="77.2">create</text>
<polyline class="edge kind-request style-solid emphasis-normal" points="690.0,406.0 720.0,406.0 720.0,29.0 695.0,29.0 695.0,135.0 725.0,135.0" data-evidence="1-1" />
<rect class="edge-label-bg" x="704.9" y="138.0" width="78.3" height="22" rx="3" />
<text class="edge-label" x="744.0" y="153.0">create ×3</text>
<polyline class="edge kind-request style-solid emphasis-normal" points="970.0,305.0 1002.5,305.0 1002.5,369.0 1035.0,369.0" data-evidence="1-1" />
<rect class="edge-label-bg" x="987.4" y="323.0" width="78.3" height="22" rx="3" />
<text class="edge-label" x="1026.5" y="338.0">reconcile</text>
<polyline class="edge kind-request style-solid emphasis-normal" points="970.0,135.0 1002.5,135.0 1002.5,170.0 1035.0,170.0" data-evidence="1-1" />
<rect class="edge-label-bg" x="987.4" y="138.5" width="78.3" height="22" rx="3" />
<text class="edge-label" x="1026.5" y="153.5">reconcile</text>
<polyline class="edge kind-request style-solid emphasis-normal" points="485.0,172.5 515.0,172.5 515.0,59.0 445.0,59.0 445.0,415.0 475.0,415.0" data-evidence="1-1" />
<rect class="edge-label-bg" x="443.2" y="131.2" width="51.5" height="22" rx="3" />
<text class="edge-label" x="469.0" y="146.2">watch</text>
<g id="node-user">
<g class="actor-symbol emphasis-normal" data-evidence="1-1"><circle cx="107.5" cy="200.0" r="11.0" /><line x1="107.5" y1="216.0" x2="107.5" y2="235.0" /><line x1="89.5" y1="226.0" x2="125.5" y2="226.0" /><line x1="107.5" y1="235.0" x2="92.5" y2="252.0" /><line x1="107.5" y1="235.0" x2="122.5" y2="252.0" /></g>
<text class="node-label" x="107.5" y="257.0">User</text>
</g>
<g id="node-db-service">
<path class="node-shape kind-resource emphasis-normal role-resource-spec" data-evidence="1-1" d="M 225.0 95.0 H 451.0 L 485.0 129.0 V 250.0 H 225.0 Z M 451.0 95.0 V 129.0 H 485.0" />
<text class="node-role" x="355.0" y="114.0">«resource-spec»</text>
<text class="node-label" x="355.0" y="141.0">DB Service</text>
<line class="node-detail-divider" x1="239.0" y1="162.0" x2="471.0" y2="162.0" />
<text class="node-detail" x="241.0" y="179.0">vmCount: 3</text>
<text class="node-detail" x="241.0" y="195.0">vCPU: 2</text>
<text class="node-detail" x="241.0" y="211.0">memory: 8GB</text>
<text class="node-detail" x="241.0" y="227.0">maxclient: 3000</text>
</g>
<g id="node-manager">
<rect class="node-shape kind-controller emphasis-primary role-controller" data-evidence="1-1" x="475.0" y="360.0" width="215.0" height="110.0" rx="5" /><line class="controller-divider" x1="475.0" y1="397.4" x2="690.0" y2="397.4" /><line class="controller-divider" x1="475.0" y1="433.7" x2="690.0" y2="433.7" /><rect class="controller-led" x="488.0" y="374.7" width="8" height="8" rx="1" /><rect class="controller-led" x="488.0" y="411.0" width="8" height="8" rx="1" /><rect class="controller-led" x="488.0" y="447.3" width="8" height="8" rx="1" />
<text class="node-role" x="582.5" y="379.0">«controller»</text>
<text class="node-label" x="582.5" y="413.0">DBaaS Manager</text>
</g>
<g id="node-vm-cr">
<path class="node-shape kind-resource emphasis-normal role-custom-resource" data-evidence="1-1" d="M 725.0 65.0 H 936.0 L 970.0 99.0 V 205.0 H 725.0 Z M 936.0 65.0 V 99.0 H 970.0" />
<text class="node-role" x="847.5" y="84.0">«custom-resource»</text>
<text class="node-label" x="847.5" y="117.0">VM Custom Resource ×3</text>
<line class="node-detail-divider" x1="739.0" y1="138.0" x2="956.0" y2="138.0" />
<text class="node-detail" x="741.0" y="155.0">2 vCPU</text>
<text class="node-detail" x="741.0" y="171.0">8GB RAM</text>
</g>
<g id="node-db-cr">
<path class="node-shape kind-resource emphasis-normal role-custom-resource" data-evidence="1-1" d="M 725.0 235.0 H 936.0 L 970.0 269.0 V 375.0 H 725.0 Z M 936.0 235.0 V 269.0 H 970.0" />
<text class="node-role" x="847.5" y="254.0">«custom-resource»</text>
<text class="node-label" x="847.5" y="287.0">DB Instance CR ×3</text>
<line class="node-detail-divider" x1="739.0" y1="308.0" x2="956.0" y2="308.0" />
<text class="node-detail" x="741.0" y="325.0">maxclient: 3000</text>
<text class="node-detail" x="741.0" y="341.0">timeout: 5s</text>
</g>
<g id="node-vm">
<rect class="node-shape kind-runtime emphasis-normal role-runtime-resource" data-evidence="1-1" x="1035.0" y="95.0" width="230.0" height="150.0" rx="7" />
<text class="node-role" x="1150.0" y="114.0">«runtime-resource»</text>
<text class="node-label" x="1150.0" y="160.0">VM + dbaas-agent</text>
<line class="node-detail-divider" x1="1049.0" y1="181.0" x2="1251.0" y2="181.0" />
<text class="node-detail" x="1051.0" y="198.0">create VM</text>
</g>
<g id="node-db">
<rect class="node-shape kind-database emphasis-normal role-runtime-resource" data-evidence="1-1" x="1035.0" y="298.0" width="230.0" height="124.0" /><ellipse class="node-shape kind-database emphasis-normal role-runtime-resource" cx="1150.0" cy="298.0" rx="115.0" ry="13.0" /><path class="storage-bottom" d="M 1035.0 422.0 A 115.0 13.0 0 0 0 1265.0 422.0" />
<text class="node-role" x="1150.0" y="304.0">«runtime-resource»</text>
<text class="node-label" x="1150.0" y="350.0">DB</text>
<line class="node-detail-divider" x1="1049.0" y1="371.0" x2="1251.0" y2="371.0" />
<text class="node-detail" x="1051.0" y="388.0">DB command</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

@@ -0,0 +1,257 @@
{
"version": "1.1",
"id": "resource-controller",
"title": "resource-controller runtime fixture",
"question": "Does the resource-controller logical composition render correctly?",
"type": "architecture",
"direction": "LR",
"audience": [
"renderer maintainer"
],
"summary": "Executable resource-controller fixture.",
"alt": "Executable technical diagram fixture for the resource-controller composition profile.",
"long_description": "This fixture validates the node roles, edges, and layout rules of the resource-controller profile.",
"source_context": {
"document": "examples/runtime-profiles/fixture.md",
"document_sha256": "0000000000000000000000000000000000000000000000000000000000000000",
"anchor": {
"kind": "line",
"value": 1,
"line": 1
}
},
"composition": {
"profile": "resource-controller",
"diagram_only": true,
"reference_ids": [
"dbaas-controller"
],
"rationale": "Runtime regression fixture for resource-controller.",
"focus_node": "manager"
},
"groups": [],
"nodes": [
{
"id": "user",
"label": "User",
"kind": "actor",
"role": "actor",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false,
"shape": "actor"
},
{
"id": "db-service",
"label": "DB Service",
"kind": "resource",
"role": "resource-spec",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false,
"shape": "document",
"details": [
"vmCount: 3",
"vCPU: 2",
"memory: 8GB",
"maxclient: 3000"
]
},
{
"id": "manager",
"label": "DBaaS Manager",
"kind": "controller",
"role": "controller",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false,
"shape": "controller",
"emphasis": "primary"
},
{
"id": "vm-cr",
"label": "VM Custom Resource ×3",
"kind": "resource",
"role": "custom-resource",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false,
"shape": "document",
"details": [
"2 vCPU",
"8GB RAM"
]
},
{
"id": "db-cr",
"label": "DB Instance CR ×3",
"kind": "resource",
"role": "custom-resource",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false,
"shape": "document",
"details": [
"maxclient: 3000",
"timeout: 5s"
]
},
{
"id": "vm",
"label": "VM + dbaas-agent",
"kind": "runtime",
"role": "runtime-resource",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false,
"details": [
"create VM"
]
},
{
"id": "db",
"label": "DB",
"kind": "database",
"role": "runtime-resource",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false,
"shape": "database",
"details": [
"DB command"
]
}
],
"edges": [
{
"id": "create-spec",
"from": "user",
"to": "db-service",
"label": "create",
"kind": "request",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false
},
{
"id": "watch-spec",
"from": "db-service",
"to": "manager",
"label": "watch",
"kind": "request",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false
},
{
"id": "create-vm-cr",
"from": "manager",
"to": "vm-cr",
"label": "create ×3",
"kind": "request",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false
},
{
"id": "create-db-cr",
"from": "manager",
"to": "db-cr",
"label": "create ×3",
"kind": "request",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false
},
{
"id": "materialize-vm",
"from": "vm-cr",
"to": "vm",
"label": "reconcile",
"kind": "request",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false
},
{
"id": "materialize-db",
"from": "db-cr",
"to": "db",
"label": "reconcile",
"kind": "request",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false
},
{
"id": "agent-command",
"from": "vm",
"to": "db",
"label": "DB command",
"kind": "request",
"evidence": [
{
"start_line": 1,
"end_line": 1
}
],
"assumption": false
}
],
"legend": [],
"metadata": {
"fixture": true
}
}