MongoDB에서 $geoNear 쿼리를 사용하기 위해 지오스페셜 인덱스를 생성하는 방법

ZEDY·2024년 7월 1일
0

개발

목록 보기
10/11

최근 프로젝트에서 MongoDB를 사용하여 위치 기반 검색 기능을 구현해야 했습니다. 이를 위해 MongoDB의 $geoNear 쿼리를 사용하기로 했고, 이를 위해서는 해당 필드에 지오스페셜 인덱스를 생성해야 한다는 사실을 알게 되었습니다.

planner returned error :: caused by :: unable to find index for $geoNear query' on server ~~. The full response is {"ok": 0.0, "errmsg": "error processing query: ns=mobby.geoLocations limit=2Tree: GEONEAR  field=position maxdist=200 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error :: caused by :: unable to find index for $geoNear query", "code": 291, "codeName": "NoQueryExecutionPlans"}

현재 오류는 'position' 필드에 대해 지오스페셜 인덱스가 없기 때문에 발생합니다.

다음은 그 과정을 정리한 내용입니다.

1. MongoDB 셸에 접속하기

먼저 터미널을 열고 MongoDB 셸에 접속합니다.

mongosh

2. 데이터베이스 선택

작업할 데이터베이스를 선택합니다. 여기서는 mobby 데이터베이스를 선택합니다.

use mobby

3. 지오스페셜 인덱스 생성

geoLocations 컬렉션의 position 필드에 대해 2dsphere 인덱스를 생성합니다.

db.geoLocations.createIndex({ position: "2dsphere" })

이제 position 필드에 대한 인덱스가 생성되었으므로 $geoNear 쿼리를 사용할 수 있습니다.

4. MongoDB 서버 상태 확인 및 시작

서버에서 MongoDB가 실행 중인지 확인하고, 실행 중이 아니라면 서버를 시작합니다.

# MongoDB 상태 확인
systemctl status mongod

# MongoDB 서버 시작
sudo systemctl start mongod

이 과정을 통해 MongoDB에서 위치 기반 검색을 위한 준비를 마쳤습니다.


개발적으로 성장한 경험

이번 과정을 통해 MongoDB에서 지오스페셜 인덱스를 생성하고 $geoNear 쿼리를 사용하는 방법을 익히게 되었습니다. 이를 통해 다음과 같은 성장을 이룰 수 있었습니다.

  1. 데이터베이스 인덱싱의 중요성 이해 : 지오스페셜 인덱스의 생성 과정을 통해 인덱싱의 중요성과 그 성능 향상 효과를 체감할 수 있었습니다.
  2. MongoDB의 다양한 기능 습득 : 단순한 CRUD 작업을 넘어, MongoDB의 고급 기능을 활용할 수 있게 되었습니다.
  3. 문제 해결 능력 향상 : $geoNear 쿼리 사용 중 발생한 문제를 해결하면서 문제 해결 능력이 향상되었습니다.
  4. 서버 관리 능력 강화 : MongoDB 서버의 상태를 확인하고 제어하는 과정을 통해 서버 관리 능력을 강화할 수 있었습니다.
  5. 위치 기반 서비스 구현 역량 향상 : 위치 기반 서비스를 구현하기 위한 기초 지식을 쌓았으며, 이를 통해 향후 관련 기능을 개발하는 데 자신감을 갖게 되었습니다.

이번 경험을 통해 데이터베이스 인덱스와 위치 기반 서비스에 대한 이해도가 크게 향상되었으며, 이를 바탕으로 더 나은 서비스를 개발할 수 있는 역량을 갖추게 되었습니다.

profile
Spring Boot 백엔드 주니어 개발자

0개의 댓글