같은 이벤트는 한 번만 기록합니다
알림 라우터는 이벤트를 만들기 전에 같은 고유 번호가 이미 있는지 확인합니다. 있으면 새로 만들지 않고, 어떤 경로로 다시 들어왔는지만 기존 기록에 덧붙입니다. 재전송이나 중계로 같은 SOS가 여러 번 들어와도 알림은 한 번입니다.
- event_id 기준 중복 제거
- 다시 들어온 경로는 기존 기록에 병합
- 모든 안전 알림이 같은 라우터를 거침


근로자 기기가 안전 이벤트를 고유 번호와 발생 시각을 담은 패킷으로 만들어 보내고, 서버는 같은 이벤트를 한 번만 기록합니다.
센스제로의 안전 이벤트 패킷은 SOS·낙상 같은 안전 이벤트를 근로자 기기가 직접 만드는 기록 단위입니다. 기기가 고유 번호(event_id)와 기기 기준 발생 시각을 붙이고, 서버에 닿지 못하면 기기 안에 보관했다가 다시 보냅니다. 서버는 같은 번호의 이벤트를 한 번만 기록하고, 발생부터 수신까지 걸린 시간과 기기 서명 확인 결과를 함께 남깁니다.
전달 흐름
SOS·낙상 같은 안전 이벤트를 근로자 기기가 직접 패킷으로 만듭니다.
대기열은 최대 200건, 48시간까지 보관합니다.
늦게 도착한 이벤트도 언제 일어났는지 정확히 남습니다.
모든 안전 알림이 같은 경로로 기록되고 전달됩니다.
핵심 동작
알림 라우터는 이벤트를 만들기 전에 같은 고유 번호가 이미 있는지 확인합니다. 있으면 새로 만들지 않고, 어떤 경로로 다시 들어왔는지만 기존 기록에 덧붙입니다. 재전송이나 중계로 같은 SOS가 여러 번 들어와도 알림은 한 번입니다.

근로자 기기는 안드로이드 키 저장소 안에 서명 키를 만들고(가능한 기기는 별도 보안 칩, 아니면 보안 영역), 개인키는 기기 밖으로 나가지 않습니다. 서버는 등록된 공개키로 서명을 확인해 검증됨·실패·미검증으로 표시합니다. 서명 적용 기기를 넓혀 가며 현장 검증을 진행하고 있습니다.


증빙
| 항목 | 의미 |
|---|---|
| event_id | 기기가 붙이는 고유 번호 — 중복 제거 기준 |
| 발생 기기 | 이벤트를 처음 만든 기기 |
| 발생 시각 | 기기 기준 발생 시각 (서버 수신 시각과 따로 기록) |
| 기기 서명 | 패킷 내용에 대한 기기 서명 값 |
| 서명 확인 결과 | 검증됨 · 실패 · 미검증 |
| 수신 지연 | 발생부터 서버 수신까지 걸린 시간 |
선택 기능
서버에 닿지 못하는 기기가 근처의 다른 근로자 기기를 거쳐 패킷을 전달하는 기능입니다. 설정에서 켠 경우에만 동작하며, 현장 검증을 진행하고 있습니다.
같은 SOS라도 관리자에게는 조치 안내, 본인에게는 접수 안내처럼 받는 사람에 따라 다른 문구를 보냅니다.
관리자는 한국어 문구만 관리하고, 영어를 쓰는 근로자에게는 자동 번역한 문구를 보냅니다. 번역이 어려우면 한국어로 보냅니다.
기록된 이벤트는 관제센터 이벤트 로그와 긴급 대응 패널에 바로 나타납니다.
재전송·중계로 여러 번 와도 이벤트는 한 건
연결이 끊긴 동안의 안전 이벤트를 기기에 보관 후 전송
늦게 도착해도 언제 일어났는지 기기 기준으로 기록
서버에 닿지 못한 안전 이벤트는 근로자 기기 안 대기열에 최대 200건, 48시간까지 보관됩니다. 연결이 돌아오면 오래된 것부터 다시 보냅니다.
아니요. 서버는 기기가 붙인 고유 번호(event_id)로 이미 받은 이벤트인지 확인하고, 같은 이벤트는 새로 만들지 않고 경로 기록만 덧붙입니다.
버리지 않습니다. 안전 이벤트는 놓치지 않는 것이 우선이라, 확인 결과를 '실패'로 표시해 저장합니다. 서명 기능이 없는 기기의 이벤트는 '미검증'으로 저장됩니다.
아니요. 근처 기기를 거쳐 전달하는 오프라인 중계는 선택 기능으로 기본값이 꺼져 있으며, 현장 검증을 진행하고 있습니다.