DynamoDB는 지리 공간 쿼리를 지원하나요?
네이티브로는 아닙니다. DynamoDB에는 지리 공간 데이터 타입도, 거리나 경계 상자 연산자도 없습니다. 지리 공간 쿼리는 대신 모델링 패턴입니다. 가까운 지점끼리 나란히 정렬되도록 지오해시나 S2 셀 ID를 키에 저장하고, 검색 영역을 덮는 셀들을 쿼리한 다음, 애플리케이션에서 정확한 거리로 다듬습니다.
지오해시 패턴
지오해시(또는 AWS의 Geo Library for DynamoDB가 쓰는 S2 셀 ID)는 위도/경도를 문자열이나 숫자로 인코딩하며, 그 접두사 가 격자 셀을 식별합니다 — 결정적으로, 가까운 지점끼리 접두사를 공유합니다. 파티션 키나 정렬 키로 저장하면 "내 근처의 지점"이 평범한 키 범위 쿼리가 됩니다:
- 박스 쿼리 — 사각형을 덮는 셀들을 계산하고, 각 셀을
Query한 뒤 결과를 병합합니다. - 반경 쿼리 — 원을 덮는 셀들로 같은 일을 한 다음, 클라이언트에서 정확한 거리로 필터링합니다.
해상도가 중요합니다. 대부분의 검색이 대상 셀과 그 이웃만 건드리도록 셀 크기를 고르세요.
정밀도가 쿼리 수를 어떻게 바꾸나
에펠탑 48.8584, 2.2945를 봅시다. 지오해시는 u09tunquc입니다. 640 m 떨어진 48.8619, 2.2876의 트로카데로는 u09tup1c0입니다. 둘은 u09tu를 공유하므로 정밀도 5에서는 같은 셀에 있습니다. 정밀도 6에서는 아닙니다. 서로 보이는 거리의 두 랜드마크가 다른 셀에 있고, 그래서 셀 쿼리는 언제나 자기 셀뿐 아니라 여덟 이웃까지 포함해야 합니다.
문자 하나마다 상자가 좁아집니다. 이 위도에서:
| 정밀도 | 셀 크기 | 반경 5 km가 건드리는 셀 수 |
|---|---|---|
| 4 | 25.7 × 19.6 km | 1~4 |
| 5 | 3.2 × 4.9 km | 10~12 |
| 6 | 0.81 × 0.61 km | 185~193 |
각 행이 범위인 것은 개수가 원의 크기만이 아니라 원이 격자에 어떻게 걸리는지에도 달렸기 때문입니다. 셀은 적도로 갈수록 넓어지기도 합니다. 경도 1도가 더 넓은 땅을 덮으니까요. 같은 정밀도 5 셀이 적도에서는 폭 4.9 km이고 파리에서는 3.2 km입니다.
세 번째 열이 설계 결정 지점입니다. 정밀도 6은 "반경 5 km 안의 식당" 하나를 대략 190번의 Query 호출로 바꿉니다. 정밀도 4는 그것을 한두 번의 호출로 만들지만, 500 km² 상자 안의 모든 것을 건네주고 클라이언트에서 버리게 합니다.
무는 것은 돈이 아닙니다. 각각 4 KB 미만을 최종적 일관성으로 돌려주는 그 190번의 쿼리는 95 읽기 단위, us-east-1 온디맨드 요율로 검색당 약 $0.000012, 백만 번에 $11.88입니다. 진짜 비용은 왕복입니다. 동시에 보내고 팬아웃을 제한하세요. 그러지 않으면 검색 endpoint의 p99는 마침 가장 느렸던 셀 쿼리가 됩니다.
라이브러리와 도구
AWS는 S2 기반 패턴을 보여 주는 Geo Library for Amazon DynamoDB(Java)를 게시했고, 다른 언어로의 커뮤니티 포팅(예: Node.js용 dynamodb-geo)도 있습니다. 채택하기 전에 유지보수 상태를 확인하세요 — 패턴 자체는 직접 구현할 만큼 단순합니다.
검색 엔진을 대신 써야 할 때
풍부한 지오 술어(폴리곤, 거리순 정렬, 지오와 전문 검색의 결합)가 필요하다면 테이블을 전용 인덱스로 복제하세요 — 전문 검색을 처리하는 바로 그 제로 ETL OpenSearch 통합이 네이티브 지리 공간 쿼리를 갖춘 검색 엔진도 제공합니다.
더 알아보기
이 패턴은 본질적으로 정렬 키 요령입니다 — 정렬 키 전략 가이드가 도구 상자를 다루고, 표현식 빌더가 셀 쿼리에 쓰는 begins_with/BETWEEN 조건을 생성하며, DynoTable로는 실제 항목에서 인코딩된 키를 들여다볼 수 있습니다.
참고 자료
- Geo Library for Amazon DynamoDB – Part 1: Table Structure — AWS Mobile Blog
- Implementing geohashing at scale in serverless web applications — AWS Compute Blog
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026-07-13에 마지막으로 검증했습니다.
지오해시, 셀 크기, 커버리지 개수는 2026-07-28에 위도 48.8584에서 표준 base32 지오해시 인코더로 계산했습니다. u09tunquc는 아무 지오해시 도구로나 확인해 보세요. 검색당 비용은 저희가 동기화한 요금 테이블의 us-east-1 온디맨드 읽기 요율을 사용합니다(AWS 요금 API 2026-07-22 발행).