검색 엔진을 찾아서 - 검색 엔진 서비스들에 대한 비교

유원근·2023년 12월 18일
2
post-thumbnail

지난번 푸시 개발 스프린트가 끝나고, 검색엔진 개발에 들어가게 되었답니다. 이번에는 연말까지 약 4주의 기간을 잡고 스프린트에 진입하였습니다ㅎㅎ
검색엔진 스프린트 로그

개발이 생각보다 빠르게 2.5주안에 마무리 되어서 이번글에서는 직접적인 개발에 관련된 이야기 보다는 검색엔진 구축에 조금 더 도움이 될 만한 이야기를 해보도록 하겠습니다.

일단, 이번 검색엔진에서 스스로의 요구사항 두둥.

키워드별 자동완성 기능

이번에 개발을 할 때에는 자동완성을 보통의 소규모 서비스와는 조금 더 다르게, 일반적인 검색엔진과 같이 인덱싱 과정에서 키워드들을 추출해 검색시에 검색어를 추천해 주는 시스템을 구현하고 싶었습니다. ex) "BT" 를 입력하면 "BTS 공항패션" 과 같은 검색어 추천

쓸만한 동의어 처리

서비스 특성상, 셀럽이나 컨텐츠를 검색하는 경우가 많은데, 이와같은 경우에는 동의어 처리를 어떻게 하느냐에 따라 검색의 결과가 좌우될 것이라는 생각을 하였습니다.
ex) v, 뷔, 김태형으로 검색하였을 때 같은 결과가 나오는 것

완벽하게 일치하는 데이터가 아닌, 연관성 있는 데이터를 추천

아직은 초기 서비스라 컨텐츠의 양이 절대적으로는 부족했기에, 최대한 검색조건에 부합하는 컨텐츠나 정보를 많이 제공하기 위해서는 직접적인 검색 결과와 연관성이 있는 데이터도 함께 추천을 해 주어야 한다고 생각했습니다. ex) 음악앱에 특정 아티스트를 검색하게 되면 소속 그룹, 함께 작업했던 아티스트들도 함께 검색이 되는 것

그래서 이번 글에서는 검색엔진을 이렇게 저렇게 해서 개발을 했어요! 이 아닌, 개발을 하기 이전에 어떤 검색엔진 후보군이 있었고 직접 비교해본 결과를 이야기 해보겠습니다.

어떤 검색엔진 후보가 있었을까?

이번에 검색엔진을 구현할 때에 저에게 있어서 중요했던 부분은 인프라에 대한 관리가 필요없는 최소한의 PaaS서비스를 제공하고 있어야 한다는 부분이었습니다.

아무래도 직접 호스팅해서 관리하기에는 리소스가 많이 투입되어야 하다보니 이런 선택을 하게 되었습니다.

또한 가격적인 부분도 중요하게 생각할 수 밖에 없는데, 아래 설명들에서 말하는 가격들은 바로 아래 최소 요구사항을 만족시킬 수 있을 정도의 설정에서 같은 양의 데이터를 인덱싱 했을 때의 기준으로 대략적인 최소가격을 설명하도록 하겠습니다.

  • 두개의 검색 인덱스와 자동완성 기능을 구현하였을 때의 최소가격

먼저 검색엔진 하면 요즘은 90%가 넘는 분들께서 아마 Elastic Search를 떠올리게 되실 것 같습니다!

그래서 바로 첫번째로 소개할 서비스 바로 두둥

