소켓 서버 운영하다 보면 Redis에 저장된 socket.id랑
실제 소켓 서버가 가진 socket.id가 불일치하는 경우 종종 생김.
브라우저 강제 종료, 네트워크 끊김, 모바일 전환 등에서 흔하게 발생함.
이럴 때 무조건 Redis 전체를 정리하는 방식은 비효율적임.
그래서 발견되는 순간에만 제거하는 lazy-clean 방식 적용함.
🔍 정리 조건
Redis에 저장된 sid가 실제 소켓 서버에 없으면 정리함.
if (!io.sockets.sockets.has(sid)) {
client.srem(`${tenant}:${user}:socket`, sid)
}
🔧 장점
- 쓸데없는 전체 스캔 없음
- 정상 동작 중인 유저에게 부담 없음
- 자연스럽게 “좀비 socket.id”만 제거됨
- Redis와 socket 서버 사이의 정합성 점진적으로 맞춰짐
📌 요약
소켓 저장 로직 자체는 유지하지만,
정리 작업은 “이 sid가 진짜 존재하나?” 체크했을 때만 수행함.
과도한 Redis 정리 없이 정확도는 유지되는 안정적인 방식임.
'TIL' 카테고리의 다른 글
| 컨테이너 Exit 원인 명령어 정리 (0) | 2025.11.28 |
|---|---|
| Nginx 502 Bad Gateway 발생 원인 정리 (0) | 2025.11.26 |
| proxy_temp 파일이 날뛰어서 디스크 꽉 찼던 사건 정리 (1) | 2025.11.18 |
| 서버 CPU 픽 떠서 서버 에러율 높았던 사건 회고록 (0) | 2025.11.17 |
| Redis 한쪽노드에 메모리 몰린 경우 (0) | 2025.11.03 |