WebSocket: 검증 및 운영
인증된 WebSocket 연결에 대한 검증 및 운영을 정의하며, 핸드셰이크 출처, 메시지 권한 부여, 제한, 생존성, 역압력, 재연결, 배포 종료, 관측성을 포함합니다.
패키지 상태: 참조 컨텍스트가 인간 검토를 위해 준비됨. 계약 및 테스트 시나리오는 완성되었으나, 이를 통과한 채택 구현체가 있다고 주장하지는 않습니다.
결정 사항
HTTP 업그레이드와 각 메시지 작업 모두를 권한 부여합니다. 연결을 인증된 주체, 테넌트, 정책 버전, 만료에 바인딩하며, 지속적인 소켓이 신뢰할 수 있다고 가정하지 않고 제한된 큐와 재개 의미론을 적용합니다.
범위
- 업그레이드, 인증, Origin 검증, 구독, 메시지 스키마, 권한 부여, 제한, 하트비트, 재연결, 재개, 종료, 감사.
- 인증된 양방향 메시징을 사용하는 브라우저 및 서비스 클라이언트.
- 부하, 남용, 배포 검증.
이 블록 외부
- 특정 전송 라이브러리 또는 엔드투엔드 이벤트 스토어 설계.
- 연결된 소켓을 영구적인 권한 증명으로 사용하는 것.
계약
- 브라우저 업그레이드는 허용된 Origin을 검증하고 URL/로그 누출로부터 보호되는 자격 증명을 사용합니다.
- 각 수신 메시지는 봉투 스키마, 크기, 속도, 작업, 리소스, 테넌트, 현재 권한을 검증합니다.
- 구독 권한은 정책 변경 시 또는 제한된 간격으로 재검증됩니다.
- 송신 큐는 바이트/메시지 제한과 명시적인 느린 소비자 정책을 가집니다.
- 재개를 지원하는 메시지는 단조 증가 스트림 오프셋을 포함하며, 전달 의미론과 중복 처리 방식을 선언합니다.
- 서버 종료는 새로운 업그레이드를 중단하고, 재연결 가능한 코드로 연결을 알리거나 닫으며, 엄격한 마감 시간을 가집니다.
구현 지침
- 메시지 ID, 유형, 버전, 상관 ID, 페이로드를 포함한 작은 봉투를 사용합니다.
- 보안된 same-site 쿠키 또는 승인된 메커니즘으로 전송되는 단기 핸드셰이크 자격 증명을 선호하며, 모든 곳에서 이를 가립니다.
- 측정된 유휴 및 타임아웃 프로필과 함께 ping/pong 또는 애플리케이션 하트비트를 구현합니다.
- 지속적인 메시지 처리량뿐만 아니라 재연결 폭주 및 느린 소비자를 부하 테스트합니다.
실패 처리 및 보호 조치
- 잘못된 스키마 또는 권한 없는 작업은 제한된 오류를 반환하며, 반복 위반자는 민감한 페이로드를 반영하지 않고 연결을 종료할 수 있습니다.
- 권한을 갱신할 수 없을 때는 보호된 구독을 중단합니다.
- 재개 오프셋이 보존 범위를 벗어날 경우, 기록을 조용히 건너뛰지 않고 스냅샷 갱신을 요구합니다.
검증 및 운영
- 활성 연결 수, 거부 사유별 업그레이드 거부, 메시지 속도/바이트, 권한 거부, 큐 깊이, 느린 소비자 종료, 하트비트 타임아웃, 재연결 속도, 재개 실패를 측정합니다.
- Origin 거부 급증, 연결당 메모리, 재연결 폭주에 대해 경고합니다.
- 배포 종료 및 권한 취소 테스트를 스테이징에서 실행하고 주기적으로 프로덕션 안전 연습에서 수행합니다.
이 패키지의 실행 가능한 예제는 픽스처 및 수용 계약입니다. 컬렉션 루트에서 python tools/validate.py를 실행하여 패키지 구조와 메타데이터를 확인한 후, 대상 저장소에서 시나리오를 구현하고 실행하세요.
채택 가정
example.yaml의 이름과 숫자 값은 채택 프로필이며, 보편적 기본값이 아닙니다.- 채택 팀은 행위자, 데이터 클래스, 오류 어휘, 소유권을 자사 시스템에 매핑해야 합니다.