Skip to content

[Fix] 대시보드 WebSocket 권한 일괄 판정으로 수신자별 DB 조회 제거 - #377

Merged
Gimini-3 merged 5 commits into
developfrom
fix/376
Oct 1, 2026
Merged

Gimini-3 merged 5 commits into
developfrom
fix/376

Conversation

@Gimini-3

@Gimini-3 Gimini-3 commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

작업 내용

  • Closes [Fix] 대시보드 WebSocket 권한 일괄 검증으로 전송 지연 완화 #376
  • 대시보드 push마다 열린 CONNECT-ADMIN 세션의 사용자 ID를 중복 제거하고, 현재 primary에서 ADMIN 여부를 일괄 조회합니다. 수신자별 동기 DB 조회를 제거하되 실제 물리 세션 ID와 push별 불변 판정을 대조해 회수된 권한으로 전달하지 않습니다.
  • 판정은 native STOMP 헤더가 아닌 서버 내부 헤더로만 브로커에 전달합니다. 판정 뒤 합류한 세션은 같은 사용자라도 이번 메시지만 건너뛰고, 후보였지만 ADMIN이 아닌 세션은 메시지를 버린 뒤 연결을 닫습니다.
  • primary 확인 실패나 판정 헤더 누락은 이전 CONNECT 권한/Redis 캐시로 우회하지 않습니다. 스케줄러는 실패한 dirty 신호를 되살리고, 이미 커밋된 재처리 API는 알림 실패만으로 HTTP 실패가 되지 않도록 했습니다.

테스트 환경

항목 실제 검증 환경
실행 위치 개발자 로컬 컴퓨터의 Spring Boot/Gradle 통합 테스트; GCP VM 0대
데이터 저장·캐시 격리된 PostgreSQL 17+pgvector 및 Redis 7 컨테이너
시험 경로 실제 HTTP 역할 회수·DB 커밋·Redis 캐시·STOMP 발행/수신, 결정적 전송 경합
범위 로컬 정확성 검증. OpenSQL 3노드·OpenProxy 경유 부하, 다중 백엔드 및 장애 전환은 이 PR에서 미측정

검증

  • 로컬 격리 PostgreSQL 17+pgvector·Redis 7에서 실제 HTTP 역할 회수, DB 커밋, Redis 캐시, STOMP 전송을 연결했습니다.
  • 실제 발행 경로에서 내부 판정이 outbound까지 전달되지만 클라이언트 STOMP 헤더에는 노출되지 않음을 확인했습니다.
  • 결정적 경합 시험으로 회수 전 이미 허용된 메시지의 늦은 수신을 별도 분류하고, 같은 사용자의 판정 후 신규 세션은 이번 push에서 제외했습니다.
  • 관련 10개 클래스 49/49 통과, 전체 Gradle 테스트 1,271/1,271 통과(최종 코드). 앞선 환경값 누락 실패 및 클래스 경로 오타 재실행도 개별 로그에 보존했습니다.
  • 결과와 실행별 로그: 한국어 검증 문서, 실행 목록

범위와 다음 단계

  • 기존 #374의 수신 지연 수치는 변경 전 기준선입니다. 이번 PR은 성능 개선량을 실측했다고 주장하지 않습니다. GCP 3노드/OpenProxy에서 같은 부하 조건으로 변경 전후 p95·p99, primary 쿼리 수, 새 판정 오류를 별도 시험합니다.
  • 회수 전에 이미 허용된 전송은 HTTP 200 뒤 클라이언트에 늦게 도착할 수 있습니다. 본 보장은 '200 이후 시작한 새 primary 판정에서 이전 ADMIN 승인 0건'이며 '200 이후 클라이언트 수신 0건'이 아닙니다.
  • 비동기 failover의 RPO와 여러 백엔드 사이의 SimpleBroker 분배는 이 로컬 시험 범위 밖입니다.

리뷰 요청

  • 세션 ID→사용자 ID 후보 snapshot과 non-native 헤더 전달이 수신자별 브로커 복제 경계에서 안전하게 유지되는지 확인 부탁드립니다.

@coderabbitai

coderabbitai Bot commented Oct 1, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Repository: DocGrid/docgrid/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 911dce03-2e1d-4769-a6d1-bfcbc953a06d

  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Gimini-3
Gimini-3 merged commit 0e249c0 into develop Oct 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Fix] 대시보드 WebSocket 권한 일괄 검증으로 전송 지연 완화

1 participant