데브허브 | DEVHUB | [10분 테코톡] 니야의 웹소켓 끊김 대응 전략[10분 테코톡] 니야의 웹소켓 끊김 대응 전략
- 웹소켓 연결은 네트워크 변화, 앱 상태 변화, 인프라 문제, 서버 재시작 등 다양한 원인으로 끊길 수 있으며, 실시간 데이터 동기화를 위해 재연결이 필수적이다. 🌐
- 웹소켓 연결 끊김의 주요 원인은 사용자 측 네트워크 환경 변화 및 브라우저/앱 상태 변화이며, 중간 인프라 문제나 서버 운영에 따른 종료도 발생한다. 🔌
- 순수 웹소켓 객체는 자동 재연결 기능이 없어
CloseEvent의 상태 코드(RFC6455)를 활용하여 상황에 맞는 수동 재연결 로직 구현이 필요하다. 🛠️
socket.io와 같은 라이브러리는 자동 재연결을 기본 제공하지만, StompJS는 명시적인 설정이 필요하며, 일반적인 장애 대응에 유용하다. 📚
- 자동 재연결의
reconnectDelay 설정은 특정 상황(예: 앱 전환 후 복귀)에서 사용자 경험을 저하시킬 수 있으므로, visibilityChange 이벤트 등을 활용한 즉각적인 수동 재연결로 UX를 개선할 수 있다. 📱
- 페이지 새로고침 시 웹소켓 클라이언트 객체가 초기화되어 자동 재연결이 작동하지 않을 수 있으므로,
PerformanceNavigationTiming API를 활용하여 새로고침을 감지하고 웹소켓 객체를 새로 생성하여 수동 재연결해야 한다. 🔄
- 수동 재연결은 코드 복잡성 증가 및 유지보수 어려움, 잘못된 로직 시 서버 부하 유발 가능성 등의 단점이 있어 신중한 구현과 재연결 전략 수립이 중요하다. ⚠️
- 웹소켓 재연결의 핵심 목적은 연결이 끊긴 동안의 상태를 최신 정보로 빠르게 동기화하여 사용자 경험과 서비스 안정성을 향상시키는 것이다. 🚀
- 결론적으로, 웹소켓 연결 끊김 시 상황에 맞는 적절한 재연결 방식을 선택하고, 최신 상태로 데이터를 동기화하는 것이 중요하다. ✅