// note
실시간 알림 소켓 재연결 — 지수 백오프와 세션 유지
- 서버가 상태 변경·계산 완료를 실시간으로 전달하는 알림 소켓. 여러 화면이 소켓 하나를 공유
증상
- 네트워크 순단·서버 재시작·슬립 복귀로 소켓이 끊기면 그대로 방치돼 알림이 유실
- 즉시 재연결로 막으려니 서버 장애 때 클라이언트 전체가 동시에 재시도해 부하를 더 키움
원인
- 끊김은 예외가 아니라 상시 발생하는 정상 상태인데, 복구 정책 없이 연결을 한 번만 맺고 있었음
- 재시도 간격이 고정이면 장애 상황에서 요청이 몰림
조치
- 재연결 대기를 시도마다 2배로 — 1s → 2s → 4s → 8s → 16s, 상한 30초. 서버가 불안정할수록 간격이 벌어져 부하를 얹지 않음
- 연결에 성공하면 시도 횟수를 리셋하고, 실패해도 재시도를 멈추지 않음 — 서버가 돌아오면 스스로 복구되어야 하므로
- 연결 성공 시 세션 id를 발급해 재접속해도 세션이 이어지게
- 언마운트 시 타이머 정리 + 소켓 close — 화면을 떠난 뒤에도 재연결이 계속 도는 것을 방지
- 받은 메시지는 타입별로 이벤트 버스에 발행 → 소켓 수신부와 화면 로직 분리
결과
- 순단·재시작 후 연결이 스스로 복구돼 알림 유실이 사라짐
- 장애 시 재시도가 분산돼 서버에 부하를 추가하지 않음
이 소켓으로 이벤트를 보내는 서버 쪽 → 수평 확장 WebSocket 세션 라우팅