Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

Flutter/Flutter Project

[소셜차트] 앱 제작기 #15. Full Text search

방피터 2023. 1. 2. 16:37


Full Text Search... 뭐... 그냥 간단하게 검색 기능이야.

소셜차트 DB는 firestore인데 firestore는 검색 기능을 제공하지 않기 때문에 외부의 도움을 받아야 해. Full text search engine이라고 검색하면 많은 것들이 나오는데 firebase에서 제안하는 건 Elastic, Algolia, Typesense 이렇게 3가지야.👇

Firebase에서 제안하는 3가지 full-text search engine

 

각각은 모두 firebas extension을 제공해서 비교적(?) 간편하게 full-text search를 구현할 수 있어.


가격

이 서비스들은 모두 자체 클라우드를 지원하고 있는데 이걸 사용하자니 비용이 조금 걱정되더라고.

엘라스틱 클라우드 요금제

엘라스틱은 시작이 한화로 월 10만원이 넘고;;; 초기 스타트업이 내기는 조금... 싫다규 ㅠㅠ 

알골리아 클라우드 요금제

알골리아는 비교적 무료로 제공되는 양이 많고 사용한 만큼만 요금을 내서(Pay u go) 합리적이라고 생각했는데;; 

search request 카운트 기준이 뭔지 모르겠다;; 난 79회나 요청한 적이 없다굿!!

설치하고 나서 테스트를 아주 약간하고 보니 79회 사용;;; index 2개 넣고 3-4회 검색한 거 같은데 말이지;;; 이 정도라면 무료 용량은 테스트하기에도 부족할 거 같고 나중에 서비스하다가 금액 청구당하면 매우 속이 아플거 같아서 pass!

 

아래는 typesense cloud 가격인데 가장 작은 게 cluster $14.4/mo + bandwidth $0.13/gb ! 매우 적절해.

로드벨런싱 옵션도 있는 거 같고 말이지!

타입센스 클라우드 요금제

하지만 ㅋㅋㅋ 그래도 테스트하는데 돈내기 싫은 건 마찬가지!!! ㅋㅋ


직접 구축?

그래서 그냥 직접 서버를 구축해봤어 ㅋㅋ AWS EC2 가장 작은 용량에다가 typesense를 설치해봤지. 설치 자체는 전혀 어렵지 않아. 아래에서 운영체제 맞게 따라하면 끝이야. 참고로 난 debian linux에다가 설치했어.

https://typesense.org/docs/guide/install-typesense.html

 

Install Typesense | Typesense

Install Typesense Here are a couple of available options to install and run Typesense. Option 1: Typesense Cloud The easiest way to run Typesense is using our managed Cloud service called Typesense Cloud (opens new window). Sign-in with GitHub Pick a confi

typesense.org

그런데 firestore extension은 무조건 https, 그러니까 443번 포트를 사용해야 하는데 이러려면 SSL certificate를 typesense에 물려줘야 해 ㅋㅋㅋ 이게 좀 짜증이 나지.그래 SSL Certificate 발급받으려면 도메인 있어야 하고 (없으면 구매해야지) EC2랑 도메인 연결도 해줘야 하지. SSL certificate는 Certbot으로 발급받을 수 있는데 이게 뭔지 모르고 하면 찝찝함을 피할 수 없잖아?  ㅎㅎ 그러니까 이런거 자신 없는 사람들은 그냥 클라우드 형 사용하는 게 편할 거 같아. 사실 직접 구축해보고 나니 클라우드를 사용하는 거 대비 금액적으로 크게 이익이 있는지 잘 모르겠거든 ㅎㅎㅎ

내가 사용중인 EC2 시간당 사용 요금이 $0.014 니까 시간당 $0.02인 typesense 클라우드하고 거의 차이가 없고 관리를 해준다는 측면에서 오히려 클라우드를 사용하는 게 더 좋을수도 있어. 내 경우 실제 서비스를 시작하게 되면 클라우드로 갈 확률이 70-80%는 될거야...

EC2 시간당 요금


고려해야 할 점, 문제점

