음성 통화 서버 상태 발행
음성 통화 서버가 지금 몇 명 접속 중이고 살아 있는지를 대시보드가 읽을 수 있게 만들었다.
무엇을 만들었나
음성 통화 서비스의 접속자 수와 마이크를 켠 인원을 같은 컴퓨터의 대시보드에서 볼 수 있도록, 서버가 현재 상태를 주기적으로 기록하게 했다. 기록 중 문제가 생겨도 통화 서비스는 계속 동작하며, 서버가 멈추면 읽는 쪽에서 구분할 수 있다.
구현 방식과 보안 설계는 ‘기술 상세’에 있습니다.
구조와 설계
시그널링 허브에서 접속·이탈·마이크 상태 변경 이벤트를 집계해 접속 피어 수, 표시 이름, 마이크 선언 피어 수를 담은 상태 JSON을 발행한다. 시작 시 한 번, 변화가 생기면 마지막 이벤트로부터 1초 뒤, 변화가 없어도 30초마다 갱신해 읽는 쪽이 멈춘 서버를 구분할 수 있게 했다. 같은 디렉터리의 임시 파일에 쓰고 동기화한 뒤 이름을 바꾸는 방식으로 발행하고, 쓰기는 순서대로 처리하며 실패는 경고로 격리해 통화 처리에 영향이 없게 했다. 정상 종료 시 접속·마이크가 0인 마지막 스냅샷을 대기 중인 쓰기 뒤에 두어 오래된 쓰기가 덮어쓰지 못하게 했다. 운영 서버 재시작과 대시보드에서 실제로 읽는 장면은 이 작업 범위에서 확인하지 않았다.
사용 기술
Node.js 24, WebSocket 시그널링 (ws), JSON, node:test
보안·안정성 설계
- 상태 파일에는 집계와 표시 이름만 넣고 계정 아이디, 인증 정보, 네트워크 주소, 개별 마이크 상태는 기록하지 않는다.
- 파일 쓰기가 실패해도 통화 서비스가 계속 동작하도록 실패를 격리하고, 실패하는 경로에서도 HTTP 서버가 유지되는지 테스트로 확인했다.
- 임시 파일 작성 후 이름 변경으로 교체해 읽는 쪽이 중간에 쓰이다 만 파일을 보지 않게 했고, 서버가 알 수 없는 TURN 경유 연결 수는 추측해서 기록하지 않았다.
작업 기록
서버 상태를 JSON 파일로 주기 발행
접속자 수·표시 이름·마이크 선언 수를 집계해 대시보드용 상태 파일로 발행하고, 파일 쓰기 실패가 통화 처리에 번지지 않게 격리했다. 7개 테스트를 추가했고 전체 60개와 스모크 14개가 통과했다.
이 페이지는 작업 기록 문서 1건을 바탕으로 정리했습니다. 고객 정보, 접속 주소, 비밀값은 공개 전에 걸러 냅니다.