피드로 돌아가기
Building Spatial Memory: Why I Built a "Pinterest for the Physical World" and What I Learned
Dev.toDev.to
Database

PostGIS와 Redis GEO 기반 50m 반경 실시간 공간 쿼리 시스템 구축

Building Spatial Memory: Why I Built a "Pinterest for the Physical World" and What I Learned

KevinTen2026년 6월 25일11intermediate

Context

위치 기반 메모리 앵커링 서비스 구현을 위해 고정밀 GPS 좌표 기반의 데이터 조회 필요성 대두. 단순 Float 타입의 위경도 저장 및 Haversine 수식 기반 애플리케이션 연산은 데이터 규모 증가 시 성능 병목과 연산 부하를 초래하는 한계 존재.

Technical Solution

  • PostGIS의 R-tree 기반 Spatial Indexing을 활용한 효율적인 proximity search 구조 설계
  • GEOGRAPHY(POINT, 4326) 타입을 통한 지구 곡률이 반영된 정밀한 거리 계산 수행
  • ST_DWithin 함수를 사용하여 지정된 반경(50m) 내의 데이터만 필터링하는 최적화된 쿼리 구현
  • 관광지 등 핫스팟 지역의 반복적인 거리 쿼리 부하 분산을 위해 Redis GEO 명령어를 활용한 캐싱 레이어 도입
  • Redis에는 Memory ID만 저장하고 상세 데이터는 PostgreSQL에서 조회하는 Look-aside 캐싱 전략으로 메모리 효율 극대화

- 대규모 공간 데이터 쿼리 시 Application Level 연산 대신 DB 레벨의 Spatial Index(GIST 등) 사용 검토 - 잦은 조회 지역의 성능 최적화를 위해 Redis GEO를 활용한 ID 기반 1차 필터링 구조 적용 - 공간 데이터 타입 설정 시 좌표계(SRID 4326)와 데이터 정밀도 요구사항 일치 여부 확인

원문 읽기