부르미의 실시간 배송 추적 화면에서 "드리미의 위치가 끊겼다"를 어떻게 판정하고 알릴지에 대한 결정 기록.

문제

부르미 추적 화면은 드리미 위치를 SSE delivery_location 이벤트로만 받는다. 드리미가 배달 중 GPS 권한을 차단하거나, 네트워크가 끊기거나, 브라우저를 닫으면 위치 전송이 조용히 멈춘다. 그러면 지도에는 마지막 좌표에 멈춘 드리미 마커가 "실시간"인 것처럼 남고, 부르미는 드리미가 안 움직이는 것인지 연결이 끊긴 것인지 구분할 수 없다.

왜 클라이언트 타이머만으로는 안 되는가

끊김은 세 구간 중 어디서든 생길 수 있다.

드리미 ──①──▶ 서버 ──②──▶ 부르미 브라우저 ──③──▶ 인터넷

부르미 클라이언트는 ①을 관측할 수 없다. "N초 동안 위치가 안 왔다"만 보고 판정하면 두 가지 오탐이 생긴다.

  1. 재접속 오탐 — 화면에 다시 들어오면 "아직 아무것도 못 받았다"와 "끊겼다"가 구분되지 않는다.
  2. 자기 장애 오탐 — ②·③이 끊겨서 위치가 안 오는 것인데 드리미(①) 장애로 오해한다.

결정

판정 주체를 구간별로 나눈다.

판정 대상 판정 주체 근거
드리미 위치 무소식(①) 서버 ①의 유일한 목격자
내 실시간 연결 상태(②③) 부르미 클라이언트 자기 EventSource 상태를 직접 안다

두 판정이 서로 독립적이므로 "내 인터넷 장애를 드리미 장애로 오해"하는 일이 구조적으로 불가능하다. 부르미 화면은 자기 연결이 끊긴 동안에는 드리미 배너를 아예 띄우지 않고, 문구가 다른 별도 배너를 보여준다.

서버

임계값을 30초로 둔 이유

드리미는 5초마다 위치를 보내므로 30초 = 6회 연속 누락이다. 엘리베이터·터널 같은 순간 단절에는 배너가 뜨지 않고, 실제 이탈은 30초 안에 인지된다. 15초(3회)는 지하 진입만으로 배너가 깜빡이고, 60초는 배달 중 체감상 너무 길다.

왜 이렇게 했는가