부르미의 실시간 배송 추적 화면에서 "드리미의 위치가 끊겼다"를 어떻게 판정하고 알릴지에 대한 결정 기록.
부르미 추적 화면은 드리미 위치를 SSE delivery_location 이벤트로만 받는다. 드리미가 배달 중 GPS 권한을 차단하거나, 네트워크가 끊기거나, 브라우저를 닫으면 위치 전송이 조용히 멈춘다. 그러면 지도에는 마지막 좌표에 멈춘 드리미 마커가 "실시간"인 것처럼 남고, 부르미는 드리미가 안 움직이는 것인지 연결이 끊긴 것인지 구분할 수 없다.
끊김은 세 구간 중 어디서든 생길 수 있다.
드리미 ──①──▶ 서버 ──②──▶ 부르미 브라우저 ──③──▶ 인터넷
부르미 클라이언트는 ①을 관측할 수 없다. "N초 동안 위치가 안 왔다"만 보고 판정하면 두 가지 오탐이 생긴다.
판정 주체를 구간별로 나눈다.
| 판정 대상 | 판정 주체 | 근거 |
|---|---|---|
| 드리미 위치 무소식(①) | 서버 | ①의 유일한 목격자 |
| 내 실시간 연결 상태(②③) | 부르미 클라이언트 | 자기 EventSource 상태를 직접 안다 |
두 판정이 서로 독립적이므로 "내 인터넷 장애를 드리미 장애로 오해"하는 일이 구조적으로 불가능하다. 부르미 화면은 자기 연결이 끊긴 동안에는 드리미 배너를 아예 띄우지 않고, 문구가 다른 별도 배너를 보여준다.
DELIVERY.last_location_dtm — 드리미 위치를 마지막으로 받은 시각. 좌표가 그대로여도 갱신되므로, "드리미가 멈춰 있음(정상)"과 "전송이 끊김(비정상)"이 구분된다.DreamiOfflineDetector — 5초마다 추적 중(PICKUP_NORMAL·PICKUP_DELAYED·DELIVERING) 배달 중 30초 이상 무소식인 건을 찾아 부르미에게 SSE delivery_dreami_offline을 보낸다.application.properties의 delivery.dreami-offline-*로 조정한다.드리미는 5초마다 위치를 보내므로 30초 = 6회 연속 누락이다. 엘리베이터·터널 같은 순간 단절에는 배너가 뜨지 않고, 실제 이탈은 30초 안에 인지된다. 15초(3회)는 지하 진입만으로 배너가 깜빡이고, 60초는 배달 중 체감상 너무 길다.