본문으로 건너뛰기

GPS 반경 측정기 (GPS Radius Measure)

문서 정보


TL;DR

체육관 카메라 설치 시 GPS 허용 반경(gpsRadiusMeters)을 현장에서 측정하는 내부 운영 도구입니다. 설치팀이 체육관에서 측정하면, 해당 체육관에 적합한 GPS 반경값을 추천해줍니다.


목차

  1. 왜 필요한가요?
  2. GPS 검증이란?
  3. 측정 방법 (설치팀 가이드)
  4. 측정 결과 해석
  5. gpsRadiusMeters 설정 기준
  6. GPS 한계와 주의사항
  7. 기술 상세
  8. FAQ

왜 필요한가요?

서버에서 사용자가 체육관 근처에 있는지 GPS로 검증합니다. 이때 각 체육관마다 허용 반경(gpsRadiusMeters)이 필요한데, 체육관마다 건물 크기와 GPS 환경이 다르기 때문에 현장에서 직접 측정해야 적절한 값을 설정할 수 있습니다.

  • 반경이 너무 작으면 → 체육관 안에 있는데 검증 실패 (사용자 불편)
  • 반경이 너무 크면 → 체육관 밖에서도 녹화 가능 (보안 약화)

GPS 검증이란?

사용자 앱 (Expo)                    서버
────────────── ──────
사용자 위도/경도 ──────────────→ DB의 체육관 위도/경도와 비교

Haversine 거리 계산

거리 ≤ gpsRadiusMeters ?
↓ ↓
통과 차단
  • 체육관 오너에게 약속하는 것: "사용자가 체육관 근처에 있어야만 녹화 가능"
  • GPS로 보장할 수 있는 것: 엉뚱한 장소(집, 다른 동네)에서의 녹화 차단
  • GPS로 보장 못하는 것: 건물 안/밖의 정확한 경계 구분 (실내 GPS 한계)

측정 방법 (설치팀 가이드)

접속

  1. 모바일 브라우저에서 gps.spoclip.ai 접속
  2. "홈 화면에 추가"로 앱처럼 설치 가능 (PWA)
  3. 위치 권한 허용

측정 순서

1단계  체육관 코트 중앙(카메라 위치)에서 "기준점 설정" 클릭

2단계 GPS 안정화 자동 진행 (움직이지 마세요!)
→ 최소 3초 ~ 최대 10초, GPS가 안정되면 자동 완료
→ 드리프트 등급 표시 (좋음/보통/나쁨)

3단계 체육관 경계(입구, 모서리 등)로 이동하면서 "랩 기록" 4~6회
→ 실제 체육관 크기 측정

4단계 "측정 완료" 클릭

5단계 결과 화면에서 "결과 공유" 클릭 → 카카오톡/슬랙으로 공유

GPS 안정화란?

기준점을 설정하면 앱이 자동으로 GPS 안정화를 수행합니다. 이 과정에서:

  1. 현재 위치의 GPS 신호를 수집하여 **드리프트(GPS가 튀는 정도)**를 측정합니다
  2. 칼만 필터를 초기화하고 현재 위치에 수렴시킵니다
  3. 드리프트 등급을 표시합니다:
드리프트등급의미
< 3m좋음 (녹색)GPS 상태 양호, 자동으로 측정 시작
3~8m보통 (노란)GPS가 약간 불안정, 진행 또는 재시도 선택
> 8m나쁨 (빨강)GPS가 매우 불안정, 실외 이동 권장 (진행도 가능)
정보

GPS가 나쁘다고 측정이 차단되지 않습니다. 이 앱의 목적은 GPS가 얼마나 불안정한지를 파악하는 것이므로, 경고를 확인하고 진행하면 됩니다.

측정 팁

  • 안정화 중에는 움직이지 마세요 — 정확한 드리프트 측정을 위해
  • 기준점 재설정 시에도 안정화가 자동으로 다시 실행됩니다
  • GPS 정확도가 화면 상단에 표시됩니다
    • 녹색 (≤10m): 좋음
    • 노란색 (10~20m): 보통
    • 빨간색 (>20m): 낮음
  • 가능하면 창가나 출입구 근처에서 기준점을 설정하면 GPS 정확도가 올라갑니다

측정 결과 해석

결과 화면 구성

항목의미
지도 시각화기준점(파란) 중심으로 랩 포인트(주황) 분포, 녹색 점선이 추천 반경
최소/최대 거리기준점에서 GPS가 측정한 거리 범위
평균 거리전체 랩의 평균
추천 반경gpsRadiusMeters에 설정할 추천값
이상치극단적으로 튄 값은 자동 제외 (반투명 표시)

추천 반경 계산 방식

추천 반경 = ceil((이상치 제거 후 최대 거리 + 평균 GPS 정확도) / 10) * 10
  • 이상치 제거: IQR(사분위 범위) 기반으로 극단값 자동 제외
  • GPS 정확도 마진: 측정 시점의 GPS 오차를 반경에 포함하여 안전마진 확보
  • 10m 단위 올림: 깔끔한 값으로 반올림

공유 형식 예시

[GPS 반경 측정 결과]
2026. 03. 25. 14:30
기준점: 37.5665, 126.9780

[측정 기록]
#1 코트중앙
0.5m (정확도: 8m) 14:31:02
좌표: 37.566510, 126.978010

