
RAG 검색 속도 9배 높였다가 서비스 망가진 이유: ANN의 함정
정확한 검색(Exact Search)을 근사 검색(ANN)으로 교체해 성능을 극대화하려다 맞닥뜨린 치명적인 정확도 저하 문제와 그 해결책을 분석합니다.
많은 기업과 개발자들이 RAG(검색 증강 생성) 시스템을 구축할 때 가장 먼저 직면하는 벽은 ‘속도’입니다. 데이터셋이 수만 건을 넘어 수백만 건으로 늘어나면, 사용자의 질문에 맞는 최적의 문서를 찾는 시간이 길어지며 LLM의 응답 속도까지 함께 느려집니다. 이때 가장 매력적으로 보이는 해결책이 바로 ‘근사 최근접 이웃(Approximate Nearest Neighbor, ANN)’ 검색으로의 전환입니다.
이론적으로 ANN은 검색 시간을 획기적으로 단축합니다. 실제로 어떤 시스템에서는 검색 속도를 9배 이상 끌어올리기도 합니다. 하지만 여기서 치명적인 문제가 발생합니다. 속도를 얻은 대가로 ‘정확도’라는 핵심 가치를 잃어버리는 것입니다. RAG 시스템에서 검색 단계의 작은 오차는 LLM의 환각(Hallucination)으로 이어지며, 결국 사용자는 ‘빠르지만 엉뚱한 대답을 하는’ 쓸모없는 AI를 경험하게 됩니다.
정확한 검색(Exact Search)과 근사 검색(ANN)의 본질적 차이
우리가 흔히 말하는 ‘정확한 검색’은 벡터 공간 내의 모든 데이터 포인트와 쿼리 벡터 간의 거리를 일일이 계산하는 방식입니다. 이를 L2 거리나 코사인 유사도 기반의 전수 조사(Brute-force)라고도 합니다. 데이터가 적을 때는 가장 확실하고 정확한 방법이지만, 데이터 양이 $N$개일 때 시간 복잡도가 $O(N)$에 비례하므로 확장성에 치명적인 한계가 있습니다.
반면, 근사 검색(ANN)은 모든 데이터를 뒤지는 대신, 데이터를 미리 클러스터링하거나 그래프 구조로 연결하여 ‘정답일 가능성이 높은 영역’만 빠르게 훑는 방식입니다. HNSW(Hierarchical Navigable Small World)나 IVFFlat 같은 알고리즘이 대표적입니다. 이는 시간 복잡도를 $O(\log N)$ 수준으로 낮춰주어 폭발적인 속도 향상을 가져오지만, 구조적으로 ‘최적의 정답’이 아닌 ‘충분히 가까운 정답’을 반환한다는 리스크를 안고 있습니다.
속도 9배 향상이 불러온 ‘시스템 붕괴’의 메커니즘
단순히 속도가 빨라졌는데 왜 시스템이 ‘망가졌다’고 표현할까요? RAG 시스템의 파이프라인을 살펴보면 그 이유가 명확해집니다. RAG는 [질문 $\rightarrow$ 벡터 검색 $\rightarrow$ 컨텍스트 추출 $\rightarrow$ LLM 생성]의 단계를 거칩니다. 여기서 검색 단계의 정확도가 100%에서 80%로 떨어진다고 가정해 봅시다.
- 컨텍스트 오염: 검색 결과 상위 K개 문서 중에 정답이 포함되지 않거나, 관련 없는 문서가 섞여 들어옵니다.
- LLM의 혼란: LLM은 제공된 컨텍스트가 정답이라고 믿고 생성하는 경향이 있습니다. 잘못된 정보가 입력되면 LLM은 이를 그럴듯하게 가공하여 ‘확신에 찬 거짓말’을 내뱉습니다.
- 신뢰도 급락: 사용자는 AI가 빠르게 대답하는 것에 감탄하지만, 내용이 틀렸다는 것을 깨닫는 순간 서비스 전체에 대한 신뢰를 저버립니다.
결국 9배 빠른 속도는 아무런 의미가 없게 됩니다. 정답을 맞히지 못하는 검색 엔진은 아무리 빨라도 가치가 없기 때문입니다. 이는 전형적인 ‘최적화의 함정’으로, 비즈니스 핵심 지표(정확도)를 희생해 기술적 지표(레이턴시)를 개선했을 때 발생하는 현상입니다.
실제 사례: 기술 문서 챗봇의 실패와 교훈
한 엔지니어링 팀은 수십만 페이지의 API 문서를 기반으로 RAG 시스템을 구축했습니다. 초기에는 Flat 인덱스를 사용하여 정확한 검색을 수행했으나, 응답 시간이 3초를 넘어가자 사용자 불만이 제기되었습니다. 팀은 즉시 HNSW 인덱스로 전환했고, 검색 속도는 0.3초로 단축되었습니다. 지표상으로는 완벽한 성공처럼 보였습니다.
하지만 실제 운영 단계에서 문제가 터졌습니다. 매우 구체적인 함수 이름이나 에러 코드를 검색할 때, ANN 알고리즘이 유사한 다른 함수를 추천하는 경우가 빈번해진 것입니다. 개발자들에게 ‘비슷한 함수’는 정답이 아니라 ‘오답’입니다. 정확한 API 명세가 필요한 상황에서 근사치 결과가 전달되자, AI는 존재하지 않는 파라미터를 안내하기 시작했고 이는 곧바로 서비스 장애 수준의 클레임으로 이어졌습니다.
성능과 정확도 사이의 균형을 잡는 전략
그렇다면 우리는 다시 느린 전수 조사 방식으로 돌아가야 할까요? 그렇지 않습니다. 현대적인 벡터 데이터베이스와 검색 전략은 이 트레이드오프를 극복하기 위한 여러 장치를 제공합니다.
| 전략 | 작동 원리 | 기대 효과 |
|---|---|---|
| 하이브리드 검색 (Hybrid Search) | 벡터 검색(ANN) + 키워드 검색(BM25) 결합 | 고유 명사, 에러 코드 등 정확한 매칭 보완 |
| 리랭킹 (Re-ranking) | ANN으로 후보군 추출 $\rightarrow$ 정밀 모델로 재정렬 | 속도는 유지하면서 최종 정확도 극대화 |
| 인덱스 파라미터 튜닝 | efConstruction, M 값 상향 조정 | 메모리 사용량은 늘지만 검색 정확도 향상 |
가장 권장되는 패턴은 ‘거친 필터링 후 정밀 정렬’입니다. 먼저 ANN을 통해 수백 개의 후보군을 빠르게 뽑아내고, 그 후보군에 대해서만 가벼운 Cross-Encoder 모델을 사용하여 다시 순위를 매기는 리랭킹 과정을 추가하는 것입니다. 이렇게 하면 전체 검색 속도는 여전히 빠르면서도, 최종적으로 LLM에 전달되는 컨텍스트의 품질은 정확한 검색에 근접하게 유지할 수 있습니다.
실무자를 위한 액션 아이템: 지금 당장 점검할 것
현재 RAG 시스템의 속도를 높이기 위해 ANN 도입을 고려 중이거나 이미 도입했다면, 다음의 체크리스트를 통해 시스템의 건강 상태를 진단하십시오.
- Recall@K 측정: 정확한 검색 결과와 ANN 결과가 얼마나 일치하는지 Recall 지표를 정량적으로 측정하십시오. 단순히 ‘잘 나오는 것 같다’는 느낌은 위험합니다.
- 키워드 매칭 레이어 추가: 제품명, ID, 전문 용어가 중요한 도메인이라면 반드시 BM25 같은 전통적인 키워드 검색을 병행하는 하이브리드 구조를 채택하십시오.
- 리랭커(Re-ranker) 도입: BGE-Reranker와 같은 오픈소스 리랭커를 파이프라인 끝단에 배치하여, 잘못 검색된 문서가 LLM으로 흘러 들어가는 것을 차단하십시오.
- 데이터 파티셔닝: 전체 데이터를 하나의 인덱스로 관리하지 말고, 메타데이터 필터링을 통해 검색 범위를 먼저 좁힌 뒤 ANN을 수행하여 검색 효율과 정확도를 동시에 잡으십시오.
기술적 최적화는 항상 ‘무엇을 희생하고 무엇을 얻는가’의 문제입니다. 속도는 사용자 경험을 개선하지만, 정확도는 서비스의 존재 이유를 결정합니다. 9배 빠른 속도보다 중요한 것은, 단 한 번의 응답이라도 사용자가 신뢰할 수 있는 정답을 제공하는 것입니다.
FAQ
I Replaced Exact Search with Approximate Search in My RAG System — 9x Faster, But It Broke의 핵심 쟁점은 무엇인가요?
핵심 문제 정의, 비용 구조, 실제 적용 방법, 리스크를 함께 봐야 합니다.
I Replaced Exact Search with Approximate Search in My RAG System — 9x Faster, But It Broke를 바로 도입해도 되나요?
작은 범위에서 실험하고 데이터를 확인한 뒤 단계적으로 확대하는 편이 안전합니다.
실무에서 가장 먼저 확인할 것은 무엇인가요?
목표 지표, 대상 사용자, 예산 범위, 운영 책임자를 먼저 명확히 해야 합니다.
법률이나 정책 이슈도 함께 봐야 하나요?
네. 데이터 수집 방식, 플랫폼 정책, 개인정보 관련 제한을 반드시 점검해야 합니다.
성과를 어떻게 측정하면 좋나요?
비용, 전환율, 클릭률, 운영 공수, 재사용 가능성 같은 지표를 함께 보는 것이 좋습니다.
관련 글 추천
- https://infobuza.com/2026/04/27/20260427-5nve0x/
- https://infobuza.com/2026/04/27/20260427-eez2up/
지금 바로 시작할 수 있는 실무 액션
- 현재 팀의 AI 활용 범위와 검증 절차를 먼저 문서화합니다.
- 작은 파일럿 프로젝트로 KPI를 정하고 2~4주 단위로 검증합니다.
- 보안, 품질, 리뷰 기준을 자동화 도구와 함께 연결합니다.

