BLE미들웨어GoRedisMVP
BLE 체크인 미들웨어 MVP 구현 — Go + Redis + Hygate
2026. 7. 2.2분 읽기
배경
프로젝트: ble-checkin-middleware (신규, Go)
Hygate BLE 게이트웨이가 TCP로 전송하는 BLE 신호 데이터를 수신해서, 중복 처리를 막고 COP(Check-Out Point) API로 체크인 이벤트를 전달하는 미들웨어가 필요했다. 기존에는 게이트웨이가 직접 COP API를 호출했는데, 디바운싱·라우팅·재시도 로직을 중앙화하기 위해 별도 미들웨어를 만들었다.
아키텍처
Hygate Gateway ──TCP──▶ ble-checkin-middleware ──HTTP──▶ COP API
│
Redis (디바운싱 + 라우팅)
구현 내용
TCP 서버
고루틴 기반으로 여러 Hygate 게이트웨이의 동시 접속을 처리. processLine을 recover로 감싸 panic에도 연결이 끊기지 않도록 안전망 추가.
CSV 파싱 — 실제 Hygate 포맷 파악
처음에 필드 인덱스를 잘못 매핑했다가 디버그 로그로 실제 포맷을 확인 후 수정:
실제 Hygate CSV 포맷:
BLE_PAYLOAD, BEACON_MAC, RSSI, BATTERY, GATEWAY_MAC
인덱스: [0] [1] [2] [3] [4]
RSSI 필터링
-80 dBm 미만 신호는 드롭. 너무 약한 신호는 오탐을 유발하기 때문.
Redis 디바운싱 (TTL 30초)
GATEWAY_MAC + BEACON_MAC 조합을 키로 Redis에 30초 TTL로 저장. 30초 내 같은 신호는 COP API 호출을 건너뜀.
Redis 라우팅
GATEWAY_MAC → COP API URL 매핑을 Redis에 저장. 어드민이 런타임에 게이트웨이별 엔드포인트를 바꿀 수 있다.
HTTP 전송 — 지수 백오프 재시도
COP API 호출 실패 시 최대 3회, 지수 백오프로 재시도.
EventDecider 인터페이스
현재는 단순 IN 판정이지만, A/B 게이트웨이 RSSI 피크 비교 기반 입퇴장 판정으로 교체 가능하도록 인터페이스로 분리.
추가 설계 문서
docs/direction-detection.md: Hygate A/B 게이트웨이 RSSI 피크 비교 기반 입퇴장 방향 판정 설계docs/infra-roadmap.md: EC2 MVP → 고가용성 인프라 확장 로드맵
결과
| 항목 | 내용 |
|---|---|
| 언어 | Go 1.22 |
| 의존성 | Redis (go-redis), net/http |
| 처리량 | 고루틴 기반 무제한 동시 접속 |
| 중복 방지 | Redis TTL 30초 디바운싱 |
| 신뢰성 | 지수 백오프 3회 재시도 + panic recover |