📚FOS Study
홈카테고리
홈카테고리

카테고리

  • AI 페이지로 이동
    • RAG 페이지로 이동
    • agents 페이지로 이동
    • BMAD Method — AI 에이전트로 애자일 개발하는 방법론
    • Claude Code의 Skill 시스템 - 개발자를 위한 AI 자동화의 새로운 차원
    • Claude Code 멀티 에이전트 — Teams
    • 멀티모달 LLM (Multimodal Large Language Model)
  • architecture 페이지로 이동
    • 캐시 설계 전략 총정리
    • 디자인 패턴
    • 분산 트랜잭션
  • css 페이지로 이동
    • FlexBox 페이지로 이동
  • database 페이지로 이동
    • mysql 페이지로 이동
    • opensearch 페이지로 이동
    • redis 페이지로 이동
    • 김영한의-실전-데이터베이스-설계 페이지로 이동
    • 커넥션 풀 크기는 얼마나 조정해야할까?
    • 인덱스 - DB 성능 최적화의 핵심
    • 역정규화 (Denormalization)
    • 데이터 베이스 정규화
  • devops 페이지로 이동
    • docker 페이지로 이동
    • k8s 페이지로 이동
    • k8s-in-action 페이지로 이동
    • monitoring 페이지로 이동
  • go 페이지로 이동
    • Go 언어 기본 학습
  • http 페이지로 이동
    • HTTP Connection Pool
  • interview 페이지로 이동
    • 210812 페이지로 이동
    • 뱅크샐러드 AI Native Server Engineer
    • CJ 올리브영 지원 문항
    • CJ 올리브영 커머스플랫폼유닛 Back-End 개발 지원 자료
    • 마이리얼트립 - Platform Solutions실 회원주문개발 Product Engineer
    • NHN 서비스개발센터 AI서비스개발팀
    • nhn gameenvil console backend 직무 인터뷰 준비
    • 면접을 대비해봅시다
    • Tossplace Node.js Developer
    • 토스플레이스 Node.js 백엔드 컬처핏
  • java 페이지로 이동
    • jdbc 페이지로 이동
    • opentelemetry 페이지로 이동
    • spring 페이지로 이동
    • spring-batch 페이지로 이동
    • 더_자바_코드를_조작하는_다양한_방법 페이지로 이동
    • Java의 로깅 환경
    • MDC (Mapped Diagnostic Context)
    • OpenTelemetry 란 무엇인가?
    • Java StampedLock — 읽기 폭주에도 쓰기가 밀리지 않는 락
    • Virtual Thread와 Project Loom
  • javascript 페이지로 이동
    • Data_Structures_and_Algorithms 페이지로 이동
    • Heap 페이지로 이동
    • typescript 페이지로 이동
    • AbortController
    • Async Iterator와 제너레이터
    • CommonJS와 ECMAScript Modules
    • 제너레이터(Generator)
    • Http Client
    • Node.js
    • npm vs pnpm 선택기준은 무엇인가요?
    • `setImmediate()`
  • kafka 페이지로 이동
    • Kafka 기본
    • Kafka를 사용하여 **데이터 정합성**은 어떻게 유지해야 할까?
    • 메시지 전송 신뢰성
  • linux 페이지로 이동
    • fsync — 리눅스 파일 동기화 시스템 콜
    • tmux — Terminal Multiplexer
  • network 페이지로 이동
    • L2(스위치)와 L3(라우터)의 역할 차이
    • L4와 VIP(Virtual IP Address)
    • IP Subnet
  • react 페이지로 이동
    • JSX 페이지로 이동
    • VirtualDOM 페이지로 이동
    • v16 페이지로 이동
  • task 페이지로 이동
    • ai-service-team 페이지로 이동
    • nsc-slot 페이지로 이동
    • the-future-company 페이지로 이동
📚FOS Study

개발 학습 기록을 정리하는 블로그입니다.

바로가기

  • 홈
  • 카테고리

소셜

  • GitHub
  • Source Repository

© 2025 FOS Study. Built with Next.js & Tailwind CSS

목록으로 돌아가기
🤖AI/ RAG

HNSW (Hierarchical Navigable Small World graph)

약 3분
2026년 1월 30일
GitHub에서 보기

