반응형

프로젝트에 검색 기능을 넣으려고 할 때 가장 먼저 떠오르는 게 Elasticsearch입니다. 그런데 소규모 프로젝트에 Elasticsearch는 솔직히 과합니다.

사이드 프로젝트에 검색 기능을 붙이면서 Meilisearch를 적용해봤는데, 결론부터 말하면 소규모에는 Meilisearch가 압도적으로 편했습니다.


Meilisearch가 뭔가요

Rust로 만들어진 오픈소스 검색 엔진입니다. Elasticsearch처럼 전문 검색(Full-text Search)을 지원하지만, 설치와 사용이 훨씬 간단합니다. 오타 자동 보정(Typo Tolerance)이 기본으로 켜져 있어서 사용자가 "Pytohn"이라고 검색해도 "Python" 결과를 보여줍니다.


핵심 비교

항목MeilisearchElasticsearch
언어RustJava
설치 시간1분 (curl 한 줄)30분~1시간 (JVM + 클러스터 설정)
메모리 사용~50MB최소 1~2GB (JVM 힙)
설정 난이도REST API로 바로 사용인덱스 매핑, 샤드, 레플리카 설정 필요
오타 보정기본 지원별도 설정 필요
검색 속도50ms 이내수십~수백ms
한국어 검색지원 (내장 토크나이저)nori 플러그인 설치 필요
라이선스MITSSPL (제한적)
적합한 규모소~중규모대규모, 로그 분석

Elasticsearch가 과한 이유

Elasticsearch는 강력하지만 소규모 프로젝트에는 부담이 큽니다.

  • JVM 메모리 — 기본 힙만 1GB. VPS 1대에 올리면 다른 서비스 돌릴 여유가 없습니다.
  • 클러스터 개념 — 노드, 샤드, 레플리카 등 검색 데이터 몇천 건에는 불필요한 개념들을 이해해야 합니다.
  • 운영 비용 — 인덱스 관리, 매핑 최적화, 버전 업그레이드 등 지속적인 관리가 필요합니다.
  • 한국어 처리 — nori 플러그인을 따로 설치하고 매핑에 analyzer를 지정해야 합니다.

블로그 글 검색이나 상품 검색처럼 데이터가 수만 건 이하라면 Elasticsearch를 쓸 이유가 없습니다.


Meilisearch를 선택한 이유

사이드 프로젝트에 게시글 검색 기능을 붙이면서 처음에는 Elasticsearch를 세팅했습니다. VPS 메모리가 2GB인데 Elasticsearch만 올리니까 나머지 서비스가 뻗더군요.

Meilisearch로 교체한 뒤 달라진 점입니다.

  • 메모리 — 50MB 정도만 차지합니다. 같은 VPS에서 다른 서비스들과 여유롭게 공존합니다.
  • 설치 — curl 한 줄이면 끝입니다. JVM 설치도, 클러스터 설정도 필요 없습니다.
  • 스키마 — JSON 넣으면 자동 인덱싱됩니다. 매핑 정의가 필요 없습니다.
  • 오타 보정 — 따로 설정한 게 없는데 기본으로 동작합니다. "파이선"으로 검색해도 "파이썬" 결과가 나옵니다.
  • 검색 속도 — 체감상 Elasticsearch보다 빨랐습니다. 공식적으로 50ms 이내를 보장합니다.
  • REST API — 직관적이라 문서를 거의 안 봐도 됩니다.

그래도 Elasticsearch가 나은 경우

Meilisearch가 만능은 아닙니다.

  • 복잡한 집계(Aggregation) — 통계, 그룹핑 같은 분석 쿼리는 Elasticsearch가 훨씬 강력합니다.
  • 로그 분석 — ELK 스택(Elasticsearch + Logstash + Kibana) 조합은 대체할 게 없습니다.
  • 대규모 데이터 — 수백만 건 이상이면 Elasticsearch의 분산 처리가 필요합니다.
  • 복잡한 쿼리 — 다중 조건 필터링, bool 쿼리 등은 Elasticsearch의 쿼리 DSL이 더 유연합니다.

결론

  • 게시글, 상품, 문서 검색 같은 소규모 프로젝트Meilisearch
  • 로그 분석, 대규모 데이터, 복잡한 집계 → Elasticsearch

수만 건 이하 데이터에 Elasticsearch를 올리고 있다면 Meilisearch로 바꾸는 걸 추천합니다. 설치 1분, 메모리 50MB, 검색 50ms. 안 쓸 이유가 없습니다.

반응형

+ Recent posts