GPS 반경 측정기 (GPS Radius Measure)
문서 정보
- 작성일: 2026-03-25
- 최종 업데이트: 2026-03-25
- 버전: v1.0.0
- 앱 URL: https://gps.spoclip.ai
체육관 카메라 설치 시 GPS 허용 반경(gpsRadiusMeters)을 현장에서 측정하는 내부 운영 도구입니다. 설치팀이 체육관에서 측정하면, 해당 체육관에 적합한 GPS 반경값을 추천해줍니다.
목차
왜 필요한가요?
서버에서 사용자가 체육관 근처에 있는지 GPS로 검증합니다. 이때 각 체육관마다 허용 반경(gpsRadiusMeters)이 필요한데, 체육관마다 건물 크기와 GPS 환경이 다르기 때문에 현장에서 직접 측정해야 적절한 값을 설정할 수 있습니다.
- 반경이 너무 작으면 → 체육관 안에 있는데 검증 실패 (사용자 불편)
- 반경이 너무 크면 → 체육관 밖에서도 녹화 가능 (보안 약화)
GPS 검증이란?
사용자 앱 (Expo) 서버
────────────── ──────
사용자 위도/경도 ──────────────→ DB의 체육관 위도/경도와 비교
↓
Haversine 거리 계산
↓
거리 ≤ gpsRadiusMeters ?
↓ ↓
통과 차단
- 체육관 오너에게 약속하는 것: "사용자가 체육관 근처에 있어야만 녹화 가능"
- GPS로 보장할 수 있는 것: 엉뚱한 장소(집, 다른 동네)에서의 녹화 차단
- GPS로 보장 못하는 것: 건물 안/밖의 정확한 경계 구분 (실내 GPS 한계)
측정 방법 (설치팀 가이드)
접속
- 모바일 브라우저에서 gps.spoclip.ai 접속
- "홈 화면에 추가"로 앱처럼 설치 가능 (PWA)
- 위치 권한 허용
측정 순서
1단계 체육관 코트 중앙(카메라 위치)에서 "기준점 설정" 클릭
2단계 GPS 안정화 자동 진행 (움직이지 마세요!)
→ 최소 3초 ~ 최대 10초, GPS가 안정되면 자동 완료
→ 드리프트 등급 표시 (좋음/보통/나쁨)
3단계 체육관 경계(입구, 모서리 등)로 이동하면서 "랩 기록" 4~6회
→ 실제 체육관 크기 측정
4단계 "측정 완료" 클릭
5단계 결과 화면에서 "결과 공유" 클릭 → 카카오톡/슬랙으로 공유
GPS 안정화란?
기준점을 설정하면 앱이 자동으로 GPS 안정화를 수행합니다. 이 과정에서:
- 현재 위치의 GPS 신호를 수집하여 **드리프트(GPS가 튀는 정도)**를 측정합니다
- 칼만 필터를 초기화하고 현재 위치에 수렴시킵니다
- 드리프트 등급을 표시합니다:
| 드리프트 | 등급 | 의미 |
|---|---|---|
| < 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~20m | WiFi/셀룰러 보조 위치 사용 |
| 실내 고층/지하 | 20~50m | GPS 신호 약함, 값이 크게 튈 수 있음 |
GPS 드리프트
같은 자리에 서 있어도 GPS 좌표가 수 미터~수십 미터씩 변합니다. 이것은 정상이며, 이 앱은 칼만 필터로 드리프트를 최소화합니다.
이 앱의 한계
- 이 앱은 정밀 측정 도구가 아닙니다
- "이 체육관에서 GPS가 얼마나 튀는지"를 파악하여 적절한 gpsRadiusMeters를 추천하는 가이드 도구입니다
- 최종 설정값은 운영팀이 환경을 고려하여 판단합니다
기술 상세
거리 계산
Haversine 공식으로 두 GPS 좌표 간 대원 거리를 계산합니다. 서버의 GpsValidationUtil과 동일한 로직을 사용합니다.
지구 반지름: 6,371,000m (WGS84)
정확도: 체육관 크기(~100m) 범위에서 ±0.5%
칼만 필터
GPS 측정값의 노이즈를 실시간으로 평활화합니다.
- GPS 정확도(accuracy)가 나쁘면 → 이전 위치를 더 신뢰
- GPS 정확도가 좋으면 → 새 측정값을 더 신뢰
- 프로세스 노이즈: 2 m²/s (보행 속도 기반)
GPS 안정화 플로우
기준점 설정/재설정/초기화 후 재설정 시 자동 실행됩니다.
- 칼만 필터 리셋 (이전 상태 초기화)
- GPS 좌표 수집 (0.5초 간격)
- 동적 완료 조건: 최소 3초 + 좌표 변화 2m 이내 수렴 (최대 10초 타임아웃)
- 드리프트 = 수집된 좌표들의 표준편차
- 등급 판정: 좋음(< 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: 측정 데이터는 서버에 저장되나요?
아닙니다. 모든 데이터는 기기 내에서만 처리되며 서버에 전송되지 않습니다. 결과는 공유 기능(텍스트 + 이미지)으로 전달합니다.