TIL

위치 기반 흐름 정리

ohs020105 2025. 4. 13. 18:02
  1. Geolocation API의 역할
    • 브라우저(클라이언트) 쪽에서 직접 GPS 등으로 위도·경도를 조회합니다.
    • 이 덕분에 서버(DB)로 매번 “이 사용자의 최신 위치가 어디냐?”를 묻지 않아도 되어서, 서버의 읽기(쿼리) 부하를 크게 줄일 수 있습니다.
  2. Valkey 캐싱의 역할
    • 서버가 WebSocket으로 받은 위치 정보를 일정 시간(예: 10초) 동안 메모리(Cache)에 저장해 두고,
    • 같은 사용자로부터 너무 짧은 시간 안에 중복된 위치 요청이 들어오면 DB나 다른 서비스 호출을 건너뛰도록 합니다.
    • 결과적으로 “위치 조회 → 처리 → 저장” 사이클의 빈도를 낮춰서 시스템 전체의 부하를 줄여 줍니다.
  3. WebSocket 풀링의 역할
    • 클라이언트가 매번 HTTP 요청을 날리는 대신, 한 번 연결한 WebSocket 위에서 주기적으로(예: 5초마다) 위치를 푸시(push)합니다.
    • 연결·해제 오버헤드가 줄고, 메시지 전달 지연(latency)도 개선됩니다.

흐름 정리

  1. 클라이언트
    • navigator.geolocation.getCurrentPosition() 호출 → 위치 획득
    • WebSocket에 {lat, lng, timestamp} 전송
  2. 서버
    • WebSocket 수신
    • Valkey 캐시에 “최근 이 사용자의 위치”가 없거나 너무 오래된 데이터면 → 캐시 업데이트 & DB(또는 다른 서비스) 저장
    • 그렇지 않으면 → 무시
  3. 결과
    • 매번 DB를 조회하지 않으므로, 사용자 수가 늘어나도 서버 부하가 급격히 증가하지 않음
    • 응답 시간(지연)이 크게 줄어들어 UX 개선

따라서 “원래는 DB에서 수시로 좌표를 조회했는데, Geolocation API로 클라이언트에서 직접 받고, Valkey 캐싱으로 중복 호출을 막아서 데이터 부담을 줄였다”

'TIL' 카테고리의 다른 글

EC2 (nest.js) 서버 배포 2  (0) 2025.04.17
ec2 서버 배포 (nest.js)  (0) 2025.04.17
80일차 TIL  (0) 2025.03.07
79일차 TIL (토스 구현 3일차)  (0) 2025.03.06
78일차 TIL (토스 결제 구현 2일차)  (1) 2025.03.04