From 114d21aebe9b9ea6a87d4b814ed6c6a152a57bd2 Mon Sep 17 00:00:00 2001 From: DongHyeonka Date: Fri, 4 Sep 2026 13:20:56 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20A-8=20=E2=80=94=20a=20rolling=20restart?= =?UTF-8?q?=20keeps=20every=20session=20and=20drops=20only=20the=20cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nine samples through the restart all returned 200, the refresh token issued beforehand still works, and the session count is unchanged at 151 while both caches reset to zero. The updated last_session_refresh proves the write path recovered too, not just the response code. Co-Authored-By: Claude Opus 5 --- .../console-2026-09-04T04-16-32-330Z.log | 8 + .../console-2026-09-04T04-19-58-373Z.log | 11 ++ .../page-2026-09-04T04-19-59-064Z.yml | 56 ++++++ .../01-restart-availability.txt | 17 ++ .../02-session-survival.txt | 19 ++ docs/evidence/a8-rolling-restart/README.md | 16 ++ .../a8-cache-reset-cluster-reformed.png | Bin 0 -> 83553 bytes docs/experiment-a8-rolling-restart.md | 175 ++++++++++++++++++ 8 files changed, 302 insertions(+) create mode 100644 .playwright-mcp/console-2026-09-04T04-19-58-373Z.log create mode 100644 .playwright-mcp/page-2026-09-04T04-19-59-064Z.yml create mode 100644 docs/evidence/a8-rolling-restart/01-restart-availability.txt create mode 100644 docs/evidence/a8-rolling-restart/02-session-survival.txt create mode 100644 docs/evidence/a8-rolling-restart/README.md create mode 100644 docs/evidence/a8-rolling-restart/a8-cache-reset-cluster-reformed.png create mode 100644 docs/experiment-a8-rolling-restart.md diff --git a/.playwright-mcp/console-2026-09-04T04-16-32-330Z.log b/.playwright-mcp/console-2026-09-04T04-16-32-330Z.log index 765c675..e0577d3 100644 --- a/.playwright-mcp/console-2026-09-04T04-16-32-330Z.log +++ b/.playwright-mcp/console-2026-09-04T04-16-32-330Z.log @@ -10,3 +10,11 @@ [ 52154ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 [ 67608ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 [ 86965ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 108668ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 129158ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 137544ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 152699ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 159898ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 173491ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 187925ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 197824ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 diff --git a/.playwright-mcp/console-2026-09-04T04-19-58-373Z.log b/.playwright-mcp/console-2026-09-04T04-19-58-373Z.log new file mode 100644 index 0000000..483a316 --- /dev/null +++ b/.playwright-mcp/console-2026-09-04T04-19-58-373Z.log @@ -0,0 +1,11 @@ +[ 635ms] [WARNING] is deprecated. Please include @ https://app2.hyeonworks.com/explore?schemaVersion=1&orgId=1&panes=%7B%22a%22%3A%7B%22datasource%22%3A%22PBFA97CFB590B2093%22%2C%22queries%22%3A%5B%7B%22refId%22%3A%22A%22%2C%22expr%22%3A%22vendor_statistics_approximate_entries_unique%7Bcache%3D%5C%22sessions%5C%22%7D%22%2C%22range%22%3Atrue%2C%22instant%22%3Afalse%2C%22editorMode%22%3A%22code%22%2C%22legendFormat%22%3A%22%7B%7Bpod%7D%7D%22%2C%22datasource%22%3A%7B%22type%22%3A%22prometheus%22%2C%22uid%22%3A%22PBFA97CFB590B2093%22%7D%7D%2C%7B%22refId%22%3A%22B%22%2C%22expr%22%3A%22vendor_cluster_size%22%2C%22range%22%3Atrue%2C%22instant%22%3Afalse%2C%22editorMode%22%3A%22code%22%2C%22legendFormat%22%3A%22cluster_size%20%7B%7Bpod%7D%7D%22%2C%22datasource%22%3A%7B%22type%22%3A%22prometheus%22%2C%22uid%22%3A%22PBFA97CFB590B2093%22%7D%7D%5D%2C%22range%22%3A%7B%22from%22%3A%22now-15m%22%2C%22to%22%3A%22now%22%7D%7D%7D:0 +[ 686ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 1451ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 3030ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 4308ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 5296ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 7691ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 18337ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 20184ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 32473ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 +[ 50697ms] [ERROR] WebSocket connection to 'wss://app2.hyeonworks.com/api/live/ws' failed: Error during WebSocket handshake: Unexpected response code: 400 @ https://app2.hyeonworks.com/public/build/1518.a3f1f690c084a37f01c7.js:362 diff --git a/.playwright-mcp/page-2026-09-04T04-19-59-064Z.yml b/.playwright-mcp/page-2026-09-04T04-19-59-064Z.yml new file mode 100644 index 0000000..5588751 --- /dev/null +++ b/.playwright-mcp/page-2026-09-04T04-19-59-064Z.yml @@ -0,0 +1,56 @@ +- generic [ref=f18e4]: + - link "Skip to main content" [ref=f18e5] [cursor=pointer]: + - /url: "#pageContent" + - banner [ref=f18e7]: + - generic [ref=f18e8]: + - link [ref=f18e10] [cursor=pointer]: + - /url: / + - img "Grafana" [ref=f18e11] + - generic [ref=f18e14]: + - button "Search or jump to..." [ref=f18e18] [cursor=pointer] + - generic [ref=f18e19]: ctrl+k + - generic [ref=f18e23]: + - button "New" [ref=f18e24] [cursor=pointer] + - button "Help" [ref=f18e30] [cursor=pointer] + - button "News" [ref=f18e33] [cursor=pointer] + - button "Profile" [ref=f18e36] [cursor=pointer]: + - img "User avatar" [ref=f18e37] + - generic [ref=f18e38]: + - button "Open menu" [ref=f18e40] [cursor=pointer] + - navigation "Breadcrumbs" [ref=f18e43]: + - list [ref=f18e44]: + - listitem [ref=f18e45]: + - link "Home" [ref=f18e46] [cursor=pointer]: + - /url: / + - listitem [ref=f18e50]: + - link "Explore" [ref=f18e51] [cursor=pointer]: + - /url: /explore + - listitem [ref=f18e55]: + - generic "Prometheus" [ref=f18e56] + - generic [ref=f18e57]: + - button "Show more items" [ref=f18e60] [cursor=pointer] + - button "Toggle top search bar" [ref=f18e64] [cursor=pointer] + - main [ref=f18e70]: + - generic [ref=f18e72]: + - heading "Explore" [level=1] [ref=f18e73] + - generic [ref=f18e78]: + - navigation "Explore toolbar" [ref=f18e80]: + - navigation "Search links" [ref=f18e82]: + - generic [ref=f18e83]: + - button "Content outline" [expanded] [ref=f18e85] [cursor=pointer]: + - generic [ref=f18e88]: Outline + - generic [ref=f18e93] [cursor=pointer]: + - img "Prometheus logo" [ref=f18e95] + - textbox "Select a data source" [ref=f18e96]: + - /placeholder: "" + - button "Show more items" [ref=f18e102] [cursor=pointer] + - generic [ref=f18e106]: + - button "Collapse outline" [expanded] [ref=f18e112] [cursor=pointer]: + - img "arrow-from-right" [ref=f18e113] + - generic [ref=f18e120]: + - generic [ref=f18e123]: + - button "Add query" [ref=f18e124] [cursor=pointer] + - button "Query history" [ref=f18e128] [cursor=pointer] + - button "Query inspector" [ref=f18e132] [cursor=pointer] + - generic: + - main \ No newline at end of file diff --git a/docs/evidence/a8-rolling-restart/01-restart-availability.txt b/docs/evidence/a8-rolling-restart/01-restart-availability.txt new file mode 100644 index 0000000..4584f20 --- /dev/null +++ b/docs/evidence/a8-rolling-restart/01-restart-availability.txt @@ -0,0 +1,17 @@ +=== [1] 재시작 전 로그인 — 토큰을 파드 안에 보관 === + sid = XLcgQWRiJrTkuNZcJsNeT_2j + DB 세션 수: 151 + +=== [2] 롤링 재시작 중 가용성 — 5초 간격으로 외부 진입점 확인 === +statefulset.apps/keycloak restarted +200 Waiting for partitioned roll out to finish: 0 out of 2 new pods have been updated... +Waiting for 1 pods to be ready... +Waiting for 1 pods to be ready... +Waiting for 1 pods to be ready... +200 200 200 200 Waiting for partitioned roll out to finish: 1 out of 2 new pods have been updated... +Waiting for 1 pods to be ready... +Waiting for 1 pods to be ready... +Waiting for 1 pods to be ready... +200 200 200 200 partitioned roll out complete: 2 new pods have been updated... + + (위 숫자열이 재시작 중 외부 응답 코드의 시계열) diff --git a/docs/evidence/a8-rolling-restart/02-session-survival.txt b/docs/evidence/a8-rolling-restart/02-session-survival.txt new file mode 100644 index 0000000..367869d --- /dev/null +++ b/docs/evidence/a8-rolling-restart/02-session-survival.txt @@ -0,0 +1,19 @@ +=== [3] 재시작 전 발급한 refresh token 이 아직 통하는가 === + 대상 sid: XLcgQWRiJrTkuNZcJsNeT_2j + keycloak-0 에서 refresh HTTP 200 + +=== [4] DB 에 그 세션이 남아 있는가 === + user_session_id | created_on | last_session_refresh +--------------------------+------------+---------------------- + XLcgQWRiJrTkuNZcJsNeT_2j | 1788495513 | 1788495577 +(1 row) + + 전체 온라인 세션: 151 (재시작 전 151) + +=== [5] 캐시는 어떻게 되었는가 === + keycloak-0 sessions 캐시 0.0 건 / cluster_size 2.0 + keycloak-1 sessions 캐시 1.0 건 / cluster_size 2.0 + +=== [6] 파드 나이 — 정말 재시작되었나 === +keycloak-0 1/1 Running 0 44s +keycloak-1 1/1 Running 0 66s diff --git a/docs/evidence/a8-rolling-restart/README.md b/docs/evidence/a8-rolling-restart/README.md new file mode 100644 index 0000000..c55475d --- /dev/null +++ b/docs/evidence/a8-rolling-restart/README.md @@ -0,0 +1,16 @@ +# A-8 — 롤링 재시작 증거 + +2026-09-04 13:38–13:41 KST +해설: [`docs/experiment-a8-rolling-restart.md`](../../experiment-a8-rolling-restart.md) + +| 파일 | 무엇을 보여주는가 | +|---|---| +| `01-restart-availability.txt` | 재시작 전 로그인(sid 기록), 롤링 재시작 중 외부 진입점 **9회 모두 `200`** | +| `02-session-survival.txt` | 재시작 전 토큰으로 refresh **`200`**, DB 행 생존(`last_session_refresh` 갱신 확인), **세션 수 151 → 151**, 캐시 0으로 초기화, 파드 나이 44초/66초 | +| `a8-cache-reset-cluster-reformed.png` | Grafana — 세션 캐시가 0 으로 떨어지고 `cluster_size` 가 다시 2 가 되는 구간 | + +## 핵심 세 줄 + +1. **무중단이었다.** 한 번에 하나씩 내리고 readiness 가 전환을 맞춰준다 — replica ≥ 2 가 전제. +2. **세션은 살아남고 캐시만 사라진다.** DB 151건 그대로, 재시작 전 토큰이 그대로 통한다. +3. **이것이 `persistent-user-sessions` 를 켜는 진짜 이유다.** A-7(volatile)에서 정반대가 나와야 한다. diff --git a/docs/evidence/a8-rolling-restart/a8-cache-reset-cluster-reformed.png b/docs/evidence/a8-rolling-restart/a8-cache-reset-cluster-reformed.png new file mode 100644 index 0000000000000000000000000000000000000000..4297b516e9034b2983b43c28bec8bf0b38567aa1 GIT binary patch literal 83553 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

I9~W9hX4GM_Vi!Ggmbbx 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�*g_+}IAn+f9;J;9t{2_V%bw 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 literal 0 HcmV?d00001 diff --git a/docs/experiment-a8-rolling-restart.md b/docs/experiment-a8-rolling-restart.md new file mode 100644 index 0000000..7ca66bc --- /dev/null +++ b/docs/experiment-a8-rolling-restart.md @@ -0,0 +1,175 @@ +# A-8 — 배포할 때마다 로그아웃되는가 + +브랜치 `feature/keycloak-a8-rolling-restart` · +증거 [`docs/evidence/a8-rolling-restart/`](evidence/a8-rolling-restart/) · +2026-09-04 13:38–13:41 KST + +**운영에서 가장 자주 겪는 일이다.** 장애가 아니라 정상 작업인데도 +사용자가 로그아웃되면 그건 사고다. + +--- + +## 0. 결론부터 + +| 확인 | 결과 | +|---|---| +| 재시작 중 서비스 중단 | **없음.** 전 구간 `200` | +| 재시작 전 발급한 refresh token | **여전히 통한다** (`200`) | +| DB 세션 수 | **151 → 151** 그대로 | +| 세션 캐시 | **0 으로 초기화** | +| 클러스터 | 자동 재형성 (`cluster_size = 2`) | + +**세션은 살아남고 캐시만 사라진다.** 이것이 `persistent-user-sessions` 를 +켜는 진짜 이유다. + +--- + +## 1. 방법 + +```bash +# 1. 재시작 전 로그인 — 토큰을 상주 파드 안에 보관한다 +kubectl -n keycloak-lab run a8-probe --image=curlimages/curl:8.11.1 \ + --restart=Never --command -- sleep 3600 +kubectl -n keycloak-lab exec a8-probe -- sh -c '<로그인 후 /tmp/rt, /tmp/sid 에 저장>' + +# 2. 재시작하면서 5초 간격으로 외부 진입점을 찍는다 +kubectl -n keycloak-lab rollout restart statefulset/keycloak +( for i in $(seq 1 48); do + curl -s -o /dev/null -w '%{http_code} ' --max-time 4 https://auth.hyeonworks.com/realms/master + sleep 5 + done ) & +kubectl -n keycloak-lab rollout status statefulset/keycloak --timeout=420s +``` + +**탐침 파드가 StatefulSet 밖에 있어야** 재시작을 넘어 토큰을 들고 있을 수 있다. + +--- + +## 2. 가용성 — 무중단이었다 + +``` +statefulset.apps/keycloak restarted +200 Waiting for partitioned roll out to finish: 0 out of 2 new pods have been updated... + Waiting for 1 pods to be ready... +200 200 200 200 Waiting for partitioned roll out to finish: 1 out of 2 new pods have been updated... + Waiting for 1 pods to be ready... +200 200 200 200 partitioned roll out complete: 2 new pods have been updated... +``` + +**9번 찍어서 9번 다 `200`.** 한 번도 끊기지 않았다. + +### 왜 무중단이 되는가 + +``` + StatefulSet 롤링 재시작 + │ + ├─ keycloak-1 종료 → Service 엔드포인트에서 빠짐 + │ └─ 이 동안 keycloak-0 이 전부 받는다 + ├─ keycloak-1 기동 → readiness UP → 엔드포인트 복귀 + │ + └─ keycloak-0 종료 → ... (반복) +``` + +**한 번에 하나씩** 내리므로 항상 최소 하나는 Ready 다. +readiness 프로브가 이 전환을 정확히 맞춰준다 — A-2 에서 본 그 메커니즘이 +여기서는 **정상 작업을 안전하게** 만든다. + +> 다만 이 실험대는 **파드가 2개**다. replica 1 이면 반드시 끊긴다. +> 무중단은 공짜가 아니라 **replica ≥ 2 와 readiness 의 조합**이다. + +--- + +## 3. 세션 생존 + +``` +=== 재시작 전 발급한 refresh token 이 아직 통하는가 === + 대상 sid: XLcgQWRiJrTkuNZcJsNeT_2j + keycloak-0 에서 refresh HTTP 200 + +=== DB 에 그 세션이 남아 있는가 === + user_session_id | created_on | last_session_refresh +--------------------------+------------+---------------------- + XLcgQWRiJrTkuNZcJsNeT_2j | 1788495513 | 1788495577 + + 전체 온라인 세션: 151 (재시작 전 151) +``` + +**`last_session_refresh` 가 `created_on` 보다 64초 뒤**다. 재시작 후의 refresh +가 **실제로 DB 에 기록**되었다는 뜻이다 — 응답 코드만 200 인 게 아니라 +쓰기까지 정상이다. + +**파드가 통째로 바뀌었는데(44초/66초 나이) 세션은 그대로다.** + +--- + +## 4. 캐시는 사라진다 + +``` + keycloak-0 sessions 캐시 0.0 건 / cluster_size 2.0 + keycloak-1 sessions 캐시 1.0 건 / cluster_size 2.0 +``` + +![캐시 초기화와 클러스터 재형성](evidence/a8-rolling-restart/a8-cache-reset-cluster-reformed.png) + +**캐시는 프로세스 메모리이므로 재시작에 사라진다.** `keycloak-1` 의 1건은 +방금 refresh 를 처리하며 새로 담은 것이다. + +``` + 재시작 전: 캐시 N건 + DB 151건 + 재시작 후: 캐시 0건 + DB 151건 ← 진실은 DB 에 있다 +``` + +**A-0 의 모델이 그대로 확인된다.** 캐시가 통째로 날아가도 정확성은 유지되고 +**첫 접근만 느려진다** (룩어사이드 캐시의 성질). + +--- + +## 5. 이것이 `persistent-user-sessions` 를 켜는 진짜 이유다 + +| | persistent (KC 26 기본) | volatile (KC 24 이전 방식) | +|---|---|---| +| 롤링 재시작 후 | **세션 유지** | **전원 로그아웃** | +| 배포 빈도 | 자유롭다 | 배포가 곧 사고다 | +| 대가 | DB 쓰기 (A-6 에서 본 지연) | 없음 | + +**A-7 에서 volatile 로 바꿔 같은 실험을 반복하면 여기가 정반대가 될 것이다.** +그 비교가 이 실험의 짝이다. + +--- + +## 6. 재현 절차 (명령어) + +```bash +# 상주 탐침 (StatefulSet 밖에 있어야 한다) +kubectl -n keycloak-lab run a8-probe --image=curlimages/curl:8.11.1 \ + --restart=Never --command -- sleep 3600 +kubectl -n keycloak-lab wait --for=condition=Ready pod/a8-probe --timeout=120s + +# 로그인하고 토큰 보관 +kubectl -n keycloak-lab exec a8-probe -- sh -c \ + 'curl -s -X POST http://:8080/realms/master/protocol/openid-connect/token \ + -d grant_type=password -d client_id=admin-cli -d username=admin -d password= > /tmp/tok' + +# 재시작 + 가용성 감시 +kubectl -n keycloak-lab rollout restart statefulset/keycloak +kubectl -n keycloak-lab rollout status statefulset/keycloak --timeout=420s + +# 세션 생존 확인 +kubectl -n keycloak-lab exec a8-probe -- sh -c \ + 'curl -s -o /dev/null -w "%{http_code}\n" -X POST http://:8080/realms/master/protocol/openid-connect/token \ + -d grant_type=refresh_token -d client_id=admin-cli -d refresh_token=$(cat /tmp/rt)' + +# DB 대조 +kubectl -n keycloak-lab exec deploy/postgres -- psql -U keycloak -d keycloak \ + -c "select user_session_id, created_on, last_session_refresh from offline_user_session where user_session_id=''" +``` + +--- + +## 7. 다음 실험에 남기는 것 + +| 실험 | 이 실험이 준 것 | +|---|---| +| **A-7** volatile 비교 | **이 실험을 그대로 반복하면 정반대 결과가 나와야 한다** | +| **D-2** 버전 업그레이드 | 롤링 재시작이 안전하다는 것이 업그레이드의 전제 | +| 구성 | 무중단은 **replica ≥ 2 + readiness** 의 조합이다 |