범위·정밀도·종료 시각을 서버가 서명한 session으로 고정합니다.
주변 친구 서비스
설계
최신 좌표가 있다고 보여 줄 권한까지 있는 것은 아닙니다. 동의·만료·친구·차단 상태를 결과 직전에 다시 확인하고 철회가 cache와 예약 알림까지 닫히게 합니다.
짧은 TTL 위치는 근접 후보를 찾는 데만 사용합니다. 결과와 알림은 최신 관계·동의 정책을 다시 확인하고, 철회 event가 위치·cell index·cache·예약 알림을 같은 version으로 제거하게 합니다.
좌표보다 먼저 동의와 관계를 판정한다
“근처”라는 후보 생성과 “보여도 되는가”라는 인가는 다른 문제입니다. 공유 중지·정확도 수준·block·친구 해제가 결과와 알림보다 먼저 적용되어야 합니다.
권한, device binding, accuracy, stale 시각, 속도를 검사합니다.
후보마다 friend edge, block, scope, expiry를 확인합니다.
enter 전이와 cooldown 뒤, 전송 직전에 다시 opt-in을 봅니다.
최근 위치·관계·알림을 서로 다른 수명으로 둔다
ingestion은 유효한 관측값을 이벤트로 만들고, indexer가 현재 위치와 TTL 공간 인덱스를 갱신합니다. read API는 후보를 좁힌 뒤 친구 그래프와 동의를 확인합니다. notification은 별도 queue로 격리합니다.
동의 철회가 위치·cache·예약 알림을 모두 닫게 하려면 어떻게 할 것인가?
versioned opt-in + short TTL + send-time authorization
coarse cell의 최근 위치는 후보 생성에만 쓰고, 읽기와 알림 전송 직전에 친구·차단·공유 session의 policy version을 확인합니다. 철회 event는 current location, index, cache, queued notification을 함께 purge합니다.
선택 이유
- 철회 전 생성된 queue event도 provider 호출 전에 차단합니다.
- 공간 index가 오래 남아도 읽기 API는 정책 오류에서 fail closed 합니다.
- revoke-to-hide를 여러 저장 계층의 완료 조건으로 측정할 수 있습니다.
TTL 만료만 기다려 위치와 알림을 자연 삭제
철회 뒤 최대 TTL 동안 검색 결과와 예약 알림에 사용자가 남아 개인정보 노출 경계를 지키지 못합니다.
감수한 단점
- 읽기와 알림 경로가 정책 서비스 가용성에 의존합니다.
- purge fan-out과 policy version cache 무효화가 복잡합니다.
- 짧은 TTL과 coarse cell은 위치 신선도와 정확도를 낮춥니다.
쓰기의 최신성과 읽기의 인가를 각각 보장한다
클라이언트는 관측값을 보낼 뿐이고, 서버가 그것을 보관·노출·알림해도 되는지를 판정합니다. observed_at과 TTL은 오래된 표본이 현재처럼 보이는 일을 줄입니다.
동의 범위·정밀도·expiry를 서버가 기록합니다.
권한, device, accuracy, idempotency를 확인합니다.
순서 fence 뒤 cell과 current location을 갱신합니다.
반경 후보에 graph, block, scope를 batch로 적용합니다.
enter 상태와 cooldown을 기록하고 전송 직전 재검사합니다.
정확도와 즉시성의 이득은 노출·비용과 함께 온다
위치 정확도와 update 빈도를 높이면 즉시성은 좋아지지만 배터리·비용·노출 위험도 커집니다. 필요한 정밀도만 짧게 보유하고 권한을 매번 다시 확인합니다.
| 선택 | 장점 | 제약 | 권장 판단 |
|---|---|---|---|
| 정확 좌표 표시 | 거리·만남 안내가 직관적 | stalking·재식별 위험이 큼 | 강한 상호 동의, 짧은 명시 세션에 한정 |
| 거리 밴드 / 대략 셀 | 프라이버시와 UI 안정성 개선 | 정밀한 길 안내에는 부족 | 주변 친구의 기본 노출값 |
| Redis GEO 최근 인덱스 | 반경 후보 검색이 단순 | 정본·친구 인가·보존은 별도 문제 | 짧은 TTL의 점 기반 근접 검색 |
| H3/geohash 셀 routing | shard와 hot cell 제어가 명확 | 경계 병합·해상도 선택이 필요 | 대규모 event routing, 도시 편향 |
| enter마다 푸시 | 즉시성이 높음 | GPS 흔들림·밀집 지역 spam | hysteresis + cooldown + opt-in으로 대체 |
여덟 가지 실패를 노출 차단과 복구 검증으로 다룬다
중지한 위치가 cache나 예약된 알림에 잠시 남을 수 있습니다.
인덱스가 뒤처져 오래된 위치가 후보에 섞일 수 있습니다.
observed_at lag 목표를 확인합니다.행사장 같은 셀에서 후보 수와 p99가 급증합니다.
관계를 확신할 수 없는데 위치를 보여 주면 안 됩니다.
늦은 표본이나 낮은 정확도가 false enter를 만들 수 있습니다.
일부 사용자가 검색에서 사라지거나 결과가 불완전해집니다.
근접 알림이 늦어져 이미 의미가 없어질 수 있습니다.
탈퇴·삭제한 위치의 파생 복사본이 남을 위험이 있습니다.
개인정보·관측·비용을 좌표 밖에서 운영한다
원본 좌표·친구 목록·token을 trace와 URL에서 제외합니다. TLS, device binding, 역할 기반 접근, 최소 정밀도·보존과 opt-out/delete fanout을 기본으로 둡니다.
ingest decision, 위치 나이, index lag, hot cell 후보 수, graph 허용/거부, transition, 철회→purge 지연을 ID·좌표 없이 단계별로 봅니다.
배터리·업로드·event stream·TTL 메모리·graph batch·notification fanout·삭제 운영이 함께 증가합니다. TTL을 늘리면 stale 후보와 삭제 노출 창도 커집니다.
답변 구조 보기 5단계
- 위치 공유를 opt-in session으로 만들고 scope·정밀도·expiry·policy version을 저장한다.
- TTL 공간 인덱스는 후보만 만들며 최종 읽기는 친구·차단·공유 정책을 다시 확인한다.
- out-of-order 위치는 device sequence·captured_at으로 막고 위치 나이를 응답에 노출한다.
- 근접 알림은 hysteresis·cooldown 뒤에도 전송 직전 동의와 policy version을 재검사한다.
- revoke-to-hide, purge lag, stale exposure 표본을 한 철회 사건으로 추적한다. 이번 선택: coarse cell·짧은 TTL·최종 인가를 결합하고 철회 event가 위치·cache·예약 알림을 함께 닫게 한다. 깨지는 신호: 철회 뒤 검색 결과가 남거나 오래된 queue event가 provider에 전달된다. 다음 검증: 출퇴근 hot cell과 graph 장애를 재현해 fail-closed 지연, 배터리, revoke-to-hide 60초 목표를 함께 측정한다.
근접 계산을 설명하고 철회와 예약 알림 race를 운영하기
가까움보다 동의·친구·차단·만료가 먼저라는 경계를 답합니다.
- TTL spatial index는 후보만 만든다고 설명합니다.
- policy version과 send-time check를 말합니다.
- hysteresis·cooldown과 철회를 다른 중복 경계로 나눕니다.
철회 직전 생성된 알림을 남겨 revoke-to-hide를 끝까지 추적합니다.
- location·cell·cache·queue purge lag를 관측합니다.
- graph 장애에서 위치 노출이 fail closed인지 확인합니다.
- provider timeout 재시도에서도 revoked event가 전송되지 않는지 검증합니다.
기술 규격·공식 문서
- W3C — Geolocation: 웹 위치 권한, 위치 취득과
watchPosition()모델. - Android Developers — Request location permissions: 전경/백그라운드 및 정밀/대략 위치 권한.
- Apple Developer — Requesting authorization to use location services: Core Location의 인가 수준과 변경 처리.
- Redis Docs — Geospatial: 좌표 저장과 반경·상자 기반 후보 검색.
- Firebase — Firebase Cloud Messaging: 앱 서버와 플랫폼 전송 계층의 메시지 모델.
- Apple Developer — Setting up a remote notification server: APNs provider server와 원격 알림 설정.
공간 인덱스의 후보 검색을 구체화합니다.
문의·정정
사실 오류·출처 정정은 문의·정정 페이지로 알려 주세요.