grep

Engineering

Elasticsearch 성능 비교: Box vs Polygon, 어떤 방식이 더 빠를까?

Remy여기어때

2025년 3월 28일

원문에서 보기 ↗

안녕하세요! 여기어때 검색플랫폼개발팀의 레미입니다.

Elasticsearch에서 같은 사각형 영역을 검색할 때, Box 방식과 Polygon 방식의 성능은 어떻게 다를까요? 공간 검색은 위치 기반 서비스를 구현할 때 매우 중요한 기능입니다. 특히, 검색 영역이 사각형인 경우, Box와 Polygon 두 가지 접근법 중 어떤 것이 효율적인지 판단하는 것은 검색 속도와 효율성을 높이는 데 큰 영향을 미칠 수 있습니다.

이번 글에서는 두 방식을 비교 분석하고, 그 결과를 여러분과 공유하려 합니다. 🚀

1. 테스트 개요

📌 목적

동일한 검색 영역에 대해 Polygon 방식과 Box 방식의 성능을 비교하여 최적의 검색 방식을 선정하기 위함입니다. 특히, 박스 방식은 좌표 두 개(좌상단, 우하단)를 사용 하고, 폴리곤 방식은 사각형의 네 꼭짓점을 모두 명시하기 때문에 이 차이가 성능에 어떤 영향을 미치는지 알아보았습니다.

📝 테스트 환경

검색 쿼리 방식

📊 측정 항목

  1. 🕒 Mean_Test_Time(ms): 평균 응답 시간 (낮을수록 우수)
  2. ⚡ TPS (Transaction Per Second): 초당 처리 건수 (높을수록 우수)
  3. 📦 Mean_response_length: 평균 응답 데이터 크기

이제 본격적으로 두 방식의 성능을 비교해볼까요? 🤔

2. 테스트 결과 요약

📊 특이사항:

📌사실, 테스트 전에는 박스 방식이 더 단순한 구조를 가지므로 성능이 더 좋을 것이라고 예상했지만, 결과는 다소 의외였습니다. 예상 외로 두 방식 모두 비슷한 응답 속도를 보여주었기 때문입니다. 이는 Elasticsearch 내부의 공간 필터링 처리 방식이 매우 최적화되어 있다는 것을 보여주는 사례입니다.

3. 분석 결과

3.1 📌이론적 성능 예상

  1. 🟦 박스 방식:****

2. 🔺 폴리곤 방식:****

3.2 🔍 실제 테스트 결과 차이 원인 분석

하지만 실제 결과는 예상과 다르게 두 방식의 성능 차이가 거의 없었습니다. 🧐 그 이유는 Elasticsearch가 geo_point 필드를 활용해 최적화된 인덱스를 생성하기 때문입니다. 또한, 사각형 영역의 경우 GeoBoundingBoxQuery나 GeoPolygonQuery 모두 동일한 공간 필터링 로직을 사용하기에, 큰 차이를 보이지 않았던 것으로 추측됩니다.

즉, Elasticsearch 내부에서는 사각형 영역을 다각형으로 변환한 후 동일한 처리 방식으로 검색을 수행하고 있는 것일 수도 있습니다. 결국 쿼리 입력 방식만 다를 뿐, 처리 성능에는 영향을 주지 않았던 셈입니다.

4. ⚙️ Relation 옵션별 성능 차이 설명

Elasticsearch에서는 공간 검색 쿼리에 대해 relation 옵션을 제공합니다. 기본값은 intersects로, 검색 영역이 지정된 좌표와 겹치는지 여부를 판단합니다. 이번 테스트에서는 기본 옵션인 intersects가 사용되었으며, 두 방식 모두 동일한 필터링 방식을 적용해 비교가 이루어졌습니다.

추가적으로, within 또는 contains와 같은 다른 관계 옵션을 사용할 경우, 결과에 차이가 발생할 수 있을 것으로 보입니다. 특히, within은 검색 대상이 영역 내부에 완전히 포함되어야 하기 때문에 처리 비용이 높아질 수 있으며, 이로 인해 응답 시간이나 TPS에 영향을 미칠 수 있습니다.

5. 🏆 결론

테스트 결과, 박스 방식과 폴리곤 방식 모두 전반적으로 유사한 성능을 보였습니다. 평균 응답 시간(MTT), TPS 모두 큰 차이가 없었으며 안정적인 성능을 유지했습니다. 평균 응답 길이(Mean_response_length) 또한 두 방식에서 동일한 결과를 나타냈습니다.

  1. 평균 응답 시간(MTT), TPS 모두 큰 차이가 없었으며 안정적인 성능을 유지했습니다.
  2. 평균 응답 길이(Mean_response_length) 또한 두 방식에서 동일한 결과를 나타냈습니다.
  3. 결론적으로:

✨ 결국, 두 방식의 성능 차이는 무시할 수준이었다는 점에서, 상황에 따라 적절한 방식을 선택하면 될 것입니다. 🚀

6. 🚀 최종 정리 및 활용 방안

본 테스트 결과는 신뢰할 수 있으며, Elasticsearch 공간 검색 방식 선택 시 유용한 참고자료로 활용될 수 있습니다.

상황에 따라 적절한 검색 방식을 선택하는 것이 중요합니다. 또한 실제 서비스에서 다양한 쿼리 방식의 성능을 지속적으로 측정하고 개선해 나가는 것이 가장 이상적인 접근법입니다.

7. 💡왜 이런 테스트가 중요한가?

Elasticsearch의 공간 검색 성능은 실제 서비스에서 사용자 경험에 직결됩니다. 예를 들어, 위치 기반 숙소 추천 서비스에서는 검색 반응 속도가 곧 사용자 만족도로 이어지기 때문입니다. 특히 모바일 환경에서는 몇 밀리초의 차이도 체감될 수 있기 때문에, 어떤 쿼리 방식이 더 효율적인지 미리 실험해보는 것은 매우 가치 있는 작업입니다.

또한, 이 같은 테스트 결과는 팀 내 기술 공유 문서나 코드 리뷰 시에도 기준점이 되어줄 수 있으며, 실무에서 막연히 ‘더 빠를 것 같아 보이는 방식’ 대신 ‘실제 검증된 방식’을 선택하는 데 큰 도움이 됩니다.

8. 🔍향후 확장 테스트 아이디어

이번 테스트는 동일한 사각형 영역 내에서 Box vs Polygon만 비교한 실험이었습니다.

하지만 다음과 같은 확장 테스트도 흥미로울 수 있습니다:

이러한 실험들을 통해 Elasticsearch 공간 검색의 한계를 더 깊이 이해하고, 다양한 실무 적용 포인트를 발굴해볼 수 있습니다.

읽어주셔서 감사합니다. 🙌