Skip to content

검색 엔진 원리

서론

타오바오에서 "빨간 원피스"를 검색하면, 0.1초 만에 수십억 개의 상품 중에서 가장 관련성 높은 결과를 찾아줍니다 -- 이것이 어떻게 가능한 걸까? 검색 엔진은 인터넷의 가장 핵심적인 인프라 중 하나입니다. Google부터 이커머스 사내 검색까지, 핵심 원리는 모두 같습니다: 역색인 + 관련성 정렬.

이 글에서 배울 내용

이 장을 마치면 다음을 얻게 됩니다:

  • 역색인: 검색 엔진의 가장 핵심적인 데이터 구조 이해
  • 형태소 분석 기술: 한국어/중국어 형태소 분석의 과제와 일반적인 해결 방안 이해
  • 관련성 정렬: TF-IDF와 BM25의 기본 원리 파악
  • Elasticsearch: 가장 인기 있는 검색 엔진의 아키텍처와 사용 시나리오 이해
  • 검색 최적화: 동의어, 오타 교정, 하이라이트 등 실용적인 검색 기능 파악
내용핵심 개념
제 1장역색인정방향 색인 vs 역색인
제 2장형태소 분석과 텍스트 분석한국어/중국어 형태소 분석, 불용어, 어간 추출
제 3장관련성 정렬TF-IDF, BM25
제 4장Elasticsearch분산 아키텍처, 샤드, 복제본
제 5장검색 최적화동의어, 오타 교정, 자동 완성

0. 전경도: 검색의 본질은 무엇인가?

검색의 본질은 정보 검색(Information Retrieval) 문제입니다: 주어진 질의에 대해 방대한 문서에서 가장 관련성 높은 결과를 찾아 관련성 순으로 정렬하여 반환합니다.

이 과정은 두 단계로 나뉩니다:

  • 색인 단계(오프라인): 미리 모든 문서를 처리하여 효율적인 검색 구조를 구축
  • 질의 단계(온라인): 사용자가 키워드를 입력하면 빠르게 일치하는 문서를 찾아 정렬

왜 데이터베이스 LIKE 쿼리를 사용할 수 없나요?

SELECT * FROM products WHERE name LIKE '%红色连衣裙%'는 검색이 가능해 보이지만, 풀 테이블 스캔이 필요합니다 -- 모든 레코드를 하나씩 검사해야 합니다. 데이터가 수백만 건에 달하면 이 쿼리는 사용이 불가능할 정도로 느려집니다. 역색인은 이 O(n) 연산을 O(1) 조회로 변환합니다.


1. 역색인: 검색 엔진의 "심장"

전통적인 데이터베이스는 정방향 색인을 사용합니다: 문서 ID에서 문서 내용을 찾습니다. 검색 엔진은 역색인을 사용합니다: 키워드에서 해당 키워드를 포함하는 문서 목록을 찾습니다.

Inverted Index
Type a search term to see how an inverted index works
Source documents
Doc 1Apple is a common fruit
Doc 2Apple released a new phone
Doc 3I like eating fruit and vegetables
Doc 4This phone has a practical price
Doc 5The fruit shop has apples and bananas
Inverted index table
apple[1][2][5]
fruit[1][3][5]
phone[2][4]
company[2]
release[2]
like[3]
vegetables[3]
price[4]
practical[4]
banana[5]
common[1]
색인 유형방향검색 방식적용 시나리오
정방향 색인문서 -> 내용ID를 알고 내용을 조회데이터베이스 기본키 조회
역색인키워드 -> 문서 목록키워드를 알고 문서를 조회전문 검색

역색인 구축 과정

  1. 문서 수집: 검색 대상이 되는 모든 문서 획득
  2. 형태소 분석(Tokenization): 문서를 개별 단어로 분할
  3. 매핑 구축: 각 단어가 어떤 문서에 나타나는지 기록 (위치, 빈도 등 포함)
  4. 영속 저장: 색인을 디스크에 기록하여 빠른 조회 지원

2. 형태소 분석과 텍스트 분석

형태소 분석은 검색 엔진의 첫 번째 단계이자, 한국어/중국어 검색의 가장 큰 과제입니다. 영어는 자연스럽게 공백으로 단어가 구분되지만, 한국어와 중국어에는 구분자가 없습니다 -- "탁구채팔았어"는 "탁구/채/팔았어" 또는 "탁구채/팔았어"로 분석될 수 있습니다.

