크몽 검색 엔지니어가 사용자가 검색어를 입력한 순간부터 결과가 나오기까지 크몽 검색 시스템이 내부에서 어떻게 동작하는지 단계별로 설명한다. 700개 이상의 카테고리, 수십만 개의 서비스 중에서 사용자에게 맞는 재능을 찾아주기 위한 Elasticsearch 기반 검색 파이프라인의 구조를 다룬다.
핵심 포인트- 검색 파이프라인은 유효성 검증, 검색어 전처리, Elasticsearch 쿼리 실행, 스코어링 순서로 진행된다.
- 금지어 필터링으로 부적절한 검색어를 유효성 검증 단계에서 차단한다.
- 검색어 전처리는 노말라이징(정규화)과 토크나이징(형태소 분석)으로 구성된다.
- 동의어 사전, 불용어 사전, 사용자 사전을 활용해 검색 정확도를 높인다.
- Elasticsearch의 BM25 알고리즘으로 검색어와 서비스 간의 관련도를 계산해 순위를 결정한다.
상세 정리- 시스템 규모: 크몽은 700개가 넘는 카테고리에 수십만 개의 서비스가 등록돼 있어 정확한 검색이 핵심 과제다.
- 1단계 — 유효성 검증: 입력된 검색어가 금지어 목록에 해당하는지 확인하고 필터링한다. 유효하지 않은 요청은 이 단계에서 반환된다.
- 2단계 — 전처리(노말라이징): 검색어를 표준 형식으로 정규화한다. 대소문자 통일, 특수문자 처리 등이 이 단계에 해당한다.
- 3단계 — 전처리(토크나이징): 검색어를 의미 단위 토큰으로 분리한다. 한국어 형태소 분석을 통해 어절이 아닌 형태소 단위로 검색이 가능해진다.
- 사전 활용 — 동의어 사전: '노트북'으로 검색해도 '노트북 컴퓨터', '랩탑' 관련 서비스를 함께 찾을 수 있게 한다.
- 사전 활용 — 불용어 사전: '와', '을', '의' 같은 조사·접속사를 제거해 핵심 키워드만 남긴다.
- 사전 활용 — 사용자 사전: 크몽 도메인에 특화된 용어(특정 서비스명, 카테고리 표현)를 등록해 검색 정확도를 높인다.
- Elasticsearch 쿼리 생성: 전처리된 토큰과 사전 처리 결과를 바탕으로 Elasticsearch에 전달할 쿼리를 생성한다.
- 스코어링 — BM25: Elasticsearch의 기본 스코어링 알고리즘인 BM25로 검색어와 각 서비스 간 관련도 점수를 계산하고 순위를 매긴다.
- 이 글은 하이브리드 검색(BM25 + 벡터 검색) 도입기의 시리즈 전편으로, 키워드 검색의 기반 구조를 설명한다.
왜 읽나검색 시스템의 내부 파이프라인을 처음 이해하려는 엔지니어나, Elasticsearch 기반 검색 구현에서 전처리와 사전 활용 방식을 참고하고 싶은 개발자에게 유용하다.