## 배경 트래픽 모니터링 3축 점검 중 발견. 스트리밍 축의 기준은 "요청 수(RPS)가 아니라 동시 세션 수와 네트워크 I/O가 핵심"인데, 지금은 "현재 세션이 몇 개인가"만 알 수 있고 "세션이 얼마나 오래 유지되는가", "세션이 얼마나 많은 트래픽을 실어나르는가"는 알 수 없다. ## 현재 상태 - WebSocket 자체는 미구현이다. `application.yml:179`(`security.whitelist`의 `/ws/**`)와 `JwtAuthFilter.java:47`(`/ws` 경로 인증 스킵)만 있고 실제 `@ServerEndpoint`/`StompEndpoint`/WebSocketConfig 등 핸들러는 backend 어디에도 없다(grep 0건) — 향후를 위한 죽은 설정으로 보인다. 실제 "스트리밍"은 프론트 → AI 서버로 프레임마다 HTTP POST(`/pose`)하는 방식이다. - 살아있는 세션 수 게이지는 존재한다: `ai-server/app/observability/metrics.py:56-59,70-72` — `shadowfit_ai_active_sessions` (스크레이프 시점에 in-memory 세션 수를 읽는 방식). - gRPC 콜백 쪽도 "동시 세션"이 아니라 "동시 in-flight 호출 수"를 게이지로 노출한다: `backend/src/main/java/com/shadowfit/global/observability/GrpcInflightCallInterceptor.java:30-76` (`shadowfit.grpc.server.inflight`). - 없는 것: - **세션 지속시간 분포** — Timer/Histogram이 없다. 세션이 평균 몇 분 유지되는지, 비정상적으로 길게/짧게 끝나는 세션이 얼마나 되는지 알 수 없다. - **세션 단위 네트워크 I/O** — `cadvisor`/`node-exporter`(`docker-compose.yml:386-430`)가 컨테이너/호스트 레벨 지표는 주지만, 세션당 처리량(프레임 바이트 수 등)을 분리해서 보는 지표는 없다. ## 확인이 필요한 것 (미검증) - 세션 지속시간을 어느 계층에서 재는 게 맞는지(AI 서버 in-memory 세션 생성/삭제 시점 vs Spring 세션 라이프사이클) — AI 서버 세션 상태를 관리하는 코드 위치부터 다시 확인 필요. - 세션당 네트워크 I/O를 별도로 계측할 가치가 있는지, 아니면 현재 규모에서는 컨테이너 레벨로 충분한지는 판단 필요(임의로 결정하지 않음). ## 참고 - `ai-server/app/observability/metrics.py:56-72` - `backend/src/main/java/com/shadowfit/global/observability/GrpcInflightCallInterceptor.java:30-76` - `backend/src/main/resources/application.yml:179`, `backend/src/main/java/com/shadowfit/global/security/jwt/JwtAuthFilter.java:47` (죽은 `/ws/**` 설정 — 정리 여부는 별도 판단 필요)