- Geolocation API의 역할
- 브라우저(클라이언트) 쪽에서 직접 GPS 등으로 위도·경도를 조회합니다.
- 이 덕분에 서버(DB)로 매번 “이 사용자의 최신 위치가 어디냐?”를 묻지 않아도 되어서, 서버의 읽기(쿼리) 부하를 크게 줄일 수 있습니다.
- Valkey 캐싱의 역할
- 서버가 WebSocket으로 받은 위치 정보를 일정 시간(예: 10초) 동안 메모리(Cache)에 저장해 두고,
- 같은 사용자로부터 너무 짧은 시간 안에 중복된 위치 요청이 들어오면 DB나 다른 서비스 호출을 건너뛰도록 합니다.
- 결과적으로 “위치 조회 → 처리 → 저장” 사이클의 빈도를 낮춰서 시스템 전체의 부하를 줄여 줍니다.
- WebSocket 풀링의 역할
- 클라이언트가 매번 HTTP 요청을 날리는 대신, 한 번 연결한 WebSocket 위에서 주기적으로(예: 5초마다) 위치를 푸시(push)합니다.
- 연결·해제 오버헤드가 줄고, 메시지 전달 지연(latency)도 개선됩니다.
흐름 정리
- 클라이언트
- navigator.geolocation.getCurrentPosition() 호출 → 위치 획득
- WebSocket에 {lat, lng, timestamp} 전송
- 서버
- WebSocket 수신
- Valkey 캐시에 “최근 이 사용자의 위치”가 없거나 너무 오래된 데이터면 → 캐시 업데이트 & DB(또는 다른 서비스) 저장
- 그렇지 않으면 → 무시
- 결과
- 매번 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 |