#Backend

퀸잇 검색 시스템의 여정: WHERE title LIKE '%keyword%'에서 Hybrid Search까지

퀸잇 검색 시스템의 여정: WHERE title LIKE '%keyword%'에서 Hybrid Search까지
01

Summary

MySQL LIKE에서 하이브리드 검색까지: 퀸잇 검색 시스템의 5년 간의 진화기

단순 키워드 매칭을 넘어 개인화 벡터 검색과 RRF 도입으로 거래액을 끌어올린 실전 엔지니어링 이야기

이 아티클은 4050 여성 패션 플랫폼 '퀸잇'이 서비스 초기의 단순 데이터베이스 검색에서 대형 장애와 다양한 시행착오를 거치며 고도화된 하이브리드 검색 엔진으로 성장해 나가는 여정을 그립니다. 엘라스틱서치를 활용한 시맨틱 검색, 개인화 벡터 검색의 도입 과정과 비즈니스 성과를 투명하게 공개합니다. 이종의 검색 결과를 효과적으로 융합하기 위한 RRF 적용 방법과 아키텍처적 트레이드오프를 심도 있게 다룹니다.

  • 01MySQL LIKE 쿼리 출시 4시간 만에 Elasticsearch로 전격 전환하며 비즈니스 민첩성 확보
  • 02사용자별 관심사 임베딩을 이용한 개인화 KNN 검색으로 검색 기여 거래액 20% 이상 향상
  • 03자연어 기반 시맨틱 검색 도입으로 검색 실패율을 기존 대비 89% 이상 드라마틱하게 개선
  • 04스케일이 서로 다른 BM25와 시맨틱 검색 결과를 순위 기반 RRF 알고리즘을 통해 완벽하게 융합
  • 05블랙 프라이데이 장애를 기반으로 Resilience4j 서킷 브레이커와 다중 Fallback 아키텍처 구축

RECOMMENDATION

단순 텍스트 매칭 검색의 한계를 느끼고 개인화 추천이나 자연어 의미 분석 기술을 검색 시스템에 도입하고자 하는 백엔드 엔지니어들에게 적극 추천합니다.

The Problem

초기 퀸잇에는 검색 시스템이 없거나 MySQL LIKE '%keyword%' 조건문에 의존하여 검색 속도가 느리고 동의어 및 형태소 분석이 불가능한 한계가 있었습니다. 이후 도입된 키워드 검색(BM25) 또한 단순 텍스트 일치 점수에만 의존하여 사용자의 개인적 선호도를 반영하지 못하고 자연어로 구성된 검색어의 의미를 파악하지 못하는 한계가 있었습니다.

The Solution

Elasticsearch 기반 역인덱스 매칭과 function_score 기반 리랭킹을 거쳐 유저 행동 기반의 개인화 벡터 검색과 ML 서버(FAISS) 기반의 시맨틱 검색을 구축했습니다. 각 검색 결과는 RRF(Reciprocal Rank Fusion) 알고리즘을 통해 단일 순위로 병합되었으며, 장애 전파를 막기 위해 Resilience4j 기반의 서킷 브레이커와 다단계 Fallback 구조를 설계했습니다.

The Result

시맨틱 검색 도입을 통해 검색 실패율이 4.3%에서 0.47%로 약 89% 감소하였으며, 개인화 및 RRF 검색 실험을 통해 전체 거래액과 검색 기여 거래액 지표를 크게 증대시켰습니다. 또한 대규모 트래픽 장애 환경에서도 외부 시스템 지연을 격리하고 캐싱된 BM25 결과를 제공하여 서비스 가용성을 대폭 확보했습니다.

Trade-off

검색의 빠른 지표 검증을 위해 검색 서버와 ML 서버에 비즈니스 로직이 분산되어 복잡도가 늘어났으며, FAISS 사용 시 사전 필터링(Pre-filtering)이 불가능하여 결과의 품질과 속도가 제한적이었습니다. 또한 단순 교집합 선노출 방식은 오히려 개인화 추천 점수를 희석시켜 클릭률(CTR)을 떨어뜨리는 부작용이 관찰되었습니다.

03

Key Concepts

Concept · 01

RRF (Reciprocal Rank Fusion)

서로 다른 성격의 다중 검색 엔진이 반환한 결과들을 절댓값 점수가 아닌 상대적인 순위(Rank) 기반으로 계산하여 자연스럽게 하나로 병합하는 순위 융합 알고리즘입니다.

  • 텍스트 일치가 강력한 BM25와 의미적 유사도가 높은 시맨틱 검색 결과를 고르게 정렬하기 위해 사용했습니다.
  • 상수 k를 60으로 설정하여 상위 결과물에 적절한 부스팅 점수가 주어지도록 설계했습니다.
Concept · 02

Personalized Vector Search

사용자의 과거 클릭 및 구매 이력 등 행동 정보를 기반으로 한 유저 임베딩 벡터와 상품 벡터를 고차원 공간에 함께 사상하여 가장 인접한 맞춤형 상품을 찾아내는 기법입니다.

  • Elasticsearch KNN을 활용해 개인화 임베딩 공간에서 유사 상품을 실시간 조회하여 적용했습니다.
  • A/B 테스트 검증을 진행해 제어군 대비 유의미한 전체 거래액 및 CTR 증분을 달성했습니다.
Concept · 03

Resilience4j 기반 Fallback

마이크로서비스나 외부 연동 시스템 장애 시, 특정 서비스의 무반응이나 에러가 앱 전체로 전파되지 않도록 호출 흐름을 즉시 차단하고 대체 동작을 정의하는 탄력성 확보 패턴입니다.

  • Elasticsearch 혹은 ML 서버 호출 실패 시 사전에 캐싱해 둔 임시 BM25 top-K 결과를 비동기로 전환 적용했습니다.
  • 네트워크 타임아웃 및 에러 비율에 따라 서킷을 자동으로 조절하여 트래픽 폭주 시에도 주요 지면의 생존성을 강화했습니다.