AI Briefing

OpenSearch 검색엔진으로 네이버페이 검색 만들기

·2025.06.02 09:10

OpenSearch와 자모·형태소 분석으로 네이버페이 검색을 고도화했다.

네이버페이의 수백 개 서비스와 기능을 더 쉽게 찾게 하려면, 단순 목록 탐색이 아니라 검색 중심 구조가 필요했다. 그래서 FE에 흩어져 있던 서비스 정보를 DB화하고, 관리자가 직접 등록·수정할 수 있는 어드민 도구까지 함께 만들었다.

검색 품질을 높이기 위해 OpenSearch를 검색엔진으로 사용했고, 원본 DB는 그대로 두는 대신 검색 전용 색인을 별도로 운영했다. 색인은 하루 1회 자동 생성되며, 필요하면 관리자가 즉시 재색인할 수 있다. 기존 검색을 멈추지 않기 위해서는 index alias를 사용해 물리적 인덱스를 백그라운드에서 교체했고, alias를 atomic하게 스위칭하는 방식으로 다운타임 없이 전환했다.

한글 검색의 핵심은 자모 분리였다. 입력이 완성되지 않은 상태에서도 반응해야 했기 때문에 OpenSearch 플러그인 형태로 자모 분리 토큰 필터를 직접 개발했고, 예를 들어 “한글”을 “ㅎㅏㄴㄱㅡㄹ”처럼 분해해 검색할 수 있게 했다. 여기에 사내 형태소 분석기 linguist2를 붙여 조사·접속사를 걸러내고, ngram, 자모 분리, edge ngram을 순차적으로 적용해 “해외 QR결제 안내” 같은 문서도 “해외결제” 검색으로 찾을 수 있게 했다.

운영 측면에서는 무중단 패치가 큰 과제였다. 플러그인 변경 시 클러스터 재시작이 필요하므로, 패치 대상 노드의 샤드를 먼저 다른 노드로 옮기고, 프로세스를 내린 뒤 플러그인을 재설치한 다음 다시 기동하는 순서로 노드별 작업을 반복했다. 실제 운영 전에 개발용 클러스터에서 검색 트래픽과 샤드 재배치를 시뮬레이션해 순단 없이 동작함을 확인했고, 현재는 이 절차를 내부 스크립트로 자동화하고 있다.

사용자 경험을 위해 최근 검색어도 구현했다. 사용자별로 최대 10개를 저장하고, MongoDB의 단일 문서 atomic 연산findAndModify 기반 aggregation update로 일관성을 보장했다. 다만 $로 시작하는 검색어를 쿼리 생성 과정에서 path 표현식으로 오인하는 문제가 있었고, 이를 literal 처리로 보완해 특수 문자 검색어까지 안전하게 저장하도록 수정했다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.