HNSW (Hierarchical Navigable Small World graph)

  • Hierarchical -> 여러 계층으로 구성됨
  • Navigable -> 그래프를 탐색하기 쉬움
  • Small World graph -> "작은 세계 네트워크" 구조를 기반으로 함
    • (노드들이 멀어 보이지만 몇 개의 링크만 타면 도달 가능)
  • 즉, 고차원 벡터를 빠르게 탐색하기 위해 만든 계층적 그래프 알고리즘

HNSW는 어떤 종류의 알고리즘인가?

ANN(Aproximate Nearest Neighbor) 알고리즘의 한 종류

즉, 정확한 최근접 이웃(kNN)을 찾는 대신, 거의 정확한 결과(98~99%)를 아주 빠르게 찾는 알고리즘

HNSW는 ANN 계열 알고리즘 중에서도 성능(속도, 정확도, 메모리) 균형이 가장 좋다고 평가받아서 사실상 "표준"처럼 자리 잡음

HNSW의 핵심 아이디어

HNSW는 다음 구조로 동작함

  • 1. 여러 층(Layer)의 그래프 구조로 벡터를 저장
    • 위층은 거친/넓은 탐색
    • 아래층은 정교/근접 탐색
  • 2. 쿼리 벡터가 들어오면
    • 높은 층에서 시작해서 candidate node를 찾고
    • 점점 아래층으로 "내려오며" 더 가까운 이웃을 탐색
  • 3. 최종적으로 가장 가까운 k개의 이웃(kNN 후보)을 빠르게 찾음
    • 그래서 속도는 O(log N)에 가깝고, 정확도는 brute-force 대비 매우 높음

왜 HNSW가 ANN 알고리즘 중 가장 많이 쓰일까?

  • 1. 정확도가 매우 높다
    • 다른 ANN 기법(LSH, IVF, PQ, Annoy)에 비해 정확도가 압도적으로 높다
    • (예) 데이터 100만개, ef_search=200 기준
      • 정확도 97 ~ 99%
    • HNSW의 강점은

      "저렴한 비용으로 높은 정확도"를 유지할 수 있다는 점

  • 2. 검색 속도가 매우 빠르다 (logarithmic)
    • 데이터 수가 증가해도 성능 저하가 크지 않다
  • 3. Incremental Insert 지원
    • HNSW는 온라인 삽입(insert)을 빠르게 처리할 수 있다
    • 벡터를 추가해도 전체 인덱스를 다시 만들 필요 없음
    • RAG 시스템은 "문서 추가 -> embedding -> 저장" 구조라 이 기능이 매우 중요함
    • Faiss의 IVF-PQ는 index rebuild가 필요해 불편
  • 4. 모든 곳에서 지원됨 (산업 표준)
    • 거의 모든 벡터 DB와 검색 엔진이 HNSW 지원
      • OpenSearch
      • Pinecone
      • Milvus
      • Faiss
      • NMSLIB 등
    • 왜냐면
      • 운영 난이도가 낮고
      • 품질이 좋고
      • 튜닝이 쉬움
  • 5. 파라미터 튜닝이 직관적이며 효과가 좋다
    • HNSW 주요 파라미터 3개만 조절하면 됨
    • M : 그래프 branching factor
    • ef_construction : 인덱스 빌드 정확도
    • ef_search : 검색 품질 (정확도)
    • 특히 ef_search는 검색속도 <-> 정확도 사이의 슬라이더처럼 사용
      • ef_search를 높이면 -> 정확도 올라감, 속도 낮아짐
      • ef_search를 낮추면 -> 속도 올라감, 정확도 낮아짐
    • 운영 환경에서 품질/속도를 조절하기 쉬움

HNSW의 약점은?

  • 메모리 사용량이 크다
    • 그래프를 유지해야 하므로 embedding 하나 저장할 떄 메모리 오버헤드가 생김
  • 인덱스 빌드 비용이 크다
    • HNSW index build 시간은 PQ 기반 알고리즘보다 느릴 수 있음
  • 정말 초대규모(수십업 벡터 이상)면 다른 솔루션(IVF-PQ)가 필요
    • 하지만, 대부분 서비스(수백만 ~ 수천만)는 HNSW로 ㅊ우분
    • RAG 시스템도 대부분 HNSW 선호
AI 카테고리의 다른 글 보기수정 제안하기

댓글

댓글을 불러오는 중...
목차
  • HNSW (Hierarchical Navigable Small World graph)
  • HNSW는 어떤 종류의 알고리즘인가?
  • HNSW의 핵심 아이디어
  • 왜 HNSW가 ANN 알고리즘 중 가장 많이 쓰일까?
  • HNSW의 약점은?