반응형
프로젝트에 검색 기능을 넣으려고 할 때 가장 먼저 떠오르는 게 Elasticsearch입니다. 그런데 소규모 프로젝트에 Elasticsearch는 솔직히 과합니다.
사이드 프로젝트에 검색 기능을 붙이면서 Meilisearch를 적용해봤는데, 결론부터 말하면 소규모에는 Meilisearch가 압도적으로 편했습니다.
Meilisearch가 뭔가요
Rust로 만들어진 오픈소스 검색 엔진입니다. Elasticsearch처럼 전문 검색(Full-text Search)을 지원하지만, 설치와 사용이 훨씬 간단합니다. 오타 자동 보정(Typo Tolerance)이 기본으로 켜져 있어서 사용자가 "Pytohn"이라고 검색해도 "Python" 결과를 보여줍니다.
핵심 비교
| 항목 | Meilisearch | Elasticsearch |
|---|---|---|
| 언어 | Rust | Java |
| 설치 시간 | 1분 (curl 한 줄) | 30분~1시간 (JVM + 클러스터 설정) |
| 메모리 사용 | ~50MB | 최소 1~2GB (JVM 힙) |
| 설정 난이도 | REST API로 바로 사용 | 인덱스 매핑, 샤드, 레플리카 설정 필요 |
| 오타 보정 | 기본 지원 | 별도 설정 필요 |
| 검색 속도 | 50ms 이내 | 수십~수백ms |
| 한국어 검색 | 지원 (내장 토크나이저) | nori 플러그인 설치 필요 |
| 라이선스 | MIT | SSPL (제한적) |
| 적합한 규모 | 소~중규모 | 대규모, 로그 분석 |
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. 안 쓸 이유가 없습니다.
반응형
'etc' 카테고리의 다른 글
| 소스트리 git status failed with code 128 에러 해결방법 (0) | 2023.02.19 |
|---|---|
| 소스트리 원격 Git push 이유없는 에러 해결법 (0) | 2020.08.31 |
| [그누보드5][php 7.3] 그누보드 갤러리형 게시판 깨짐 오류 해결 (0) | 2020.05.21 |
| [FFMPEG] ffmpeg 로 파일 인코딩시 AMD 라데온 그래픽카드 가속 명령어 (0) | 2019.07.05 |
| [NGINX] an upstream response is buffered to a temporary file 에러 해결방법 (0) | 2017.01.17 |