The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.
Follows the import procedure in README.md.
source/ the originating repository verbatim — 78 documents, 28 SVGs,
8 manifests, plus .source-revision recording the commit
final/ the SSOT
document.md 729 lines written from the 29 experiment documents, not
concatenated: what was predicted, what was measured, and
where the measurement itself was wrong
evidence/raw 125 outputs, flattened to <experiment>__<file> because
the originals collided (01-baseline.txt appeared three
times) and the audit only globs the top level
evidence/meta one per raw file; command and exitCode are null and the
README says why rather than inventing them
evidence/browser 22 captures
assets/ three diagrams through techviz
.techviz/ their VizSpecs
A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.
Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.
verify-pipeline.py passes. audit-records.py reports no issues.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
755 lines
17 KiB
Plaintext
755 lines
17 KiB
Plaintext
{
|
|
"type": "excalidraw",
|
|
"version": 2,
|
|
"source": "techviz-harness",
|
|
"elements": [
|
|
{
|
|
"id": "edge-client-store",
|
|
"type": "arrow",
|
|
"x": 568.0,
|
|
"y": 264.5,
|
|
"width": 160.0,
|
|
"height": 13.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": null,
|
|
"seed": 376014802,
|
|
"version": 1,
|
|
"versionNonce": 705557696,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [
|
|
[
|
|
0.0,
|
|
0.0
|
|
],
|
|
[
|
|
80.0,
|
|
0.0
|
|
],
|
|
[
|
|
80.0,
|
|
13.0
|
|
],
|
|
[
|
|
160.0,
|
|
13.0
|
|
]
|
|
],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": {
|
|
"elementId": "node-authorized-client",
|
|
"focus": 0,
|
|
"gap": 4
|
|
},
|
|
"endBinding": {
|
|
"elementId": "node-postgres",
|
|
"focus": 0,
|
|
"gap": 4
|
|
},
|
|
"startArrowhead": null,
|
|
"endArrowhead": "arrow",
|
|
"elbowed": true
|
|
},
|
|
{
|
|
"id": "edge-label-client-store",
|
|
"type": "text",
|
|
"x": 627.0,
|
|
"y": 259.0,
|
|
"width": 90,
|
|
"height": 24,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 1,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 1256161226,
|
|
"version": 1,
|
|
"versionNonce": 1896155258,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"fontSize": 13,
|
|
"fontFamily": 5,
|
|
"text": "저장",
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "저장",
|
|
"autoResize": true,
|
|
"lineHeight": 1.25
|
|
},
|
|
{
|
|
"id": "edge-lookup-client",
|
|
"type": "arrow",
|
|
"x": 220.0,
|
|
"y": 202.0,
|
|
"width": 160.0,
|
|
"height": 62.5,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": null,
|
|
"seed": 1699394798,
|
|
"version": 1,
|
|
"versionNonce": 79091282,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [
|
|
[
|
|
0.0,
|
|
0.0
|
|
],
|
|
[
|
|
80.0,
|
|
0.0
|
|
],
|
|
[
|
|
80.0,
|
|
62.5
|
|
],
|
|
[
|
|
160.0,
|
|
62.5
|
|
]
|
|
],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": {
|
|
"elementId": "node-request",
|
|
"focus": 0,
|
|
"gap": 4
|
|
},
|
|
"endBinding": {
|
|
"elementId": "node-authorized-client",
|
|
"focus": 0,
|
|
"gap": 4
|
|
},
|
|
"startArrowhead": null,
|
|
"endArrowhead": "arrow",
|
|
"elbowed": true
|
|
},
|
|
{
|
|
"id": "edge-label-lookup-client",
|
|
"type": "text",
|
|
"x": 256.0,
|
|
"y": 221.25,
|
|
"width": 136,
|
|
"height": 24,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 1,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 1504789250,
|
|
"version": 1,
|
|
"versionNonce": 806223247,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"fontSize": 13,
|
|
"fontFamily": 5,
|
|
"text": "principal 이름으로 조회",
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "principal 이름으로 조회",
|
|
"autoResize": true,
|
|
"lineHeight": 1.25
|
|
},
|
|
{
|
|
"id": "edge-lookup-session",
|
|
"type": "arrow",
|
|
"x": 220.0,
|
|
"y": 121.5,
|
|
"width": 170.5,
|
|
"height": 62.5,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": null,
|
|
"seed": 228157207,
|
|
"version": 1,
|
|
"versionNonce": 1803550816,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [
|
|
[
|
|
0.0,
|
|
62.5
|
|
],
|
|
[
|
|
85.25,
|
|
62.5
|
|
],
|
|
[
|
|
85.25,
|
|
0.0
|
|
],
|
|
[
|
|
170.5,
|
|
0.0
|
|
]
|
|
],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": {
|
|
"elementId": "node-request",
|
|
"focus": 0,
|
|
"gap": 4
|
|
},
|
|
"endBinding": {
|
|
"elementId": "node-app-session",
|
|
"focus": 0,
|
|
"gap": 4
|
|
},
|
|
"startArrowhead": null,
|
|
"endArrowhead": "arrow",
|
|
"elbowed": true
|
|
},
|
|
{
|
|
"id": "edge-label-lookup-session",
|
|
"type": "text",
|
|
"x": 284.25,
|
|
"y": 140.75,
|
|
"width": 90,
|
|
"height": 24,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 1,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 1022718620,
|
|
"version": 1,
|
|
"versionNonce": 1009213693,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"fontSize": 13,
|
|
"fontFamily": 5,
|
|
"text": "세션 id 로 조회",
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "세션 id 로 조회",
|
|
"autoResize": true,
|
|
"lineHeight": 1.25
|
|
},
|
|
{
|
|
"id": "edge-session-store",
|
|
"type": "arrow",
|
|
"x": 557.5,
|
|
"y": 108.5,
|
|
"width": 177.5,
|
|
"height": 13.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": null,
|
|
"seed": 1420190934,
|
|
"version": 1,
|
|
"versionNonce": 759421815,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"points": [
|
|
[
|
|
0.0,
|
|
13.0
|
|
],
|
|
[
|
|
88.75,
|
|
13.0
|
|
],
|
|
[
|
|
88.75,
|
|
0.0
|
|
],
|
|
[
|
|
177.5,
|
|
0.0
|
|
]
|
|
],
|
|
"lastCommittedPoint": null,
|
|
"startBinding": {
|
|
"elementId": "node-app-session",
|
|
"focus": 0,
|
|
"gap": 4
|
|
},
|
|
"endBinding": {
|
|
"elementId": "node-redis",
|
|
"focus": 0,
|
|
"gap": 4
|
|
},
|
|
"startArrowhead": null,
|
|
"endArrowhead": "arrow",
|
|
"elbowed": true
|
|
},
|
|
{
|
|
"id": "edge-label-session-store",
|
|
"type": "text",
|
|
"x": 625.25,
|
|
"y": 103.0,
|
|
"width": 90,
|
|
"height": 24,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 1,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 1018479709,
|
|
"version": 1,
|
|
"versionNonce": 1687570089,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"fontSize": 13,
|
|
"fontFamily": 5,
|
|
"text": "저장",
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "저장",
|
|
"autoResize": true,
|
|
"lineHeight": 1.25
|
|
},
|
|
{
|
|
"id": "node-request",
|
|
"type": "rectangle",
|
|
"x": 70.0,
|
|
"y": 151.0,
|
|
"width": 150.0,
|
|
"height": 84.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#ffffff",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "dashed",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 383223514,
|
|
"version": 1,
|
|
"versionNonce": 417388610,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "node-label-request",
|
|
"type": "text",
|
|
"x": 80.0,
|
|
"y": 161.0,
|
|
"width": 130.0,
|
|
"height": 64.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 1,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 1089093729,
|
|
"version": 1,
|
|
"versionNonce": 909637075,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"fontSize": 15,
|
|
"fontFamily": 5,
|
|
"text": "브라우저 요청\nJSESSIONID",
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "브라우저 요청\nJSESSIONID",
|
|
"autoResize": true,
|
|
"lineHeight": 1.25
|
|
},
|
|
{
|
|
"id": "node-app-session",
|
|
"type": "rectangle",
|
|
"x": 390.5,
|
|
"y": 86.0,
|
|
"width": 167.0,
|
|
"height": 71.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#ffffff",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 1710553737,
|
|
"version": 1,
|
|
"versionNonce": 1839332537,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "node-label-app-session",
|
|
"type": "text",
|
|
"x": 400.5,
|
|
"y": 96.0,
|
|
"width": 147.0,
|
|
"height": 51.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 1,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 573778378,
|
|
"version": 1,
|
|
"versionNonce": 1579160282,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"fontSize": 15,
|
|
"fontFamily": 5,
|
|
"text": "Application Session\n조회 키: 세션 id",
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "Application Session\n조회 키: 세션 id",
|
|
"autoResize": true,
|
|
"lineHeight": 1.25
|
|
},
|
|
{
|
|
"id": "node-authorized-client",
|
|
"type": "rectangle",
|
|
"x": 380.0,
|
|
"y": 229.0,
|
|
"width": 188.0,
|
|
"height": 71.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#ffffff",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 531288634,
|
|
"version": 1,
|
|
"versionNonce": 301523243,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "node-label-authorized-client",
|
|
"type": "text",
|
|
"x": 390.0,
|
|
"y": 239.0,
|
|
"width": 168.0,
|
|
"height": 51.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 1,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 75370592,
|
|
"version": 1,
|
|
"versionNonce": 980967547,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"fontSize": 15,
|
|
"fontFamily": 5,
|
|
"text": "OAuth2AuthorizedClient\n조회 키: principal 이름",
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "OAuth2AuthorizedClient\n조회 키: principal 이름",
|
|
"autoResize": true,
|
|
"lineHeight": 1.25
|
|
},
|
|
{
|
|
"id": "node-redis",
|
|
"type": "rectangle",
|
|
"x": 735.0,
|
|
"y": 60.0,
|
|
"width": 251.0,
|
|
"height": 97.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#e7f5ff",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 518178690,
|
|
"version": 1,
|
|
"versionNonce": 1422748266,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "node-label-redis",
|
|
"type": "text",
|
|
"x": 745.0,
|
|
"y": 70.0,
|
|
"width": 231.0,
|
|
"height": 77.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 1,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 1745522512,
|
|
"version": 1,
|
|
"versionNonce": 1421486581,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"fontSize": 15,
|
|
"fontFamily": 5,
|
|
"text": "Redis\nSPRING_SESSION_STORE_TYPE=redis",
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "Redis\nSPRING_SESSION_STORE_TYPE=redis",
|
|
"autoResize": true,
|
|
"lineHeight": 1.25
|
|
},
|
|
{
|
|
"id": "node-postgres",
|
|
"type": "rectangle",
|
|
"x": 728.0,
|
|
"y": 229.0,
|
|
"width": 265.0,
|
|
"height": 97.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "#e7f5ff",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 2,
|
|
"strokeStyle": "solid",
|
|
"roughness": 1,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 1035759464,
|
|
"version": 1,
|
|
"versionNonce": 1511157596,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": "node-label-postgres",
|
|
"type": "text",
|
|
"x": 738.0,
|
|
"y": 239.0,
|
|
"width": 245.0,
|
|
"height": 77.0,
|
|
"angle": 0,
|
|
"strokeColor": "#1e1e1e",
|
|
"backgroundColor": "transparent",
|
|
"fillStyle": "solid",
|
|
"strokeWidth": 1,
|
|
"strokeStyle": "solid",
|
|
"roughness": 0,
|
|
"opacity": 100,
|
|
"groupIds": [],
|
|
"frameId": null,
|
|
"index": null,
|
|
"roundness": {
|
|
"type": 3
|
|
},
|
|
"seed": 1404040862,
|
|
"version": 1,
|
|
"versionNonce": 1598470501,
|
|
"isDeleted": false,
|
|
"boundElements": [],
|
|
"updated": 0,
|
|
"link": null,
|
|
"locked": false,
|
|
"fontSize": 15,
|
|
"fontFamily": 5,
|
|
"text": "PostgreSQL\nJdbcOAuth2AuthorizedClientService",
|
|
"textAlign": "center",
|
|
"verticalAlign": "middle",
|
|
"containerId": null,
|
|
"originalText": "PostgreSQL\nJdbcOAuth2AuthorizedClientService",
|
|
"autoResize": true,
|
|
"lineHeight": 1.25
|
|
}
|
|
],
|
|
"appState": {
|
|
"gridSize": 10,
|
|
"viewBackgroundColor": "#ffffff",
|
|
"currentItemFontFamily": 5
|
|
},
|
|
"files": {}
|
|
}
|