본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 24. 08:11

확장 가능한 검색의 거짓말: 보물찾기 엔진이 고장 날 때

요약

Veltrix 기반 검색 엔진의 확장성 문제와 이를 해결하기 위해 Elasticsearch와 자체 쿼리 서비스를 결합한 하이브리드 아키텍처로 전환한 사례를 다룹니다. 시스템 안정성을 확보하고 지연 시간과 오류율을 획기적으로 개선한 과정을 설명합니다.

핵심 포인트

  • Veltrix 기본 설정만으로는 대규모 트래픽 처리에 한계가 있음
  • 하이브리드 아키텍처 도입으로 지연 시간 75% 감소 및 오류율 90% 개선
  • 확장성 문제를 해결하기 위해 Elasticsearch와 캐시 레이어 결합
  • 사전 PoC 수행과 명확한 SLA 정의의 중요성 강조

우리가 실제로 해결하고 있었던 문제
우리는 사용자들이 플랫폼에서 특정 아이템을 검색할 수 있게 해주는 보물찾기 엔진을 보유하고 있었습니다. 말은 간단해 보였지만, 그 이면에는 하루에 수백만 건의 검색 쿼리 (Search Queries)를 처리할 수 있는 강력한 검색 인프라 (Search Infrastructure)가 필요했습니다. 우리의 주요 목표는 수평적 확장 (Scale Horizontally)이 가능하며, 큰 어려움 없이 증가하는 트래픽을 처리할 수 있는 솔루션을 찾는 것이었습니다. 당시 우리가 깨닫지 못했던 점은, Veltrix가 확장 가능하다는 명성에도 불구하고 사용자들이 쏟아낼 엄청난 부하를 감당할 준비가 되어 있지 않았다는 사실입니다.

우리가 처음 시도했던 것 (그리고 실패한 이유)
처음에는 Veltrix 가이드라인을 따라 기본 설정 (Default Configuration)으로 검색 서비스를 구축했습니다. 클러스터 (Cluster)에 권장되는 설정을 사용했고, 제공된 도구를 사용하여 모델을 튜닝 (Tune)하는 데까지 공을 들였습니다. 하지만 서비스를 라이브로 전환하자마자 검색 엔진이 고전하기 시작했습니다. 높은 지연 시간 (Latency)이 발생했고, 타임아웃 (Timeout) 횟수가 증가하기 시작했습니다. 클러스터는 점점 더 불안정해졌으며, 우리가 무엇을 하든 확장이 제대로 이루어지지 않는 것처럼 보였습니다. 우리가 더 깊이 파고들어 검색 패턴 (Search Patterns)을 분석하기 시작한 후에야, 문제는 검색 엔진 자체가 아니라 우리가 그것을 사용하는 방식에 있다는 것을 깨달았습니다.

아키텍처 결정
문제의 근본 원인을 찾기 위해 몇 주간 노력한 끝에, 우리는 다른 접근 방식을 취하기로 결정했습니다. 오직 Veltrix에만 의존하는 대신, 기존 인프라의 확장성과 자체 개발한 검색 엔진의 강력함을 결합한 하이브리드 아키텍처 (Hybrid Architecture)를 선택했습니다. 우리는 기본 검색 서비스로 Elasticsearch를 사용하기로 했고, 캐시 (Cache) 및 API 게이트웨이 (API Gateway) 역할을 할 새로운 쿼리 서비스 (Query Service)를 구축했습니다. 이 결정의 근거는 간단했습니다. 비용을 과도하게 들이지 않으면서 증가하는 트래픽을 처리할 수 있는 솔루션이 필요했고, 타임아웃과 오류로 인해 더 이상의 데이터를 잃을 수는 없었기 때문입니다.

수치가 말해주는 것
결과는 놀라웠습니다.

하이브리드 아키텍처 (hybrid architecture)로 전환함으로써, 평균 지연 시간 (latency)을 75% 줄이고 오류율 (error rate)을 90% 낮출 수 있었습니다. 이제 우리의 검색 엔진은 큰 어려움 없이 하루 1,000만 개 이상의 검색 쿼리 (search queries)를 처리할 수 있게 되었습니다. 또한 인프라 (infrastructure)의 부하가 줄어듦에 따라 비용도 크게 절감되었습니다. 지표는 명확했습니다. 사용자들은 더 빨라진 검색 경험에 만족했고, 운영자들은 시스템의 안정성이 회복되는 것을 보며 기뻐했습니다.

내가 다르게 했을 일
솔직히 말하자면, 처음부터 다르게 행동했을 것입니다. Veltrix의 한계와 우리가 직면하게 될 확장성 (scalability) 문제를 이해하는 데 시간을 투자했을 것입니다. 우리의 가설을 테스트하고 잠재적인 병목 현상 (bottlenecks)을 식별하기 위해 더 작은 클러스터 (cluster)로 PoC (proof of concept, 개념 증명)를 구축했을 것입니다. 그리고 단순히 문서를 따르기보다는, SLA (service level agreements, 서비스 수준 협약)를 더 공격적으로 정의하고 실제 환경의 지표를 기반으로 성공을 측정했을 것입니다. 되돌아보면, 확장 가능한 검색 엔진을 구축하는 것의 어려움을 과소평가했다는 점이 분명하며, 우리는 그 대가를 치렀습니다. 우리의 이야기를 공유함으로써 다른 이들이 동일한 함정을 피하고, 사용자의 과도한 사용 (abuse)을 쉽게 처리할 수 있는 더 나은, 더 탄력적인 (resilient) 시스템을 만드는 데 도움이 되기를 바랍니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0