분석 방식설명예시
표준 분석공백과 구두점으로 분할 (영어)"hello world" -> ["hello", "world"]
한국어/중국어 형태소 분석사전 또는 모델 기반 분할"검색엔진" -> ["검색", "엔진"]
N-gram고정 길이 슬라이딩 윈도우로 분할"검색" -> ["검색", "색인"]
커스텀 사전비즈니스 전용 용어 추가"iPhone16ProMax"를 하나의 단어로 처리

텍스트 분석 파이프라인

형태소 분석은 텍스트 분석의 한 단계일 뿐입니다. 전체 파이프라인에는 다음이 포함됩니다:

  1. 문자 필터링: HTML 태그, 특수문자 제거
  2. 형태소 분석: 텍스트를 단어(Token)로 분할
  3. 불용어 필터링: "의", "는", "이" 등 의미 없는 고빈도어 제거
  4. 동의어 확장: "휴대폰"을 "휴대폰, 핸드폰, 스마트폰"으로 확장
  5. 어간 추출: "running"을 "run"으로 복원 (영어)

3. 관련성 정렬: 어떤 결과가 가장 "관련성"이 높은가?

일치하는 문서를 찾는 것은 첫 번째 단계일 뿐이며, 더 중요한 것은 정렬 -- 가장 관련성 높은 결과를 가장 위에 배치하는 것입니다.

알고리즘원리특징
TF-IDF단어 빈도(TF) x 역문서 빈도(IDF)고전 알고리즘, 간단하고 효과적
BM25TF-IDF의 개선판, 문서 길이 정규화 추가Elasticsearch 기본 알고리즘
벡터 검색문서와 질의를 벡터로 변환, 코사인 유사도 계산시맨틱 검색 지원

TF-IDF 직관적 이해

  • TF(단어 빈도): 단어가 문서에 많이 나타날수록 해당 문서가 그 단어와 관련성이 높을 가능성이 큼
  • IDF(역문서 빈도): 단어가 적은 수의 문서에만 나타날수록 구별력이 높음
  • "의"는 모든 문서에 나타남 (IDF 낮음), "의"를 검색하는 것은 의미 없음
  • "Elasticsearch"는 소수의 문서에만 나타남 (IDF 높음), 검색하면 정확히 찾을 수 있음

4. Elasticsearch: 가장 인기 있는 검색 엔진

Elasticsearch는 현재 가장 인기 있는 오픈소스 검색 엔진으로, Apache Lucene을 기반으로 구축되었으며, 분산 RESTful API 기반의 전문 검색 기능을 제공합니다.

개념설명
Index데이터베이스의 "테이블"과 유사, 동일한 유형의 문서 저장
Document하나의 레코드, JSON 형식
Shard샤드, 인덱스를 여러 노드에 분할
Replica복제본, 고가용성과 읽기 확장 제공
Mapping필드 타입 정의, 데이터베이스 Schema와 유사
Analyzer텍스트 분석기, 형태소 분석 규칙 정의

ES vs 데이터베이스

Elasticsearch는 데이터베이스를 대체하는 것이 아니라 검색 계층으로 데이터베이스와 함께 사용됩니다. 전형적인 아키텍처: 데이터를 데이터베이스에 기록 -> ES에 동기화 -> 검색 요청은 ES로 처리 -> 상세 요청은 데이터베이스로 처리


5. 검색 최적화: 검색을 더 "똑똑하게"

최적화 수단설명효과
동의어"휴대폰"으로 "핸드폰"도 검색 가능재현율 향상
맞춤법 교정"iphoen"을 "iphone"으로 자동 교정오타 허용
자동 완성"사" 입력 시 "사과폰" 추천경험 향상
하이라이트검색 결과에서 일치하는 단어를 빨간색으로 표시직관적 표시
가중치 조정제목 일치 가중치 > 내용 일치 가중치정확도 향상
필터 및 집계가격 범위, 브랜드별 필터링범위 축소

요약

검색 엔진은 인터넷 애플리케이션의 핵심 인프라입니다. 역색인, 형태소 분석, 관련성 정렬이라는 세 가지 핵심 개념을 이해하면 검색 엔진의 본질을 파악한 것입니다.

이 장의 핵심 포인트를 되돌아보세요:

  1. 역색인: 키워드에서 문서로의 역방향 매핑, 검색 엔진의 핵심 데이터 구조
  2. 형태소 분석이 기초: 한국어/중국어 형태소 분석은 검색 품질의 핵심, 적절한 분석기 선택 필요
  3. BM25 정렬: 단어 빈도와 문서 빈도를 기반으로 한 관련성 점수, ES의 기본 알고리즘
  4. ES 아키텍처: 샤드 + 복제본으로 분산 및 고가용성 구현
  5. 검색 최적화: 동의어, 오타 교정, 자동 완성으로 검색을 더 스마트하게

더 읽어보기