노트

역색인과 검색 엔진

Inverted Index and Search Engines

백엔드#db · 연결된 개념 9개

쉽게 말하면

역색인은 책 뒤 찾아보기처럼 '이 단어가 어느 쪽에 나오나'를 미리 적어 둔 목록이에요. 책을 처음부터 다 읽지 않아도 검색어가 든 문서들을 바로 찾고, 얼마나 잘 맞는지 순위도 매기죠.

비유가 깨지는 곳 찾아보기는 책과 함께 인쇄되지만 검색 엔진은 원본 DB와 따로 사는 복사본이에요. 원본이 바뀌면 색인도 갱신해야 해서 시차가 생기니, 재고·가격은 원본에서 다시 확인해요.

역색인(inverted index)은 "각 문서에 어떤 단어가 있나" 대신 거꾸로 "이 단어가 어느 문서들에 있나"를 미리 만들어 둔 자료구조다. 책 뒤의 찾아보기와 같다. OpenSearch·Elasticsearch 같은 검색 엔진은 이 구조로 전문 검색(full-text search)을 빠르게 한다.

"노트북" → [문서3, 문서17, 문서42]
"가방"   → [문서3, 문서88]
"노트북 가방" 검색 → 두 목록의 교집합·점수 계산

왜 DB로 검색하지 않나

  • LIKE '%노트북%'은 앞이 와일드카드라 일반 인덱스를 못 타고 모든 행을 훑는다(DB 인덱스와 트레이드오프)
  • 형태소 분석(morphological analysis, 한국어 조사 분리), 오타 보정, 동의어, 자동완성이 어렵다
  • "검색어와 얼마나 잘 맞나"를 점수(BM25(Best Matching 25) 등)로 매겨 정렬하는 기능이 없다

RDB 용어와 대응

관계형 DBOpenSearch
테이블인덱스
행도큐먼트(JSON)
열필드
스키마매핑(mapping)

"인덱스를 설정한다"는 말은 검색용 데이터 묶음을 만들고, 어떤 필드를 어떤 분석기(analyzer)로 쪼개 색인할지(매핑) 정한다는 뜻이다. DB의 B-tree 인덱스와는 다른 의미다.

대가: 동기화

검색 엔진은 원본이 아니라 복사본이다. 데이터를 복사·가공해 넣어야 하고, 원본이 바뀌면 색인도 갱신해야 한다.

빠른 조회를 위해 구조를 미리 만들어 둔다는 점은 해시 테이블과 같은 발상이다. 여러 저장소의 역할 분담은 저장소 역할 분담 (DB·캐시·큐·검색)를 본다.

출처: OpenSearch 소개: Inverted index · Relevance

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • SEO

    SEO(Search Engine Optimization)는 검색 엔진이 페이지를 잘 찾고(크롤링, crawling), 이해해서 저장하고(색인, indexing), 알맞은 검색어로 노출하도록(순위, ranking) 사이트를 다듬는 일이다. 개발자가 맡는 부분은 대부분 앞의 두 단계, 즉 "검색 엔진이 읽을 수 있게 만드는 것"이다.

  • 브라우저 안에서 도는 RAG 구현기

    서버·요금 없이 방문자 브라우저에서 EmbeddingGemma 2로 찾고 Gemma 4로 답하는 RAG를 이 사이트에 넣은 사례. 프론트엔드 개발자가 알아야 할 개념을 구현 순서대로 짚는다.

  • 이진 탐색 트리

    각 노드가 자식을 최대 둘 가지고, 왼쪽 서브트리의 모든 값은 노드보다 작고 오른쪽은 크다는 규칙을 지키는 트리. 비교할 때마다 한쪽 가지를 버리므로 정렬된 데이터를 빠르게 찾고 넣을 수 있다.

  • 로컬 퍼스트 아키텍처

    클라이언트 기기의 로컬 데이터를 진실의 원천(Source of Truth)으로 삼고, 서버는 동기화와 백업을 맡는 설계 방식. 전통적인 "서버가 원천, 클라이언트는 요청해서 그린다" 구조를 뒤집어 로컬 DB → UI 렌더링 → 백그라운드 동기화 순서로 흐른다.

  • 읽기 전용 복제본

    읽기 전용 복제본은 주 DB(primary, writer)의 데이터를 복제해 읽기 요청만 받는 DB 인스턴스다. 쓰기는 writer 한 곳에서 처리하고, 읽기를 여러 복제본으로 나눠 부하를 분산한다.

보기 옵션