뭐 가격 문제는 대충 이렇고 firestore와의 동작은 어떤지 봐야될 건데.. 내가 사용해 본 알골리아, 타입센스 둘 다 모두 훌륭하게 동작해. 그런데 search engine이 firestore를 직접 검색하고 인덱싱하는 방식이 아니고 firestore가 업데이트되면 firebase functions을 통해 그 데이터를 search engine에 전송해서 인덱싱하는 방식이라서 기존 데이터는 수동으로 넣어줘야 한다는 문제점이 있어. 이를 위해서 알골리아 같은 경우 아래와 같이 툴을 제공해주는데 타입 센스는 아무것도 제공해주질 않아.. 제공해준다. 댓글에 있다~

npx firestore-algolia-search

결국 어떤 search engine을 사용하든지 DB를 처음부터 쌓는게 아니라면 firestore의 데이터를 export해서 search engine 에 import 할 수 있어야 한다는 말씀.

 

그리고 타입센스에서 한 가지 문제가 더 있었어. Firestore에서의 array 타입의 데이터가 typesense 서버로 전송이 안돼. 전송이 안되니까 검색도 안되겠지. 이건 firebase extension 문제인지 타입센스 문제인지 잘 모르겠지만 array 안의 데이터를 검색해야하는 어플리케이션에서는 치명적이겠지..

타입센스 서버에 data(Object array)를 전송하면 Type of field 'data' is invalid. 라는 오류를 뱉어낸다.

 


Flutter(Dart) Client

참 중요한 문제가 아닐 수 없지! 지금 Flutter를 사용하고 있으니 말이야 ㅎㅎㅎ 그럼 패키지를 살펴보자구.

알골리아 패키지

먼저 알골리아 패키지. 좋아요도 192개 씩(?)이나 되고 버전도 무려... 1.1.1 대박! 왜 이게 대박이냐고?....

다음을 보자.

타입센스 패키지

타입센스 패키지는 버전도 0.3.0 ㅠㅠ 하기사.. 본 제품 버전이 0.23.1 인거 감안하면 ㅋㅋㅋㅋ

그나마 11일 전에 publish 되었다는 게 마음에 위안을 준다... ㅠㅠ

마지막은 엘라스틱 서치인데... 이 패키지도 사용하기가 조금 무서운.......

 

엘라스틱 패키지

 


결국은....

지금은 테스트를 위해서 힘들게 EC2에 직접 설치해서 typesense를 사용하고 있는데... 이 글을 쓰다보니까 왠지 algolia를 써야 할 거 같은;;; 느낌이;;;; 사용한 만큼만 내니까 가격도 괜찮을거 같고 로드 밸런싱같은 거 신경 안써도 되고;;; flutter package도 괜찮아 보이고 typesense 처럼 object array가 검색이 안되는 문제도 없고 말이지....

 

물론 elastic search 까지 써봐야 확실하게 결정할 수 있을 것 같긴해.. elastic search가 유명하기도 하고 말이지... 

.

.

.

 


Elastic Search!

응 그래서 써봤어. Elastic cloud를 사용했는데.. 음.. 뭔가 스무스하게 넘어가네 ㅋㅋㅋ 암튼 뭐 2주 동안 무료라고 해서 말이지.. 열심히 써봐야겠어. 그리고 가격도 그다지 비싸지 않은 것 같아. 구글 클라우드 seoul rezone 기준 시간당 $0.1059, 월 $76.248, 한화로 약 10만원 정도.. 그것도 data zone을 3개로 해서 말이지.

꽤 저렴하다.

여기에 추가되는 비용이 있으려나? 추가 비용에 관한 정보는 어디에 있나? ㅠㅠ 몰라.


결론? 결론!

결국 3개 다 써봤는데.... typesense 보다는 Elastic search나 Algolia를 사용하는 게 더 좋을 것 같아. 다음과 같은 이유야.

typesense는 array 데이터 전송에 심각한 문제가 있었고, 기존 데이터를 import / export할 수 있는 툴도 없어, 그리고 dart client package가 좀 빈약하다랄까?  algolia, elastic search 둘 다 array object 전송과 검색에 문제가 없었고 firestore 에서 데이터를 옮길 수 있는 툴도 제공하고 있어.

typesense를 제끼고 algolia랑 elastic search 두개중에..... 나중을 생각하면 elastic search가 훨씬 좋지 않겠어?

오래되었고 유명하니까!! 당연히 사용자도 많을 거고 사용할 줄 아는 개발자들도 많겠지 ㅎㅎㅎ

그래서 내 결론은!

엘라스틱 서치를 쓰자!

이제 검색이 된드아!~~~~

반응형