코딩관계론

엘라스틱 서치를 사용한 검색엔진 개발 본문

개발/Hot-Stock

엘라스틱 서치를 사용한 검색엔진 개발

개발자_티모 2025. 3. 6. 15:53
반응형

주식 종목 자동 완성 기능 개선 및 Elasticsearch 활용

기존에는 RDB(Relational Database) 기반으로 주식 종목 자동 완성 기능을 구현했으나, 이 방식에서는 오타 교정 기능이 기본적으로 제공되지 않기 때문에, 추가적인 비즈니스 로직을 개발해야 하는 부담이 있었다. 이에 따라 **Elasticsearch(이하 ES)**의 Fuzzy 검색 기능을 활용하여 보다 효율적인 자동 완성 시스템을 구축하기로 결정했다.

또한, 향후 나스닥(NASDAQ) 종목까지 지원하게 될 경우, 대규모 데이터 처리를 위한 역색인(Inverted Index) 기반의 검색 시스템이 필수적이므로, 확장성을 고려하여 ES를 도입했다.


1. 검색어 자동 완성 기능 벤치마킹

우선, 주요 검색 시스템들이 자동 완성을 어떻게 구현하고 있는지 분석했다.

  • 네이버: 전통적인 완전 일치(Exact Match) 기반 검색을 유지하며, 오탈자를 허용하지 않는 방식
  • 토스(Toss): 자음·모음 중 일부가 다를 경우 자동 수정하여 검색어 추천

이를 바탕으로, 최종적으로 토스와 유사한 수준의 검색 시스템 구축을 목표로 설정했다.


2. Elasticsearch의 검색어 매칭 방식 분석

ES에서 검색어 매칭을 위해 제공하는 두 가지 주요 필드 타입을 비교했다.

  1. Keyword 타입
    • 정확한 일치(Exact Match) 검색을 수행
    • **Analyzer(분석기)**를 사용하지 않음 → 원본 데이터를 그대로 저장 및 검색
    • 사용 예시: 종목 코드, 특정 ID 기반 검색
  2. Text 타입
    • 토큰화(Tokenization) 및 분석기(Analyzer) 적용
    • 매칭 점수를 기반으로 검색어를 추천하며, TF-IDF(Term Frequency-Inverse Document Frequency) 등의 가중치 알고리즘을 활용
    • 사용 예시: 종목명 검색, 자유로운 키워드 기반 검색

3. Fuzzy 쿼리와 N-gram 기반 자동 완성 시스템 구축

토스 수준의 검색 기능을 구현하기 위해, Fuzzy 쿼리와 N-gram을 조합한 접근 방식을 선택했다.

🔹 N-gram을 활용한 Prefix 기반 검색

  • N-gram을 활용하면 검색어를 부분 단위(Substring)로 분할하여 색인할 수 있음
  • 예를 들어, 삼성전자를 edge_ngram을 적용하여 처리하면 다음과 같은 형태로 색인됨:
    arduino
    복사
    "삼", "삼성", "삼성전", "삼성전자"
  • 이를 통해 사용자가 검색어의 일부만 입력해도 빠르게 자동 완성 결과를 제공할 수 있음

🔹 Fuzzy 검색을 활용한 오타 보정

  • ES의 Fuzzy 검색 기능을 사용하면, 사용자의 입력값이 일부 틀려도 가장 유사한 검색어를 추천할 수 있음
  • 그러나, 한글과 영어의 오타 보정 방식이 다르다는 문제가 존재언어Fuzzy 적용 방식
    영어 알파벳 단위에서 한 글자 수정(예: appl → apple)
    한글 초성·중성·종성 조합 방식 차이로 인해 기본 Fuzzy로 정확한 추천이 어려움

이러한 차이로 인해, 기존 Fuzzy 검색을 그대로 적용하면 ‘이구산업’을 검색했을 때 ‘이건산업’이 추천되는 문제가 발생할 수 있다.


4. 한글 특화 Fuzzy 검색 적용 방식

이 문제를 해결하기 위해, 어플리케이션 레벨에서 한글 자모 분리(Decomposition) 후 필드에 저장하는 방식을 적용했다.

🔹 한글 자모 분리 방식 적용

  • 한글을 검색할 때 자모(초성·중성·종성)를 분리하여 색인
  • 예를 들어, 삼성전자를 ㅅㅏㅁㅅㅓㅇㅈㅓㄴㅈㅏ로 변환하여 색인
  • 이를 통해 ES의 기본 Fuzzy 기능을 활용하면서도, 한글 검색 정확도를 높이는 효과를 얻을 수 있음

🔹 한글 전처리 플러그인 개발 고려

  • ES 기본 기능만으로는 한글의 자음·모음 구조를 완벽히 처리하기 어려움
  • 이를 해결하기 위해 직접 Fuzzy 제어기 플러그인을 개발하거나, 별도의 사전 처리(Preprocessing) 로직을 추가하는 방식을 고려

5. 결론 및 기대 효과

📌 Elasticsearch 기반 검색 시스템 도입의 장점

오타 자동 보정: Fuzzy 검색을 활용하여 사용자의 입력 오류 대응 가능
빠른 검색 응답 속도: N-gram을 적용하여 검색 속도 최적화
확장성 확보: 향후 나스닥 종목 추가 등 대량의 데이터를 처리하는 데 유리

📌 한글 검색 최적화 적용 결과

자음·모음이 일부 달라도 올바른 검색 결과 제공
불필요한 추천 방지(예: ‘이구산업’ 검색 시 ‘이건산업’이 추천되는 문제 해결)
ES의 기본 기능을 최대한 활용하면서도, 어플리케이션 레벨에서 한글 특성을 보완하여 성능 향상


이를 통해 기존 RDB 기반 자동 완성 기능 대비 정확성과 성능을 개선하고, 향후 다양한 종목 검색 지원이 가능하도록 시스템을 구축할 수 있었다.


구현 결과는 아래의 사이트에서 확인할 수 있습니다.

https://next-stock.com/

 

Next Stock - 주식 시장을 한눈에!

마켓맵에서 인기 검색어, 핫이슈, 시장 트리 차트까지 모아보세요.

next-stock.com

 

 

반응형

'개발 > Hot-Stock' 카테고리의 다른 글

엘라스틱 서치  (0) 2025.03.06
뉴스 fetching이 진행중인데 끝났습니다...  (1) 2025.03.05
커넥션이 없어서 불이나다(요가 파이어~ )  (0) 2025.02.25
수익화를 위한 쇼 - (에드센스)  (0) 2025.02.24
사담  (0) 2025.02.22