refactor: 문서 개선 중

This commit is contained in:
donghyeon-ka
2026-09-21 14:30:55 +09:00
parent c93cdea150
commit 805a18f486
1497 changed files with 525837 additions and 59152 deletions
@@ -10,12 +10,12 @@ Keycloak 26 은 persistent-user-sessions 가 기본값이라 세션을 PostgreSQ
## Elements and evidence
- **persistent-user-sessions 켜짐** (component): Keycloak 26 기본값. Evidence: L62L66.
- **persistent-user-sessions 꺼짐** (component): 24 이전 방식. Evidence: L62L66.
- **PostgreSQL 의 세션 행** (datastore): 노드가 바뀌어도 남는다. 7800 과 무관하다. Evidence: L67L73.
- **노드 메모리의 세션** (component): 노드가 죽거나 분단되면 사라진다. Evidence: L67L73.
- **persistent-user-sessions 켜짐** (component): Keycloak 26 기본값. Evidence: L92L96.
- **persistent-user-sessions 꺼짐** (component): 24 이전 방식. Evidence: L92L96.
- **PostgreSQL 의 세션 행** (datastore): 노드가 바뀌어도 남는다. 7800 과 무관하다. Evidence: L97L103.
- **노드 메모리의 세션** (component): 노드가 죽거나 분단되면 사라진다. Evidence: L97L103.
## Relationships
- **persistent-user-sessions 켜짐 → PostgreSQL 의 세션 행:** 세션 기록. Evidence: L62L68.
- **persistent-user-sessions 꺼짐 → 노드 메모리의 세션:** 세션 보관. Evidence: L62L68.
- **persistent-user-sessions 켜짐 → PostgreSQL 의 세션 행:** 세션 기록. Evidence: L92L97.
- **persistent-user-sessions 꺼짐 → 노드 메모리의 세션:** 세션 보관. Evidence: L92L97.
@@ -5,17 +5,17 @@
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="n_persistent" value="persistent-user-sessions 켜짐&lt;br/&gt;세션 → DB" tooltip="Keycloak 26 기본값. | Evidence: L62-L66" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxCell id="n_persistent" value="persistent-user-sessions 켜짐&lt;br/&gt;세션 → DB" tooltip="Keycloak 26 기본값. | Evidence: L92-L96" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="70.0" y="60.0" width="202.0" height="91.0" as="geometry"/>
</mxCell>
<mxCell id="n_volatile" value="persistent-user-sessions 꺼짐&lt;br/&gt;세션 → 메모리" tooltip="24 이전 방식. | Evidence: L62-L66" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxCell id="n_volatile" value="persistent-user-sessions 꺼짐&lt;br/&gt;세션 → 메모리" tooltip="24 이전 방식. | Evidence: L92-L96" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxGeometry x="70.0" y="223.0" width="202.0" height="91.0" as="geometry"/>
</mxCell>
<mxCell id="n_db-session" value="PostgreSQL 의 세션 행&lt;br/&gt;OFFLINE_USER_SESSION" tooltip="노드가 바뀌어도 남는다. 7800 과 무관하다. | Evidence: L67-L73" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;shape=cylinder3;boundedLbl=1;backgroundOutline=1;fillColor=#eef6fb;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="432.0" y="67.0" width="174.0" height="97.0" as="geometry"/>
<mxCell id="n_db-session" value="PostgreSQL 의 세션 행&lt;br/&gt;OFFLINE_USER_SESSION" tooltip="노드가 바뀌어도 남는다. 7800 과 무관하다. | Evidence: L97-L103" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;shape=cylinder3;boundedLbl=1;backgroundOutline=1;fillColor=#eef6fb;strokeColor=#2563eb;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="432.0" y="80.0" width="174.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="n_memory-session" value="노드 메모리의 세션&lt;br/&gt;Infinispan 복제에 의존" tooltip="노드가 죽거나 분단되면 사라진다. | Evidence: L67-L73" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxGeometry x="442.5" y="236.0" width="153.0" height="71.0" as="geometry"/>
<mxCell id="n_memory-session" value="노드 메모리의 세션&lt;br/&gt;Infinispan 복제에 의존" tooltip="노드가 죽거나 분단되면 사라진다. | Evidence: L97-L103" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxGeometry x="442.5" y="223.0" width="153.0" height="71.0" as="geometry"/>
</mxCell>
<mxCell id="e_p-to-db" value="세션 기록" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_persistent" target="n_db-session">
<mxGeometry relative="1" as="geometry">
@@ -24,7 +24,7 @@
</mxCell>
<mxCell id="e_v-to-mem" value="세션 보관" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=2;endArrow=block;endFill=1;" edge="1" parent="1" source="n_volatile" target="n_memory-session">
<mxGeometry relative="1" as="geometry">
<mxPoint x="381.2" y="270.0" as="offset"/>
<mxPoint x="381.2" y="263.5" as="offset"/>
</mxGeometry>
</mxCell>
</root>
@@ -106,9 +106,9 @@
"id": "edge-v-to-mem",
"type": "arrow",
"x": 272.0,
"y": 268.5,
"y": 258.5,
"width": 170.5,
"height": 3.0,
"height": 10.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
@@ -132,19 +132,19 @@
"points": [
[
0.0,
0.0
10.0
],
[
85.25,
10.0
],
[
85.25,
0.0
],
[
85.25,
3.0
],
[
170.5,
3.0
0.0
]
],
"lastCommittedPoint": null,
@@ -166,7 +166,7 @@
"id": "edge-label-v-to-mem",
"type": "text",
"x": 336.25,
"y": 258.0,
"y": 251.5,
"width": 90,
"height": 24,
"angle": 0,
@@ -343,9 +343,9 @@
"id": "node-db-session",
"type": "rectangle",
"x": 432.0,
"y": 67.0,
"y": 80.0,
"width": 174.0,
"height": 97.0,
"height": 71.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#e7f5ff",
@@ -373,9 +373,9 @@
"id": "node-label-db-session",
"type": "text",
"x": 442.0,
"y": 77.0,
"y": 90.0,
"width": 154.0,
"height": 77.0,
"height": 51.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
@@ -412,7 +412,7 @@
"id": "node-memory-session",
"type": "rectangle",
"x": 442.5,
"y": 236.0,
"y": 223.0,
"width": 153.0,
"height": 71.0,
"angle": 0,
@@ -442,7 +442,7 @@
"id": "node-label-memory-session",
"type": "text",
"x": 452.5,
"y": 246.0,
"y": 233.0,
"width": 133.0,
"height": 51.0,
"angle": 0,
@@ -2,14 +2,14 @@
"harness_version": "0.2.0",
"spec_id": "version-conditional-results",
"spec_version": "1.1",
"spec_sha256": "1c5866f8f5aade8c554b19d5aa7e35b44129b5c7bdfbf41d2fc0be2940cb68fe",
"spec_sha256": "fff77ffb4a1a3d92d4f94ccffe5e2779552ca58511d521239ccc41c05946bbca",
"source_context": {
"document": "docs/keycloak-session-store/final/document.md",
"document_sha256": "1d44cba1905544d92f1d26ae36a8deb64a3db3914d6b488fd30d6ae7f8cfbabe",
"document_sha256": "28aef96a2bbb94fbb10ade26a71238fee62a5a4d9fa6e7749ae98cfd0a65e560",
"anchor": {
"kind": "heading",
"value": "그리고 이 결론에는 버전 조건이 붙어 있었다",
"line": 64
"line": 94
}
},
"outputs": [
@@ -2,7 +2,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="680" height="359" viewBox="0 0 680 359" role="img" aria-labelledby="diagram-title diagram-description">
<title id="diagram-title">설정에 따라 갈리는 세션의 거처</title>
<desc id="diagram-description">Keycloak 26 은 persistent-user-sessions 가 기본값이라 세션을 PostgreSQL 에 쓴다. 24 이전은 메모리에 두고 Infinispan 으로 복제했다. 그래서 7800 을 끊었을 때, 롤링 재시작했을 때, DB 를 세웠을 때의 결과가 세 항목 모두 정반대로 나온다. 이 실험대의 A층 결론 전체가 이 설정 위에 서 있다.</desc>
<metadata>{&quot;techviz&quot;:{&quot;spec_version&quot;:&quot;1.1&quot;,&quot;id&quot;:&quot;version-conditional-results&quot;,&quot;profile&quot;:&quot;component-flow&quot;},&quot;source_context&quot;:{&quot;document&quot;:&quot;docs/keycloak-session-store/final/document.md&quot;,&quot;document_sha256&quot;:&quot;1d44cba1905544d92f1d26ae36a8deb64a3db3914d6b488fd30d6ae7f8cfbabe&quot;,&quot;anchor&quot;:{&quot;kind&quot;:&quot;heading&quot;,&quot;value&quot;:&quot;그리고 이 결론에는 버전 조건이 붙어 있었다&quot;,&quot;line&quot;:64}},&quot;evidence_policy&quot;:&quot;Each factual element cites source lines or is marked assumption.&quot;,&quot;diagram_only&quot;:true}</metadata>
<metadata>{&quot;techviz&quot;:{&quot;spec_version&quot;:&quot;1.1&quot;,&quot;id&quot;:&quot;version-conditional-results&quot;,&quot;profile&quot;:&quot;component-flow&quot;},&quot;source_context&quot;:{&quot;document&quot;:&quot;docs/keycloak-session-store/final/document.md&quot;,&quot;document_sha256&quot;:&quot;28aef96a2bbb94fbb10ade26a71238fee62a5a4d9fa6e7749ae98cfd0a65e560&quot;,&quot;anchor&quot;:{&quot;kind&quot;:&quot;heading&quot;,&quot;value&quot;:&quot;그리고 이 결론에는 버전 조건이 붙어 있었다&quot;,&quot;line&quot;:94}},&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" />
@@ -50,36 +50,36 @@
</style>
</defs>
<rect class="canvas" width="680" height="359" />
<polyline class="edge kind-write style-solid emphasis-normal" points="272.0,105.5 352.0,105.5 352.0,115.5 432.0,115.5" data-evidence="62-68" />
<polyline class="edge kind-write style-solid emphasis-normal" points="272.0,105.5 352.0,105.5 352.0,115.5 432.0,115.5" data-evidence="92-97" />
<rect class="edge-label-bg" x="350.2" y="96.5" width="51.5" height="22" rx="3" />
<text class="edge-label" x="376.0" y="111.5">세션 기록</text>
<polyline class="edge kind-write style-solid emphasis-normal" points="272.0,268.5 357.2,268.5 357.2,271.5 442.5,271.5" data-evidence="62-68" />
<rect class="edge-label-bg" x="355.5" y="256.0" width="51.5" height="22" rx="3" />
<text class="edge-label" x="381.2" y="271.0">세션 보관</text>
<polyline class="edge kind-write style-solid emphasis-normal" points="272.0,268.5 357.2,268.5 357.2,258.5 442.5,258.5" data-evidence="92-97" />
<rect class="edge-label-bg" x="355.5" y="249.5" width="51.5" height="22" rx="3" />
<text class="edge-label" x="381.2" y="264.5">세션 보관</text>
<g id="node-persistent">
<rect class="node-shape kind-component emphasis-primary role-source" data-evidence="62-66" x="70.0" y="60.0" width="202.0" height="91.0" rx="7" />
<rect class="node-shape kind-component emphasis-primary role-source" data-evidence="92-96" x="70.0" y="60.0" width="202.0" height="91.0" rx="7" />
<text class="node-label" x="171.0" y="87.0">persistent-user-sessions</text>
<text class="node-label" x="171.0" y="105.0">켜짐</text>
<line class="node-detail-divider" x1="84.0" y1="126.0" x2="258.0" y2="126.0" />
<text class="node-detail" x="86.0" y="143.0">세션 → DB</text>
</g>
<g id="node-volatile">
<rect class="node-shape kind-component emphasis-warning role-source" data-evidence="62-66" x="70.0" y="223.0" width="202.0" height="91.0" rx="7" />
<rect class="node-shape kind-component emphasis-warning role-source" data-evidence="92-96" x="70.0" y="223.0" width="202.0" height="91.0" rx="7" />
<text class="node-label" x="171.0" y="250.0">persistent-user-sessions</text>
<text class="node-label" x="171.0" y="268.0">꺼짐</text>
<line class="node-detail-divider" x1="84.0" y1="289.0" x2="258.0" y2="289.0" />
<text class="node-detail" x="86.0" y="306.0">세션 → 메모리</text>
</g>
<g id="node-db-session">
<rect class="node-shape kind-datastore emphasis-primary role-target" data-evidence="67-73" x="432.0" y="80.0" width="174.0" height="71.0" /><ellipse class="node-shape kind-datastore emphasis-primary role-target" cx="519.0" cy="80.0" rx="87.0" ry="13.0" /><path class="storage-bottom" d="M 432.0 151.0 A 87.0 13.0 0 0 0 606.0 151.0" />
<rect class="node-shape kind-datastore emphasis-primary role-target" data-evidence="97-103" x="432.0" y="91.8" width="174.0" height="47.3" /><ellipse class="node-shape kind-datastore emphasis-primary role-target" cx="519.0" cy="91.8" rx="87.0" ry="11.8" /><path class="storage-bottom" d="M 432.0 139.2 A 87.0 11.8 0 0 0 606.0 139.2" />
<text class="node-label" x="519.0" y="107.0">PostgreSQL 의 세션 행</text>
<line class="node-detail-divider" x1="446.0" y1="128.0" x2="592.0" y2="128.0" />
<text class="node-detail" x="448.0" y="145.0">OFFLINE_USER_SESSION</text>
</g>
<g id="node-memory-session">
<rect class="node-shape kind-component emphasis-warning role-target" data-evidence="67-73" x="442.5" y="236.0" width="153.0" height="71.0" rx="7" />
<text class="node-label" x="519.0" y="263.0">노드 메모리의 세션</text>
<line class="node-detail-divider" x1="456.5" y1="284.0" x2="581.5" y2="284.0" />
<text class="node-detail" x="458.5" y="301.0">Infinispan 복제에 의존</text>
<rect class="node-shape kind-component emphasis-warning role-target" data-evidence="97-103" x="442.5" y="223.0" width="153.0" height="71.0" rx="7" />
<text class="node-label" x="519.0" y="250.0">노드 메모리의 세션</text>
<line class="node-detail-divider" x1="456.5" y1="271.0" x2="581.5" y2="271.0" />
<text class="node-detail" x="458.5" y="288.0">Infinispan 복제에 의존</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB