이번 글에서는 HNSW(Hierarchical Navigable Small World)가 도대체 무엇이고, 왜 ChatGPT·Claude 같은 LLM 시대의 사실상 표준 검색 알고리즘이 되었는지를 차근차근 풀어보겠습니다. 탄생 배경부터 그래프 구성 방법, 검색 동작 원리, 그리고 같은 자리에서 경쟁하는 IVF·LSH·Annoy·ScaNN·DiskANN까지 한 번에 비교해 드리겠습니다.
2022년 ChatGPT 등장 이후 가장 폭발적으로 성장한 인프라가 무엇인지 묻는다면, 많은 엔지니어들이 벡터 데이터베이스(Vector Database)를 꼽을 것입니다. RAG(Retrieval-Augmented Generation), 시맨틱 검색, 추천 시스템, 이미지·음성 검색이 전부 벡터 검색을 기반으로 동작하기 때문입니다.
그런데 문제가 하나 있습니다. LLM이 만들어내는 임베딩 벡터는 보통 768차원에서 3,072차원에 달합니다. 차원이 이렇게 높으면 우리가 학교에서 배운 모든 검색 알고리즘이 사실상 무력화됩니다. 이른바 차원의 저주(Curse of Dimensionality)라는 현상입니다.
차원 수(예시)
벡터 개수
응답 시간
정확도(Recall)
1억 개 벡터를 매번 전부 비교하는 완전 탐색(Brute-force)은 수 초가 걸립니다. 사용자는 그것을 기다려주지 않습니다. 그래서 등장한 것이 ANN(Approximate Nearest Neighbor, 근사 최근접 이웃)이라는 분야이고, 그 안에서 가장 보편적으로 채택된 알고리즘이 바로 HNSW입니다.
HNSW를 이해하려면 먼저 “Small World(작은 세상)” 현상을 알아야 합니다. 1967년 사회심리학자 스탠리 밀그램은 “지구상 임의의 두 사람은 평균 6명의 지인을 거쳐 연결된다”는 실험 결과를 발표했습니다. 이른바 6단계 분리 이론(Six Degrees of Separation)입니다.
여기서 한 가지 흥미로운 통찰이 나옵니다. 친구 관계 그래프를 보면, 대부분의 사람은 가까운 지역의 친구(짧은 링크)와 함께 아주 멀리 떨어진 곳의 친구(긴 링크) 몇 명을 가지고 있습니다. 짧은 링크는 “정밀 탐색”을, 긴 링크는 “먼 거리 점프”를 가능하게 합니다. 이 두 종류의 링크가 섞여 있을 때, 그래프는 놀라울 만큼 빠르게 임의의 노드에 도달할 수 있습니다.
HNSW는 이 원리를 그대로 자료구조로 옮긴 것입니다. 가까운 이웃들끼리 빽빽하게 연결하면서, 동시에 일부 노드는 멀리까지 점프하는 “긴 다리”를 갖도록 그래프를 설계합니다. 여기에 한 가지 묘수가 더 추가되는데, 바로 계층(Hierarchy)입니다.
HNSW의 구조를 한 그림으로 표현하면 다음과 같습니다. 위로 올라갈수록 노드가 적고, 맨 아래(Layer 0)에는 모든 데이터가 들어 있습니다. 같은 노드가 여러 층에 동시에 존재할 수 있다는 점이 “평행이론” 비유에 딱 맞아떨어집니다.
새로운 벡터가 들어올 때, HNSW는 그 노드가 도달할 최상위 레이어 L을 다음 식으로 무작위 결정합니다.
// 새 노드의 최상위 레벨 계산
L = floor(-ln(rand(0,1)) * mL)
// mL은 레벨 분포를 조절하는 정규화 상수
// 보통 mL = 1 / ln(M) 으로 설정
이 공식은 지수 분포(exponential decay)를 따릅니다. 결과적으로 대부분의 노드는 Layer 0에만 머물고, 극히 일부만 위층까지 올라갑니다. 마치 도시 인구 분포처럼 “위로 갈수록 희박해지는” 자연스러운 피라미드가 만들어지는 것입니다.
- 새 노드의 최상위 레벨 L을 위 공식으로 계산합니다.
- 최상위층(top layer)의 진입점(entry point)에서부터 탐욕적 탐색(Greedy Search)을 시작합니다.
- L+1층까지는 한 노드만 추적하며 가장 가까운 이웃까지 내려갑니다.
- L층부터는 ef_construction 크기의 후보군을 유지하면서 그래프를 따라 내려가며 가장 가까운 M개를 골라 양방향 연결을 만듭니다.
- 이 과정을 Layer 0까지 반복하면 노드 삽입이 완료됩니다.
실제 질의 벡터(query vector)가 들어왔을 때 HNSW가 어떻게 동작하는지 단계별로 살펴보겠습니다. 큰 그림은 의외로 단순합니다. “상위층에서 대략적인 방향을 잡고, 하위층에서 정밀하게 좁힌다”가 전부입니다.
HNSW가 AI 시대에 폭발적으로 채택된 이유는 단순히 “빠르기 때문”만이 아닙니다. 임베딩 기반 AI 시스템과 궁합이 잘 맞는 구체적인 이유가 있습니다.
고전적인 KD-Tree, R-Tree 같은 공간 분할 자료구조는 차원이 20만 넘어가도 성능이 급격히 무너집니다. 반면 HNSW는 그래프 구조이기 때문에 1,536차원, 3,072차원에서도 안정적으로 동작합니다.
RAG 시스템은 사용자 문서가 계속 추가되는 환경입니다. HNSW는 노드 단위 삽입이 자연스럽게 지원되어, 인덱스를 처음부터 다시 만들 필요가 없습니다. 반면 IVF 계열은 클러스터 학습이 필요하여 대량 추가 후 주기적인 재학습이 필요합니다.
대부분의 임베딩 모델은 코사인 유사도(cosine similarity)를 전제로 설계됩니다. HNSW는 거리 함수에 종속적이지 않아서 L2(유클리드), 코사인, 내적, 해밍 거리 등 무엇이든 끼워 넣을 수 있습니다.
메모리가 부족할 때는 HNSW + Product Quantization, HNSW + Scalar Quantization을 함께 써서 사용량을 1/4 ~ 1/16까지 줄일 수 있습니다. Faiss·Milvus 등이 이 조합을 적극 지원합니다.
HNSW가 만능은 아닙니다. 데이터 규모, 메모리 제약, 갱신 빈도에 따라 더 좋은 선택지가 있을 수 있습니다. 같은 ANN 영역에서 자주 비교되는 주요 알고리즘을 정리해 드리겠습니다.
| 알고리즘 | 구조 | 강점 | 약점 | 적합한 상황 |
|---|---|---|---|---|
| HNSW | 계층 그래프 | 고차원 정확도/속도 균형, 동적 삽입 | 메모리 사용량 큼 | RAG, 시맨틱 검색 일반 |
| IVF / IVFPQ | 클러스터 + 양자화 | 메모리 효율, 초대용량 | 사전 학습, 정확도 손실 | 10억+ 벡터 검색 |
| LSH | 해시 버킷 | 분산·이론 단순 | 고차원 품질 저하 | 분산 시스템, 학술 |
| Annoy | 랜덤 트리 포레스트 | mmap, 읽기 전용 빠름 | 동적 추가 곤란 | 음악·콘텐츠 추천 |
| ScaNN | 양자화 + 트리 | 최신 양자화 기법 | 생태계 작음 | CPU 단일 노드 최적화 |
| DiskANN | SSD 기반 그래프 | 메모리 비용 절감 | 구현·튜닝 복잡 | 예산 제약 대규모 시스템 |
- 고차원 임베딩에서도 뛰어난 정확도 / 속도 균형
- 로그 시간 기대 복잡도(O(log N))
- 실시간 노드 추가가 자연스러움
- 거리 함수에 독립적(L2·코사인·내적 자유)
- 양자화·필터링과 결합 용이
- 거의 모든 주요 벡터 DB가 표준 지원
- 그래프 자체가 메모리에 상주해야 하여 RAM 사용량이 큼
- 인덱스 빌드 시간이 IVF 대비 긴 편
- 대규모 일괄 삭제 시 그래프 품질 저하 가능
- 파라미터(M, ef) 튜닝에 경험이 필요함
- 최악의 경우(quasi-uniform 분포)에는 이론적 보장이 약함
HNSW는 학술 알고리즘에서 출발하였지만, 지금은 거의 모든 산업계 벡터 검색 인프라의 기본 옵션이 되었습니다.
- 벡터 DB : Milvus, Weaviate, Qdrant, Vespa, Pinecone(내부 알고리즘 중 하나), pgvector(PostgreSQL 확장), Redis Vector Search
- 검색 엔진 : Elasticsearch, OpenSearch, Solr 등이 ANN 인덱스 옵션으로 HNSW를 채택
- 추천 시스템 : 사용자 임베딩과 콘텐츠 임베딩 사이의 ANN 매칭에 폭넓게 사용
- RAG / LLM 애플리케이션 : LangChain·LlamaIndex 등 프레임워크가 기본 백엔드로 HNSW 지원 DB를 권장
- 대형 클라우드 벤더 : 알리바바, 텐센트, AWS, Azure, GCP 등이 자사 매니지드 벡터 검색 서비스에 HNSW 또는 그 변형을 활용
- M = 16에서 시작하여, 정확도가 부족하면 24·32까지 올려보시기 바랍니다.
- ef_construction = 200이 일반적인 기본값입니다. 인덱스 빌드 시간이 충분하다면 400~500까지 올리면 품질이 좋아집니다.
- ef는 운영 단계에서 트래픽에 따라 동적으로 조절하는 것이 유리합니다. 평소 100, 피크 시간대 50, 정확도 우선 시 300 같은 식입니다.
대략적으로 HNSW의 그래프 메모리는 다음과 같이 추정할 수 있습니다.
// 매우 단순화한 추정식
graph_memory ≈ N × M × 2 × (4 bytes for int32 ID)
vector_memory ≈ N × dim × (4 bytes for float32)
// 예시: 1,000만 × 768차원, M=32
// 그래프 = 10M × 32 × 2 × 4 = 약 2.4 GB
// 벡터 = 10M × 768 × 4 = 약 28.6 GB
// 합계 = 약 31 GB
벡터 자체가 차지하는 비중이 압도적으로 큽니다. 그래서 대규모 운영에서는 HNSW + Scalar Quantization이나 HNSW + Product Quantization 조합으로 벡터 부분을 1/4 ~ 1/16까지 줄이는 것이 일반적입니다.
- 벡터가 100만 개 미만이면서 응답 시간 요구가 느슨한 경우 → 단순 Brute-force가 더 단순하고 정확합니다.
- 10억 개 이상의 초대용량 + 메모리 예산이 빠듯한 경우 → IVFPQ 또는 DiskANN을 검토해 보시기 바랍니다.
- 인덱스를 한 번 빌드한 뒤 거의 갱신되지 않는 읽기 전용 대용량 추천 → Annoy도 좋은 선택지입니다.
처음 HNSW를 공부하면서 떠올린 평행이론 비유는, 단지 재미있는 상상에 그치지 않는다는 점이 가장 흥미로웠습니다. 같은 데이터가 여러 층에 동시에 “존재”하면서 다른 역할을 수행한다는 발상은, 사실 컴퓨터 과학에서 오랫동안 좋은 성과를 내어 온 패턴이기도 합니다. 스킵 리스트, B-Tree, LSM Tree 같은 구조들이 모두 비슷한 철학을 공유합니다.
AI 시대가 “계산을 누가 더 잘하느냐”의 시대처럼 보이지만, 그 밑단에는 결국 “데이터를 어떻게 잘 정리해 두느냐”라는 고전적인 질문이 있습니다. HNSW가 그 답 중 하나로 자리 잡은 과정은, 좋은 자료구조 한 줄이 어떻게 산업의 인프라가 되는지를 보여주는 좋은 사례라고 생각합니다.
중국에서 일하면서 알리바바·텐센트 같은 회사들이 같은 알고리즘을 활용하고 있다는 사실을 접하다 보면, 좋은 알고리즘은 국경과 무관하게 빠르게 표준이 된다는 점을 다시 한번 실감하게 됩니다. HNSW 한 가지만 깊게 알아도, 그 주변으로 가지를 뻗는 흥미로운 주제가 정말 많습니다.
'AI' 카테고리의 다른 글
| 중국 AI 업계, 무료의 시대 저문다. Doubao 유료화·알리바바 클라우드 34% 인상이 보내는 신호 (1) | 2026.05.16 |
|---|---|
| 휴머노이드 로봇은 정말 사람의 일자리를 대체할까: 2026년 현장이 보여주는 진짜 답 (0) | 2026.05.16 |
| 2026 휴머노이드 로봇 패권전쟁: 중국이 글로벌 90%를 가져간 진짜 이유 (1) | 2026.05.16 |
| 텐센트는 게임 회사만이 아니다: 1,200개 기업을 거느린 거대 투자 지주회사의 또 다른 얼굴 (0) | 2026.05.16 |
| Cerebras(CBRS) IPO 첫날 68% 폭등, 엔비디아 대항마라고 부를 수 있을까 (1) | 2026.05.16 |