Repository navigation
[Test] 동기 권한 회수와 독립 쓰기의 on/local 혼합 부하 비교 - #546
Merged
Merged
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Gimini-3
commented
Oct 17, 2026
Gimini-3
left a comment
Contributor
Author
There was a problem hiding this comment.
자체 수동 검토 기록
대상 HEAD: 777534a940783114f23a1da0a959da7d5f903655.
| 검토 경계 | 확인 |
|---|---|
| 범위 | backend/src/main 변경0. 수동 시험·태그·문서/원장만 추가. 시험 독립 Controller는 src/test의 TestComponent |
| 격리 | 전용 loopback URL과 실제 PG 포트·Primary·namespace/라벨 guard. 공개 설정 불변·공개 leader1/streaming2 최종 확인 |
| 한 변수 비교 | ACK는 run02 안에서, Primary는 run05 안에서 같은 코드·풀5·동시8·종류별24. 회수는 on 고정, 독립만 on/local |
| 감사 순서 | 최초 성공 UUID를 먼저 감사. 불명만 같은 키 assertion WAL로 재확정. 감사 연결 재시도는 읽기만 수행 |
| 실제 계측 | 원시 요청/풀/제어 원장과 집계 재대조. 최초 성공79 누락0, 불명113 재확정. 독립 중단창 on0/local5, 최대 pool pending8/8 |
| 실패 보존 | run01/04 채널 실패와 run03 Proxy 준비 실패 보존. 실패 회차를 성공으로 변경하지 않음 |
| 주장 한계 | MockMvc와 #544의 실제 HTTP 구분. local 유실 미재현·커널 버퍼 미차단·어댑터 경유·옛 Primary 재합류 미검증 명시 |
| 정리·민감값 | 시험 컨테이너/알려진 이미지/데이터/DCS/Valkey/전용 채널/비밀 파일 제거. 사전·최종 검사 발견0. 기존 VM/터널 유지 |
현재 검토에서 병합을 막을 코드/증거 불일치는 발견하지 않았습니다. 동료의 승인으로 대신 표현하지 않으며, 진행 중인 backend/frontend CI가 통과한 정확한 HEAD를 확인한 뒤 병합합니다.
Contributor
Author
|
최종 CI 확인: HEAD
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
목적
Closes #543
권한 회수는 항상 동기로 확정하면서, 별도의 독립 쓰기만
on또는local로 바꿨을 때 장애 중 업무 진행과 공유 DB 풀 대기가 어떻게 달라지는지 비교했습니다. 실제 인증 HTTP 차단은 #544에서 확인했고, 이 PR은 커밋 정책의 차이를 같은 부하에서 관측하는 시험입니다.비교한 정책은 다음 두 가지입니다.
onononlocal이 환경에서
on은 strict 동기 구성을 전제로 Primary와 지정 동기 Standby의 기록 확인을 기다립니다.local은 Primary의 로컬 WAL 기록을 기다리지만 원격 복제 확인을 기다리지 않습니다.local을off와 같은 설정으로 취급하지 않습니다.대표 비교 4조건의 최초 요청 192건 중
20479건은 새 Primary/복구 DB에서 모두 확인됐고, 나머지 결과 불명 113건은 같은 키로 재확정했습니다. 중단 구간의 독립 쓰기 완료는 ACK 비교에서on0건·local5건이었지만, 공유 풀 대기는 두 조건 모두 최대 8개였습니다. 이번 시험에서local성공 데이터의 유실은 관측되지 않았습니다.상세 결과·실행별 원장 · 전체 집계 · 설계
테스트 환경
실행일은 **2026-10-17, 시각 기준은 KST(UTC+09:00)**입니다. 공개 설정과 운영 Worker 계정 정책은 변경하지 않았으며,
backend/src/main/의 업무 코드 변경도 없습니다.PermissionController → DocumentPermissionRevocationFacade → JPA/DBon. 독립 쓰기만SET LOCAL on/local. 독립204응답에서 실제current_setting확인독립 쓰기는 실제 인덱싱 Worker·Chunk/Embedding 작업을 대신하는 분리된 합성 쓰기입니다. 운영 Worker에
local을 적용했거나 그 효과를 측정한 결과로 해석하지 않습니다.테스트 방법
추가한 시험 구성
permissionMixedCommitTest, 별도 태그, 전용 주소·새 회차 디렉터리 검사, 시나리오 선택공통 준비
204인지 확인합니다.두 장애 시나리오
Standby 컨테이너 전체를 pause하므로 복제 처리뿐 아니라 SQL·Patroni·역할 API도 멈춥니다. 순수 COMMIT ACK 지연만 고립시킨 시험이나 단순 Primary 단독 장애와 구분합니다. 실제 제어 시간에는 SSH 왕복 등이 포함됩니다.
결과 불명은 실패 응답을 받은 쓰기가 반드시 DB에 없다는 뜻이 아닙니다. 클라이언트가 확정 여부를 알 수 없는 상태이므로 같은 요청 키로 재확정합니다. 단순 재삭제 대신 원장 UPDATE를 수행해 새 WAL과 커밋 확인이 발생하도록 합니다.
실행·계측 방법
전용 루프백 JDBC·migration 주소, 시험 비밀번호, 새 실행 디렉터리와 외부 격리 장애 제어기가 필요합니다. 명령만으로 클라우드 자원과 제어기가 만들어지지는 않습니다. 수동 시험 태그는 기본 CI에서 제외됩니다.
requests.jsonl: UUID별 최초/재확정 응답. 상태·지연·실측 커밋 모드를 기록합니다.관측 결과
대표 비교 4조건
ACK 두 정책은 같은
mixed-run02하네스, Primary 두 정책은 같은mixed-run05하네스로 비교했습니다. 두 목적 사이에는 Proxy 준비 확인·감사 읽기 재시도를 보완했으므로 모든 회차가 같은 시험 소스였다고 표현하지 않습니다. 실제 업무 코드는 동일합니다.합계는 최초 192건 = 최초
20479건 + 결과 불명 113건입니다. 최초204키 79건의 누락은 0건이었고, 불명 113건은 각각 같은 키로 재확정했습니다. 최초·재확정을 합친 응답 원장은 305건입니다. 대표 조건 모두 최종 회수 원장 24개·대상 권한 0행·독립 키 24개를 확인했습니다.장애 중 독립 쓰기의 진행과 공유 풀 영향
이번 표본에서는
local이 일부 독립 쓰기를 진행시켰습니다. 공유 Hikari 풀의 최대 pending은 두 조건 모두 8개여서, 독립 쓰기 설정 변경만으로 공유 풀 대기까지 없어진 것은 아닙니다.p95는 종류별 표본 24건·조건별 1회이며, MVC 호출 시작부터 반환까지입니다. executor 대기·사전 준비 시간은 제외합니다. 운영 성능·SLA 또는 안정적인 개선 비율로 일반화하지 않습니다. active와 pending은 서로 다른 시점의 최대값일 수 있으므로 두 수를 합산해 동시 작업 수로 해석하지 않습니다.
Primary 상실 뒤 DB 승격과 접속 준비
위 시간은 Primary 종료 확인 시각 기준의 관측값이며 폴링·접속 확인 비용을 포함합니다. 전체 서비스 RTO나 정확한 Proxy 내부 처리 지연으로 해석하지 않습니다.
기본 CI 실행은 backend·frontend가 통과했습니다. 수동 장애 시험의 근거는 실행별 원장이며 기본 CI와 구분합니다. CodeRabbit은 수동 검토 요구로 리뷰를 건너뛰었습니다.
검증 과정에서 확인된 사항
준비·관측 경계 보완
mixed-run01mixed-run02mixed-run03AllServersDown으로 최초 감사를 완료하지 못함mixed-run04mixed-run05DB 승격과 Proxy 읽기 준비가 다를 수 있어 실제 Primary 읽기 확인 단계를 추가했습니다. Hikari 복구 지연에는 감사 읽기만 최대 45초 재시도하며, 최초 성공 키 감사를 끝내기 전에 업무 재확정을 실행하지 않습니다. 이 보완은 시험 관측 절차이며 운영 코드 수정은 아닙니다.
전용 SSH 채널이 종료된 정확한 원인은 미확정입니다. run05의 완료를 원인 규명·제품 결함 수정으로 표현하지 않습니다. 원시 회차 기록은 덮어쓰거나 사후 재구성하지 않았습니다.
결과 해석 시 주의할 점
requests.jsonl의configured_mode는 그 회차의 독립 쓰기 정책입니다. 회수 행에 local로 표시돼도 실제 회수는 Facade에서 항상 on입니다.observed_mode는 독립204에서 읽은 실제 설정입니다.자원 정리와 공개 환경 보존
최종 정리 원장 기준 2026-10-17 15:12:53 KST 정리 완료입니다. 시험 DB 3개·시험 Proxy 1개·로컬 Valkey 1개, 확인된 시험 이미지·데이터·시험 DCS·전용 터널·런타임 비밀을 제거했습니다.
공개 설정 해시와 동기 모드/strict는 그대로이며, 공개 클러스터 리더 1대·streaming Standby 2대를 확인했습니다. 기존 VM과 원래 터널은 유지했고 새 OS Login 키·IAM 변경은 0건입니다. 소유가 불명확한 이미지 캐시는 정리 대상에서 제외했습니다.