#2 입구
15.3m (정확도: 5m) 14:32:15
좌표: 37.566650, 126.978200

[요약]
최소: 0.5m / 최대: 15.3m / 평균: 7.9m
>> 추천 반경: 30m

gpsRadiusMeters 설정 기준

앱의 추천 반경을 기본값으로 사용하되, 체육관 환경에 따라 조정합니다.

환경조정예시
실외 체육관 (축구장, 풋살장)추천 반경 그대로추천 30m → 설정 30m
실내 1층 (농구장, 배드민턴장)추천 반경 × 1.5추천 30m → 설정 50m
실내 고층/지하추천 반경 × 2~3추천 30m → 설정 60~100m
GPS 정확도가 매우 낮은 곳추천 반경 × 2~3 또는 IP 방식 전환 검토-
주의

gpsRadiusMeters가 너무 작으면 정상 사용자가 차단됩니다. 넉넉하게 설정하는 것이 안전합니다. 200m 이내라면 "체육관에 와 있다"고 충분히 판단할 수 있습니다.


GPS 한계와 주의사항

GPS 정확도

환경정확도설명
실외 (맑은 날)3~5m가장 정확, 측정에 적합
실내 1층10~20mWiFi/셀룰러 보조 위치 사용
실내 고층/지하20~50mGPS 신호 약함, 값이 크게 튈 수 있음

GPS 드리프트

같은 자리에 서 있어도 GPS 좌표가 수 미터~수십 미터씩 변합니다. 이것은 정상이며, 이 앱은 칼만 필터로 드리프트를 최소화합니다.

이 앱의 한계

  • 이 앱은 정밀 측정 도구가 아닙니다
  • "이 체육관에서 GPS가 얼마나 튀는지"를 파악하여 적절한 gpsRadiusMeters를 추천하는 가이드 도구입니다
  • 최종 설정값은 운영팀이 환경을 고려하여 판단합니다

기술 상세

거리 계산

Haversine 공식으로 두 GPS 좌표 간 대원 거리를 계산합니다. 서버의 GpsValidationUtil과 동일한 로직을 사용합니다.

지구 반지름: 6,371,000m (WGS84)
정확도: 체육관 크기(~100m) 범위에서 ±0.5%

칼만 필터

GPS 측정값의 노이즈를 실시간으로 평활화합니다.

  • GPS 정확도(accuracy)가 나쁘면 → 이전 위치를 더 신뢰
  • GPS 정확도가 좋으면 → 새 측정값을 더 신뢰
  • 프로세스 노이즈: 2 m²/s (보행 속도 기반)

GPS 안정화 플로우

기준점 설정/재설정/초기화 후 재설정 시 자동 실행됩니다.

  1. 칼만 필터 리셋 (이전 상태 초기화)
  2. GPS 좌표 수집 (0.5초 간격)
  3. 동적 완료 조건: 최소 3초 + 좌표 변화 2m 이내 수렴 (최대 10초 타임아웃)
  4. 드리프트 = 수집된 좌표들의 표준편차
  5. 등급 판정: 좋음(< 3m) / 보통(3~8m) / 나쁨(> 8m)

추천 반경 마진 계산

margin = max(avgAccuracy, drift)
recommended = ceil((filteredMax + margin) / 10) * 10
  • avgAccuracy: 디바이스가 보고하는 GPS 정확도 평균
  • drift: 안정화에서 실측한 GPS 흔들림
  • 둘 다 더하면 과대 추정 → 보수적으로 큰 값만 사용

이상치 필터링 (IQR)

  • 사분위 범위(IQR = Q3 - Q1) 기반
  • Q1 - 1.5×IQR ~ Q3 + 1.5×IQR 범위 밖의 값을 이상치로 판단
  • 데이터 4개 미만이면 필터링하지 않음
  • 이상치는 추천 반경 계산에서 제외되지만, 지도와 목록에는 반투명으로 표시

서버 연관 코드

서버 GPS 검증: src/modules/recording/utils/gps-validation.util.ts
체육관별 반경: gym.gpsRadiusMeters (DB)
기본 반경: env GPS_DEFAULT_RADIUS_METERS (폴백)

FAQ

Q: 실내에서 측정하면 정확한가요?

GPS 정밀도는 떨어지지만, "이 건물 GPS가 얼마나 튀는지"를 파악하는 목적으로는 유효합니다. 튀는 정도를 알아야 적절한 반경을 설정할 수 있으니까요.

Q: 측정을 몇 번 해야 하나요?

최소 5회 이상 권장합니다. 같은 자리에서 5회 + 경계 이동 34회 = 총 89회가 적당합니다.

Q: 추천 반경이 너무 크게 나와요

GPS 정확도가 낮은 환경입니다. 추천값을 기준으로 설정하되, 실제 체육관 크기를 고려하여 조정하세요. 너무 크다면 IP 방식 전환을 검토하세요.

Q: 오프라인에서도 사용할 수 있나요?

앱 자체는 오프라인에서 로딩 가능하지만 (PWA), GPS는 위성 신호가 필요합니다. 완전한 지하에서는 GPS 자체가 동작하지 않을 수 있습니다.

Q: 측정 데이터는 서버에 저장되나요?

아닙니다. 모든 데이터는 기기 내에서만 처리되며 서버에 전송되지 않습니다. 결과는 공유 기능(텍스트 + 이미지)으로 전달합니다.