보유한 서비스에서 검색 속도가 느린 문제를 해결하기 위해 엘라스틱서치를 도입한 경험을 공유합니다. 형태소 분석과 동의어 처리로 검색 정확성을 높이고, 속도를 기존 대비 99% 이상 개선한 실제 사례에 대해 경험한 내용을 설명드리겠습니다.
엘라스틱서치를 선택한 이유
검색 안정성과 속도를 높이기 위해 저는 엘라스틱서치를 도입했습니다. 엘라스틱서치는 오픈소스 검색엔진이며, 루신 기반으로 실시간 데이터 색인과 검색이 가능합니다. 검색 속도가 빠르고, 레퍼런스와 커뮤니티가 풍부해 문제 해결에 큰 도움을 받을 수 있었습니다.
검색 품질 개선 과정
제가 생각하는 좋은 검색 품질이란, 사용자가 검색어를 잘못 입력하거나 오타가 있어도 원하는 결과를 빠르게 제공하는 것입니다. 이를 위해 형태소 분석과 동의어 처리에 집중했습니다.
기본 단어 처리
한글 제품명은 형태소 분석 시 잘못 나누어질 수 있습니다. ‘고정 키워드’를 추가하여 단어가 불필요하게 분리되지 않도록 설정했습니다.
동의어 처리
제품 마다 단위 표기가 다양했기 때문에 단위를 동의어로 처리했습니다. 엘라스틱서치에서 동의어 사전만 사용할 경우 오류가 발생할 수 있어, 별도의 동의어 처리 알고리즘을 만들어 프로세스에 추가했습니다.
검색 속도 비교
기존 검색 알고리즘과 엘라스틱서치를 비교하기 위해, 제품명 50개에 랜덤 오타를 넣고 테스트했습니다. 예를 들어 ‘슈스타정5밀리그램’ → ‘슈스궍정5밀리그램’, ‘옥타코사놀5mg’ → ‘옥타코사놃5mg’처럼 입력했습니다.

- 기존 검색 알고리즘: 평균 1.528초
- 엘라스틱서치: 평균 0.011초
결과적으로, 엘라스틱서치 도입 후 검색 속도가 기존 대비 99% 이상 개선되었습니다.
검색 속도 이상치 분석
검색 속도가 느려진 단어(‘하이퍼셀대마종자유’, ‘옥타코사놀’, ‘알부민연질캡슐’)를 확인했을 때, 동일 쿼리를 반복하면 정상 속도를 보여 클러스터 상태와 서버 부하가 원인임을 확인했습니다.
- 서버 부하: 다수 단어를 연속 검색 시 리소스 부족
- 클러스터 상태 변화: 노드 과부하나 샤드 재배치 시 속도 영향
이번 경험을 통해, 단순히 검색이 가능한 것이 아니라 안정적이고 빠른 검색 환경을 제공하는 것이 얼마나 중요한지 다시 한번 느낄 수 있었습니다.