-
Meilisearch를 이용한 검색엔진공부/meilisearch 2025. 6. 9. 23:10
대표적인 검색엔진으로는 Elasticsearch(이하 ES)가 있습니다. ES는 로그 수집, 모니터링, 검색 서비스 등 다양한 분야에서 널리 활용되고 있으며, 그만큼 완성도 높은 오픈소스라고 할 수 있습니다.
그러나 초기 서비스 단계에서 과도한 리소스를 투입하는 것은 비용 측면에서 비효율적일 수 있습니다. ES는 기본적으로 많은 시스템 자원을 요구하며, 일반적으로 안정적인 운영을 위해서는 최소 t3.medium 이상의 인스턴스를 사용하는 것이 권장됩니다.
MAU가 높거나 트래픽이 많은 서비스라면 ES를 사용하는 것이 안정성과 확장성 측면에서 효과적인 선택이 될 수 있습니다. 그러나 비교적 트래픽이 적거나 단일 서버 기반의 경량 서비스를 운영하는 경우에는, ES보다는 Meilisearch와 같은 경량 검색엔진이 더 효율적인 대안이 될 수 있습니다.
물론 Redis를 기반으로 한 RediSearch 같은 대안도 존재하지만, 이 글에서는 Meilisearch(이하 MS)를 중심으로 말씀드리고자 합니다.
1. MS 공식문서를 이용하여 이미지를 설치하여 컨테이너를 실행합니다.
- docker hub(링크)- 저는 1.14 버전을 docker-compose로 설치하였습니다. (CLI 설치방법 - 링크)
version: '3.1' services: ms: image: getmeili/meilisearch:v1.14 ports: - 7700:7700 environment: - MEILISEARCH_MASTER_KEY=MASTER_KEY command: ['meilisearch', '--master-key=MASTERKEY']2. MASTER_KEY는 MS를 사용하기 위해선 필수로 사용되는 키입니다. 키는 공식 문서에서 발급받는 방식을 알려주고 있습니다.
- 마스터 키를 발급 받는 방법(링크)

- 4가지 방법 중에 1가지 방법으로 master key를 발급받으시고 docker-compose MASTER_KEY 파트에 작성해 주시면 됩니다.
- MASTER_KEY는 실제로 MS에서도 사용할 예정입니다.
3. 컨테이너가 정상적으로 실행되는 것을 확인하였다면, localhost:7700 으로 접속합니다. 물론 포트를 바꾸셨다면 바꾸신 포트로 입력하시면 됩니다.
- 우측 상단에 Api Key를 눌르면 키를 입력하라는 팝업 창이 나타날 것입니다.
- 컨테이너를 생성할 때 발급받은 Master Key를 이곳에 넣어주면 사용하실 수 있습니다.


4. MS는 JSON, NDJSON, CSV 형태로 데이터를 저장하여 사용할 수 있도록 제공하고 있습니다.
- 저는 필요한 데이터를 JSON 형태로 insert 할 예정입니다.
// test.json [ { "id": 1, "product": "치즈" }, { "id": 2, "product": "우유" }, { "id": 3, "product": "라면" }, { "id": 4, "product": "설탕" }, { "id": 5, "product": "김" } ]5. 준비된 json 파일을 기준으로 환경에 맞게 insert 하면 됩니다.
- 저는 Postman으로 진행하였습니다. ( 공식문서가 정말 잘 돼있어서 다른 언어로 진행하신다면 보고 따라 하기 편하실 거 같아요.) - 링크
curl --location 'http://localhost:7700/indexes/test/documents?primaryKey=id' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer MASTET_KEY' \ --data-binary 'test.json'
- 정상적으로 등록이 됐다면, 좌측 상단에 indexes로 지정한 test로 index가 보입니다.
- 실제로 indexes 이후에는 indexUid를 지정하는 것이고, docouments 이후는 pk값을 지정한다고 봐주시면 됩니다.
6. 저장된 데이터를 조회하여 확인해 봅니다.


7. 데이터 업데이트
- 변경된 json을 동일한 POST 요청으로 데이터 업데이트를 진행할 수 있습니다.
[ { "id": 6, "product": "안약" }, { "id": 7, "product": "오이" }, { "id": 8, "product": "우동" } ]8. 데이터에 커스텀 순서 부여
- 커스텀 순서 부여는 MS indexes 마다 Settings를 지정할 수 있는데 여기서 ranking-rules를 이용하여 지정할 수 있습니다.
- test의 순서는 id를 기준으로 됩니다.
- test의 순서는 product의 오름차순으로 변경해보았습니다.

변경 전 - 변경 방법
- Settings를 변경하며, json으로 등록한 데이터를 어떻게 처리할 것인지 지정하면 됩니다.
- 저는 product를 오름차순(asc)으로 정리하였습니다.(기존 ranking-rules는 변경하지 않았습니다.)


변경 후
공식문서를 보면 모르는 부분도 알게 되고 이해하기 쉬울 것이라고 생각합니다. 저도 도입을 하면서 공부를 하고 있는 단계라서 부족한 부분이 있을 수 있다고 생각합니다. 하지만 초기 서비스에서는 러닝커브가 높지 않을 것이라고 생각하고 있으며, 활용도도 정말 좋을 것이라고 생각하고 있습니다. 추후에는 어떤 식으로 더 설정할 수 있는지 학습하여 글을 작성할 수 있도록 하겠습니다.
특정 문제나 궁금한 점을 검색하며 찾아보고 작성한 글입니다. 혹시라도 부정확한 정보를 전달드릴 수 있습니다. 틀린 부분이 있으면 댓글을 남겨주세요.
Ref.
https://www.meilisearch.com/docs/home
Documentation - Meilisearch Documentation
Browse millions of products in our Nuxt 3 e-commerce demo app.
www.meilisearch.com
Meilisearch QUICK 하게 설치해보기
Meilisearch는 모든 웹사이트 또는 애플리케이션과 쉽게 통합되는 사용자 중심의 오픈 소스 검색 엔진입니다. 입력 방식 검색, 오타 허용, 패싯 검색, 지역 검색, 멀티 테넌시 등의 강력한 기본 제공
velog.io