Repository navigation
[Test] 실제 HTTP 권한 회수와 OpenSQL 승격 후 차단 검증 - #544
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 c1478fd990298b08643865b50d6a0148f147e798의 시험 코드와 원본 기록을 대조했습니다.
- 실제 루프백 Tomcat·HTTP client·로그인·JWT 필터·Valkey를 사용하며 SecurityContext 주입이나 standalone MVC인 것으로 오인할 여지가 없도록 범위를 명시했습니다.
- 회수 전 양성 대조, 인증 없는 401, 회수 204, stale 캐시 주입, 승격 뒤 3회 차단과 허용 대조를 모두 단언합니다. 503만 반환하는 상태를 성공으로 통과시키지 않습니다.
- 실제 SearchFacade의 Primary 최종 인가와 검색 저장을 사용하고 파일·임베딩·후보·합성 답변 대역을 구분했습니다. 실제 모델·GCS·과거 대화의 보장을 주장하지 않습니다.
- 승격 뒤 대상 403 9개·대조 200 9개·새 검색 200 3개, 금지 문구 0건과 집계가 일치합니다. 현재 Primary의 실제 요청 키 1개·권한 행 0개를 단언했습니다.
- 회차별 실패를 보존했고 이전 Primary 재가입 90초 초과를 숨기지 않았습니다. 최종 통과 회차는 이전 노드를 중지한 상태의 사용자 응답 검증이며 재가입 문제 해결을 주장하지 않습니다.
- 첫 제어 로그 한 줄 손상과 실행 위치 메타데이터 오류를 원본·수집 한계로 남겼습니다.
- 기본 CI에서 수동 태그를 제외하고 전용 loopback DB·migration·HTTP 바인딩과 새 원장을 강제합니다. 생산 코드·공개 설정 변경은 없습니다.
- 파일 24개에서 비공개 식별자·개인키·접속 비밀·로컬 절대 경로 발견 0개이며 실행 소스 해시가 커밋할 Java와 일치했습니다.
후속 #543을 위해 격리 자원을 유지하는 상태를 명시했습니다. 최종 CI 통과 뒤 병합할 수 있으며 CodeRabbit 검토 건너뜀을 사람의 승인으로 간주하지 않습니다.
Contributor
Author
|
후속 격리 비교 #546을 마치고 이 HTTP 시험과 공유했던 자원을 최종 정리했습니다.
정리 원장. 옛 시험 Primary의 자동 재합류가 성공했다는 의미는 아니며, 그 한계는 기존 시험 기록대로 유지합니다. |
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 #542
문서 접근 권한을 회수한 뒤 DB Primary가 바뀌어도, 사용자의 새 HTTP 요청에서 회수한 문서가 다시 노출되지 않는지 확인했습니다. DB의 권한 행이 삭제됐다는 확인을 실제 로그인·JWT 인증·상세/본문/다운로드·새 검색 응답까지 연결하는 시험입니다.
확인하려는 질문은 다음과 같습니다.
204로 확정된 뒤 Primary를 중단해도 회수 기록이 새 Primary에 남는가?최종 회차
http-primary-run04는 통과했습니다. 승격 뒤 대상 문서는4039개, 대조 문서는2009개, 새 검색은2003개였으며, 이 21개 새 응답에서 금지 문구는 0건이었습니다. 공개 서비스 설정과 기능 플래그는 변경하지 않았습니다.상세 결과·실행별 원장 · 최종 집계 · 설계
테스트 환경
실행일은 **2026-10-17, 시각 기준은 KST(UTC+09:00)**입니다. 애플리케이션과 HTTP 클라이언트는 로컬에서, DB·Proxy는 기존 라이선스 호스트의 별도 시험 컨테이너에서 실행했습니다.
/auth/login, BCrypt, JWT 필터,SecurityConfig,CurrentUser로그인과 HTTP 인증을 생략한 시험이 아닙니다. 다만 실제 Ollama·GCS를 사용한 전체 서비스 E2E와도 구분합니다. 설치된 원본 OpenProxy의 동기 역할 호환성 제약 때문에 역할 어댑터를 거친 결과입니다.
테스트 방법
추가한 시험 구성
permissionHttpHaTest, 별도 태그·전용 루프백 주소·새 실행 디렉터리 검사실행 절차와 합격 기준
401, 회수 전 두 문서의 상세·본문·파일은200이어야 합니다. 새 검색에는 결과·합성 근거가 각각 2개 있어야 합니다.DELETE /permissions/documents/{documentId}/{permissionId}를 요청 키 K와 함께 호출합니다.204를 확인한 뒤, 시험 목적으로 오래된 USER 접근 허용 캐시를 다시 유효하게 만듭니다.403, 대조 문서는200, 새 검색에서는 대상 문서·문구가 제외되는지 확인합니다.예전 캐시를 복원한 이유는 캐시가 오래됐을 때도 최종 DB 권한 검사가 차단하는지 확인하기 위해서입니다. 대조 문서는 서비스 전체 차단을 성공으로 오인하지 않기 위한 기준입니다.
실행 명령과 기록 방식
전용 루프백 JDBC·migration 주소, 시험 비밀번호·JWT 비밀, 새 회차 디렉터리와 격리 장애 제어기 준비가 필요합니다. 명령만 실행하면 환경 생성·장애 주입까지 자동으로 끝나는 구성은 아닙니다. 안전 검사가 맞지 않으면 실행을 거부하며, 기본 CI에서는 이 수동 태그를 제외합니다.
응답 상태·지연·금지 문구 검출 여부·파일 해시를 실행 중
http.jsonl에 기록했습니다. 앱 로그와 장애 제어 원장은 별도 파일입니다. 로그인 비밀번호·JWT·원시 로그인 응답·비공개 인프라 식별자는 기록하지 않았습니다.관측 결과
최종 회차:
http-primary-run042004011개200, 검색 결과·합성 근거 각 2개2044039개2009개2003개, 결과·합성 근거 매번 각 1개약 19.452초는 위 두 관측 시각의 차이입니다. 전체 서비스 RTO나 이전 Primary의 재가입 시간으로 해석하지 않습니다.
기본 CI 실행은 backend·frontend가 통과했습니다. 이 수동 클라우드 시험의 통과 근거는 위 실행별 원장이며 기본 CI 통과와 구분합니다. CodeRabbit은 저장소의 수동 검토 요구로 리뷰를 건너뛰었습니다.
검증 과정에서 확인된 사항
준비·관측 방법을 보완한 회차
http-primary-run01http-primary-run02http-primary-run03204와 자동 승격은 관측했지만 이전 Primary 재가입 대기가 90초를 넘어서 후속 HTTP 확인을 완료하지 못함http-primary-run04run03의 사후 진단에서
pg_rewind진행을 관측했지만 재가입 지연의 정확한 원인은 확정하지 않았습니다. 격리 데이터·DCS를 재초기화한 뒤 run04를 별도로 수행했습니다.run01 제어 기록 일부는 복수 기록자의 쓰기로 한 줄이 손상됐습니다. 원본·수집 한계를 보존하고 시간·성공 집계에서 제외했습니다. 초기 실행 로그의 위치 표기도 실행기 분기 누락으로 부정확했으며 실제 GCP 경로를 결과 문서에 명시했습니다. 최종 실행 소스 SHA-256은 원장에 보존했습니다.
이번 결과로 확인하지 않은 범위
시험 자원 정리와 공개 환경 보존
후속 #543 비교까지 같은 격리 자원을 사용한 뒤 2026-10-17 15:12:53 KST에 최종 정리를 완료했습니다. 정리 원장에 시험 DB·Proxy·Valkey·데이터·시험 DCS·전용 터널·런타임 비밀 제거를 기록했습니다. 기존 VM과 원래 터널은 유지했습니다.
공개 설정 해시 불변, 공개 클러스터 리더 1대·streaming Standby 2대, 동기 모드/strict 미변경을 확인했습니다. 새 OS Login 키·IAM 변경은 0건입니다.