엘라스틱 서치 홈페이지 (https://www.elastic.co/kr/elasticsearch)
아마 가장 많은 스타트업에서 검색엔진을 구현하기 위해 사용하는 것이 Elastic Search 일 것 같습니다.
뭐.. 일단 미리 말씀 드리자면 저도 Elastic Search를 이번에도 선택하게 되었습니다.

엘라스틱 서치는 말이 필요없는, 거의 표준이라고 할 수 있는 서비스라고 생각하는데, 한마디로 표현하는 원하는 검색엔진의 요구사항을 만족시킬 수 있는 거의 유일한 서비스였습니다.

커스텀할 수 있는 부분이 가장 많다는 것은 다르게 표현하면 개발이 가장 많이 필요한 서비스라는 뜻 😅

다만 이번에는 모두들 범용적으로 많이 이용하고 있는 자체 서버에 호스팅 하는 방식이 아닌, Elastic에서 관리하는 인스턴스를 사용하기 위해 Elastic Cloud를 이용해 검색 엔진을 구축하였습니다.

많은 분들께서 아마 Elastic Search를 자체적으로 호스팅해서 사용하고 계실 것 같지만 Elastic Cloud를 이용해 인스턴스들을 관리하게 되면 장점들이 상당히 많은 부분에서 있습니다.

  • 일단, 마이그레이션이나 ElasticSearch 버전관리와 같은 부분에서 자유로워 질 수 있습니다.
  • Managing UI를 제공하기 때문에 ES의 모든 기능들을 편하게 이용할 수 있습니다.
  • App Search와 같은 Elastic Search에서 제공하는 SaaS형태의 검색엔진을 이용할 수 있습니다.

이밖에도 장점들은 많지만, 단점도 분명히 존재하는데, 이 부분은 특히 엘라스틱 서치의 도입을 고려하는 사용자들의 특성을 보면 커뮤니티의 분석기와 같은 플러그인을 사용하기 위한 경우가 많이 있기 때문에 조금은 치명적일 수 있다고 생각했습니다.

  • 커스텀 플러그인을 적용하기가 까다롭습니다. (특정 부분에서!!)

한국에서 검색엔진 구현을 위해서는 한글 형태소 분석기를 이용해 인덱싱을 진행해야 하는데, Elastic Search에서도 이 부분을 알고 있기 때문에, 가장 많이 사용되는 nori 형태소 분석기를 지원하고 있습니다.

하지만, 자동완성, 자모음, 오타보정과 같은 기능을 구현하기 위해서는 다른 형태소 분석기가 필요한 것이 사실...

이를 위해서는 Elastic Cloud에서 저장되어 있지 않은 Custom Plugin을 설치해 주어야 하는데, 이때 이 기능을 활성화 해주기 위한 조건이 설명도 되어있지 않고, 현재 이용중인 플랜에서 활성화가 불가능한 기능이라고 명시만 되어있을 뿐이었습니다.

설치가 필요한 커스텀 플러그인을 활성화 하기 위해서는 유료 요금제를 사용해야 하고, 직접 고객센터로 문의를 진행하였더니 2일뒤에 활성화가 되었습니다.

이렇게 플러그인까지 활성화 하게되면 그 뒤부터는 정말 편하게 다른 검색엔진들과 비교해서 엄청난 양의 레퍼런스를 보면서 비교적 편하게 원하는 검색엔진을 만들 수 있었던 Elastic Search였습니다.

마지막으로 가격은 선택하는 클러스터 사양에 따라 다르겠지만, 최소 2만원대에서 시작할 수 있을 정도로 매-우 저렴했습니다.

아, OpenSearch라는 Elastic에서 포크되어 만들어진 오픈소스도 있으니 한번 구경들 해보셔도 재미있을 것 같습니다.

  • open search는 aiven이나, aws에서 managed instance 형태로 만나보실 수 있습니다.
  • 다만 각 서비스 업체별로 제공하는 기능이 다르다는 점!

Azure AI Search 홈페이지 (https://azure.microsoft.com/ko-kr/products/ai-services/ai-search)
Elastic Search 다음은 한국에서는 아직 실 서비스로 개발된 사례는 많지 않지만, 퍼블릭 클라우드에서의 입지는 AWS, GCP와 함께 3강을 차지하고 있는 Azure의 AI Search 입니다.

얼마 전까지만 해도 Cognitive Search라는 이름으로 운영이 되고 있던 서비스였지만, 최근의 AI붐과 함께 이름이 AI Search로 변경된 것을 확인할 수 있었습니다.

실제로 제공하는 서비스 자체는 바뀌지 않았고, AI 관련되 기능이 몇가지 추가되었습니다.

특징으로는 한국시장에 이미 깊게 관여하고 있는 MicroSoft에서 운영하고 있는 서비스이기 때문에 한국어 형태소 분석기를 2종류로 지원하고 있으며 이름이 AI Search인것 처럼 몇가지 타 서비스와 비교되는 AI와 관련된 장점을 가지고 있습니다.

  • 타 서비스에서도 지원을 시작하고 있는 벡터검색에 대한 안정화 버전을 제공하고 있습니다.
  • ChatGPT로 이름을 날리고 Azure에서도 서비스되는 Azure OpenAI 서비스하여 예를들면 GPT와 연동한 검색엔진을 구현할 수 있습니다.(프리뷰)
  • 익덱싱시에 GPT를 기반으로 인덱싱하고, 챗봇을 만드는 등의 특화 기능을 제공합니다.
  • 자동완성 추천시에 머신러닝 기반의 알고리즘을 적용해 사용자별로 관심사별 우선순위등 정렬에 도움을 줄 수 있는 기능이 내장되어 있습니다.

일단 장점들만 본다고 하면 다른 플랫폼들과는 차원이 다른 장점들을 가지고 있는데요, 사실 제가 직접 사용해 보았을 때에는 단점도 명확하다고 느껴진 부분이 한국어 형태소 분석이었습니다.

Azure AI Search에서 지원하고 있는 한글 형태소 분석기는 두가지 입니다.

  • 마이크로 소프트의 분석기인 ko.microsoft
  • 류신 기반의 ko.lucene

Azure 언어별 형태소 분석기 링크 (https://learn.microsoft.com)

이름에 걸맞는 어느정도의 성능은 보장하고 있지만, 제공하는 두가지의 형태소 분석기밖에 사용이 불가능하고, 가끔씩 의도와는 다른 이상한 형식으로 형태소 분석을 하는 경우가 간혹 있었습니다.

가격은 생각보다 저렴한 10만원 정도의 월별 비용이 예상되었으며, Azure를 통한 클라우드 인프라를 보유하고 있고, 텍스트 검색 이외의 다양한 기능을 요구한다면 좋은 선택지가 될 것으로 보였습니다.


한국 검색엔진 1타 - NCP Cloud Search (Naver Cloud Platform)

네이버 클라우드 서치 홈페이지 (https://www.ncloud.com/product/analytics/cloudSearch)
네이버는 명실상부 대한민국에서 가장 인지도 높고 한국어에 가장 최적화된 검색엔진을 제공하는 플랫폼입니다.
이런 네이버에서 NCP (Naver Cloud Platform)을 통해 자사의 기술력이 녹아든 검색엔진을 PaaS형태로 제공하고 있다는 것 알고 계셨나요?

NCP Cloud Search 또한 이번에 처음으로 사용해 본 것은 아니었는데, 지금까지의 경험은 밸런스가 좋은 검색엔진 이었습니다.

먼저 개발 난이도는 아주 쉽지는 않았습니다. 다만 검색의 결과물은 좋은 편에 속했습니다. (특히 한국어) 또한 자동완성 기능을 묶어서 제공한다는 부분도 개인적으로는 마음에 들었습니다.
다만, 경험상 가장 불편하다고 생각했던 부분은 검색결과 필터링과 정렬이었습니다.

한마디로 정리한다면, 기존 NCP를 사용중이라면 한번쯤 고려해 볼 수 있는 옵션이었던 것 같습니다. 다만 저와 같은 경우에는 2번정도의 셋팅이 있었는데, 두번 모두 검색엔진 튜닝중에 다른 서비스로 넘어갔던 경험이 있습니다.

가격은 약 최소 요구조건 기준으로 20만원 정도의 월별 비용이 예상되었습니다.


NHN 클라우드 서치 홈페이지 (https://www.nhncloud.com/kr/service/search/cloud-search)
NHN Cloud에서도 검색엔진 서비스를 제공하고 있는데 저의 경우에는 실제 프로덕트를 위한 용도로 사용해 본 경험이 있습니다.
개인적인 생각으로는 아무래도 네이버와 같은 밥을 먹었던 회사라 그런지, 한국어에 대한 검색결과가 만족스러웠습니다.

다만, 추구하는 방향성은 NCP와 NHN Cloud의 Cloud Search가 다른 방향성을 보여주고 있다고 생각했는데,
NCP와 같은 경우에는 적당한 커스텀을 허용해 주고 그만큼의 노력을 요구하는 경향이 있었던 반면, NHN Cloud의 Cloud Search같은 경우에는 엄청나게 쉬운 난이도와 그에 비례하는 자유도를 제공한다고 느꼈습니다.

다만, 검색 결과 필터링과 정렬같은 부분에 NCP에서보다 월등히 편하게 셋팅을 할 수 있다는 장점이 있었고, 자동완성 기능을 따로 제공하고 있다는 장단점이 있는데 이를 통해 필요에 따라 가격도 낮출 수 있다는 장점이 있었습니다.

자동완성 같은 경우에는 영한타 오타보정, 자음검색과 같은 기능도 제공하고 있습니다.

개인적으로 상당히 만족스럽고 쉽게 개발이 가능했던 검색엔진이었습니다.

가격은 최소 요구조건 기준 자동완성과 함께 사용할 때 월별 약 16만원에서 자동완성을 사용하지 않을 시에는 10만원 정도에 운영을 할 수 있었습니다.

다만 한가지 아쉬웠던 부분은 실제로 검색엔진을 개발했을 때에 3글자 이상의 쿼리를 이용해야만 검색을 할 수 있다는 단점이 있었습니다.

이부분은 자동완성 서비스를 함께 이용해서 단점을 최대한 극복할 수는 있었습니다.


무심코 한번은 써본 - Algoria

알고리아 홈페이지 (https://www.algolia.com)
Algoria는 많은분들이 한번씩은 들어보셨을 서비스라고 생각이 됩니다.
실제로도 지금까지 설명한 서비스들과는 조금 다른 목적을 가지고 있는 검색엔진입니다.

지금까지 설명한 서비스들은 ElasticSearch를 제외하면, 퍼블릭 클라우드 업체에서 제공하는 서비스였던 반면, Algoria는 검색엔진에 특화된 SaaS라고 생각하면 좋을 것 같습니다.
그렇기 때문에 트래픽이나, 직접 인프라를 모니터링 해야하는 부담 없이 검색량과 인덱스의 갯수를 기반으로 하는 요금제를 가지고 있습니다.

또한 검색엔진에 특화된 SaaS이기 때문에 매우 쉽게 검색엔진을 구축할 수 있고, 최근에는 AI와 관련된 여러가지 기능들도 함께 제공하고 있으며 심지어 비용을 추가로 지불하게 된다면, 개인화 추천까지 쉽게 개발이 가능합니다.

단점은 사용량을 기반으로 가격을 측정하다보니, 서비스의 성장에 따라 가격의 상승곡선이 가파르게 올라갈 수 있다는 점..?인데 실제로 Grow플랜을 기준으로 100,000개의 문서를 인덱싱 할 수 있으며, 검색요청 1000건당 0.5를지불하게됩니다.100,000건의문서가초과되면1000개당0.4를 지불하게 됩니다. 100,000건의 문서가 초과되면 1000개당 0.4가 부과되기 때문에 다른 서비스들과 비교했을 때에 조금은 비싸다고 느껴질 수 있다고 생각됩니다.

하지만 프리플랜의 경우 한국어 형태소 분석을 포함한 1,000,000 건의 인덱싱과 10,000 건의 무료 검색량을 제공하고 있으니 사이드 프로젝트에 적합한 솔루션이 아닐까..

부담없이 검색엔진 인프라를 관리하고 개발하는 리소스를 돈으로 해결하겠다는 의지가 있다면, Algoria도 좋은 선택지가 될 수 있다고 생각되니, 프리티어로 입문을 해보는 것도 추천합니다.


가성비는 좋은데... - Type Sense

타입센스 홈페이지 (https://typesense.org/)

사실 요즘 Elastic Search의 대안으로 많은 엔진들이 나오고 있는데, Type Sense도 그중 하나입니다.
Type Sense는 두가지 방법으로 이용을 할 수 있습니다.

  • Algoria와 같이 SaaS 형태로 Type Sense Cloud를 통해 운영하는 방법.
  • Elastic Search 호스팅형, Open Search 와 같은 자체적으로 Type Sense Open Source 엔진을 설치해서 운영하는 방법.

저같은 경우는 Type Sense를 이용할 때에는 개인적으로 Cloud를 이용해 SaaS 형태로 이용하는 방법을 추천합니다.
이유는 알고리아를 사용할 때와 같이 편-안하게 검색엔진을 구현할 수 있지만, 가격은 검색량에 비례한 방식이 아닌, 인스턴스 구동시간과 사용한 대역폭에 따라 요금을 부과하고 있기때문에 매우 저렴한 가격에 검색엔진을 구축할 수 있다는 장점이 있습니다.

500MB의 메모리를 기준으로 한달에 약 21.6$ 의 요금과 1GB의 사용 트래픽당 0.13$ 가 부과되기 때문에 매우 저렴한 가격에 사용해 볼 수 있습니다.

추가적으로 첫 사용시에 720시간의 인스턴스비용과 10GB의 대역폭을 무료로 제공하고 있으니 테스트를 해보기에도 정말 좋은 조건이죠!

근데.. 중요한건 한국어 형태소 분석기를 아직은 지원하고 있지 않습니다. 두둥.
그렇기 때문에 실제로 프로덕트를 운영하기에는 무리가 있지만, 사이드 프로젝트와 같이 가벼운 마음으로 검색엔진을 구현하고 싶다면 나름 추천해 볼만 하다고 생각합니다.


Meili Search 홈페이지 (https://www.meilisearch.com)

Meili Search는 제가 생각했을 때에 SaaS형태의 검색엔진을 제공하고 있으며, Elastic Search에 대항할만한 서비스를 뽑아보자면 Algoria, Type Sense, Meili Search가 생각날 만큼 완성도가 훌륭한 서비스라고 생각합니다.

실제로 서비스에 적용하기 위해 사용해본 경험이 있는데, 전체적으로 위에 언급된 서비스들에 비해 후발주자에 속하지만, 가장 빠른시간안에서 비교적 고성능의 검색엔진을 구현할 수 있었던 서비스였습니다. (실제로 검색엔진의 성능이 생각보다 매우 빨랐던 기억이..)
장점은 다음과 같았습니다.

  • 동의어 사전관리, 검색 필드별 가중치 설정등 검색관련 튜닝에 있어서 매우 쉽게 접근이 가능했습니다.
  • 위 서비스들 가운데 가장 쉬운 UI를 제공하고 있습니다.
  • 알고리아와 동일한 요금모델을 가지고 있는데 가격은 조금더 저렴합니다.
  • 초기의 서비스이지만 CJK형태소 분석을 지원하며 한국어 형태소 분석 성능이 우수했습니다. (중국어, 일본어, 한국어)
  • 자체적인 형태소 분석 및 인덱싱 기술을 사용하여 한글자 단위의 검색이 가능합니다.

실제로 사용했을 때의 가격은 알고리아보다 저렴한 가장 낮은 플랜인 30$ Build 플랜을 기준으로 100,000번의 검색량과 1,000,000개의 인덱싱 문서의 갯수를 제공하고 있으며 첫 사용시 7일의 무료체험 기간을 제공하고 있기 때문에 충분히 테스트해 볼 수 있는 기회가 있었습니다. (검색량 기준으로 Algoria대비 60% 정도의 가격)

대형 서비스의 검색엔진을 구축할 때에는 물론 부족한 부분이 있겠지만, 초기 서비스에 검색엔진이 필요로 한다면 충분히 사용할만한 서비스라고 생각했습니다.


이건 몰랐겠지? - MongoDB Atlas

아틀라스 서치 홈페이지 (https://www.mongodb.com/atlas/search)

혹시 MongoDB Atlas에서도 MongoDB를 이용한 검색엔진을 구축할 수 있다는 사실을 알고 계셨나요?
실제로 서비스에 적용을 하지는 않았지만, 간단한 검색엔진을 필요로 하고, 기존에 이미 MongoDB를 사용해 본 경험이 있다면, 어쩌면 최고의 선택이 될 수도 있는데요,

장점은 다음과 같습니다.

  • 몽고DB Atlas의 데이터베이스 가격만 지불하고 검색엔진을 구축할 수 있습니다.
  • Lucene.korean 뿐만 아닌 무려 nori 형태소 분석기를 내장하고 있기 때문에 Elastic Search 내장 분석기와 같은 형태소 분석기를 사용할 수 있습니다. (분석기 목록 링크)
  • 오타 허용, 필드별 가중치, 동의어 사전, 하이라이팅, 필터링등 검색엔진의 필수적인 요소들을 모두 제공하고 있습니다.
  • 실제로 몽고DB를 이용하기 때문에 기술적 장벽이 매우 낮습니다.

실제로 이번에는 사용하지 못했지만, 가격적인 이점이 너무 크고, 기능도 충실해 보여서 만약 다음에 사이드 프로젝트나 간단한 검색엔진을 구축해야 하는 상황이 온다면 한번 사용해 보고 싶은 서비스였습니다.

총평

위에서 나열한 서비스가 생각보다 적다보니 많아지게 된 것 같아서, 선택에 도움이 될 수 있게 정리를 해보자면 다음 사항들을 먼저 고려해 보는게 좋을 것 같습니다.

  • 예산을 얼마나 투자할 수 있는가?
  • 구현할 검색엔진의 고도화 필요성 및 요구조건이 복잡한지?
  • 개발에 투자할 수 있는 시간과 리소스가 충분한지?
  • 텍스트 검색에 집중할 것인지 혹은 자동완성, 동의어 처리등의 부가적인 튜닝이 필요한지?
  • 직접 인프라를 관리할 것인지 혹은 관리형 환경을 사용할 것인지?

먼저 실제 프로덕트보다는 간단한 사이드 프로젝트나 초기의 프로덕트에 적용할 검색엔진을 찾는다면, 다음과 같은 순서로 추천을 합니다.

  1. MongoDB Atlas Search - 가장 저렴한 가격에 검색엔진에 필요한 필수적인 기능들을 제공하고 있습니다.
  2. Meili Search - 비교적 저렴한 가격에 관리와 셋팅,튜닝이 쉬운 검색엔진을 구축할 수 있습니다.
  3. Elastic Cloud - 낮은 등급의 인스턴스를 이용할 수 있고, Enterprise Search를 이용해 SaaS형태로 엔진을 개발할 수 있습니다.

여기서 어느정도의 주머니의 여유가 있다면, Algoria도 선택지로 고려될 수 있을 것 같습니다.

반대로 어느정도 트래픽이 발생하는 실제 운용중인 프로덕트 환경에서 운영을 고려하고 있다면 다음과 같은 순서로 추천을 합니다.

  1. Elastic Cloud - 풀 커스텀이 가능한 정석적인 검색엔진을 구축할 수 있습니다. 다만 어느정도의 러닝커브가 존재합니다.
  2. NHN Cloud Search - 적당한 가격에 비교적 쉽게 검색엔진을 구축할 수 있으며, 한글 검색에 대한 정확도도 높은 편에 속합니다.
  3. Meili Search - 가격, 성능, 난이도, 커스텀의 정도 모두가 평균치를 상회하고 있는 밸런스가 좋은 검색엔진 SaaS라고 생각합니다.
  4. Azure AI Search - AI가 적용된 특별한 검색엔진을 만들고 싶다면 추천하는 서비스이며, Azure클라우드 환경을 이용중이라면 가산점 +
  5. Naver Cloud Search - 검색의 결과는 좋은편에 속하고, 필터링과 정렬에 있어서 좋은 서비스이지만, 개인적으로 위 서비스들 가운데 개발 난이도가 가장 높은 서비스라고 생각됩니다.
  6. Algoria - 사실 Algoria를 사용하기 위한 목적이라면 개발 편의성이 1순위일 것 같은데, Meili Search가 더 나은 선택지라고 생각합니다.. ㅎ

1개의 댓글

comment-user-thumbnail
2024년 5월 12일

좋은 글 써주셔서 고맙습니다!! 큰 도움이 되었습니다.

답글 달기