검색 엔진이란 무엇인가?
대부분의 서비스들은 데이터의 등록, 수정, 삭제 보다 조회 요청이 월등히 많다.
특히 E-Commerce 서비스의 경우 검색의 조건이 매우 다양하고, 데이터가 방대하다. 이런 경우 DB를 직접 조회해서 데이터를 표출하면 페이지 조회 성능이 떨어질 것이다.
이렇게 검색을 많이 활용하는 서비스의 검색 속도를 향상 시키기위해 만들어진 것이 바로 검색 엔진이다.
검색 엔진이 검색 속도가 빠른 이유는 검색 엔진 자체의 알고리즘, 매커니즘이 있기도하고, 대부분 Memory에 자주 검색하는 데이터를 올려놓고 사용하기 때문에 Disk에서 조회하는 DB 접근 방식보다 빠르다.
DB도 인덱스를 사용하면 Memory 접근이 가능하지만, 다양한 검색 조건을 모두 만족시키는 것은 매우 힘든 일이다.
현재 진행하고 있는 프로젝트의 통합검색 기능에 검색엔진을 활용하기로 하였고, 어떤 검색엔진이 있는지 조사해보았다.
검색엔진 비교
유명한 검색엔진인 ElasticSearch와 이번에 사용하게된 Meilisearch 두 가지에 대해서만 비교해보겠다.
먼저 ElasticSearch는 대규모 분산 환경에서 복잡한 쿼리를 수행하는 것에 적합하다.
즉, 서비스의 관리자들이 보는 대시보드나, 복잡한 통계 데이터, 로그 분석, 서비스 모니터링에 강점을 보이는 반면, 리소스 사용량이 매우 높고, 어렵고 복잡하다.
반면, Meilisearch는 사용자를 위한 검색 기능을 제공하는 것에 적합하며, 매우 빠른 속도와 쉬운 설정, ElastcSearch에 비해 낮은 리소스 사용량을 가지고 있으나 대규모 분산 환경과 복잡한 통계 데이터를 가져오는 것에는 적합하지 않다.
다른 검색엔진과의 비교에 대한 내용은 여기서 확인할 수 있다.
MeiliSearch의 특징
공식 문서를 참고하여 정리하였다.
Meilisearch는 RESTful 검색 API를 제공하는 검색엔진 서버이며, 무료로 직접 구축하는 Self-Host와 비용을 지불하여 서비스를 제공받는 Cloud Service 모두 제공한다.
특징을 글로 보기 전에 먼저 Meilisearch의 활용 예시를 보면 이해가 쉬울 것이다. (실제로 기능을 사용해보는 것을 추천한다.)
예시를 보고왔다면, 이제 특징을 알아보자.
- 50ms 이내의 응답 속도
- 검색어를 입력하는 중에도 실시간 검색이 가능하다.
- 검색창에서 한 글자 입력할 때마다 검색 결과를 보여줄 수 있다.
- 검색어 일치 허용 범위를 지정할 수 있다.
- 정확히 일치하는 결과만 가져올 수도 있고, 오차 범위를 허용할 수도 있다.
- 중국어, 일본어, 히브리어와 라틴 알파벳을 사용하는 언어에 대해 최적화된 지원을 한다.
- 검색엔진에 문서로 데이터를 올려두기 때문에 검색 시 전체 문서를 반환한다.
- 검색과 인덱싱에 대해서 다양한 사용자 정의 기능을 제공한다.
- 검색 시 필터링과 패싯 검색이 가능하다.
- 패싯 검색은 쿠팡 같은 검색 조건이 매우 많은 서비스에서 자주 사용되는 검색조건을 따로 제공하는 것
- 전자상거래 서비스의 좌측 메뉴를 보면 이해하기 쉽다.
- 검색 결과로 반환한 문서에서 검색 결과에 일치하는 부분을 강조할 수 있다.
- 검색 시 결과에 검색어와 동일한 분분에 하이라이트 표시가 가능
- 한번의 HTTP 요청으로 여러 인덱스에 대한 여러 검색 쿼리를 수행할 수 있다.
- 한번의 검색에 대해 여러 결과가 필요한 경우
- Geosearch 지리적 위치를 기준으로 검색 결과를 필터링하고 정렬할 수 있다.
- 야놀자 같이 위치 기반 검색이 필요한 경우
- Index Swapping을 통해 서비스의 다운타임 없이 DB 데이터를 검색엔진에 업데이트 할 수 있다.
- 새로운 검색 인덱스를 생성하고 기존 인덱스와 교체하는 방식으로 인덱스 업데이트
- 이를 통해 다시 이전으로 복구하는 것도 가능
- Multitenancy와 tenant token을 이용해서 여러 사용자에 대해 검색할 수 있는 문서를 지정할 수 있다.
- tenant란 사용자 그룹을 뜻한다.
- A라는 유저는 A 인덱스의 데이터만 볼 수 있고, B는 B 인덱스의 데이터만 볼 수 있다
Reference
https://www.meilisearch.com/docs
https://github.com/meilisearch
'개발 > 기능 개발' 카테고리의 다른 글
MeiliSearch - Java, Spring 검색 기능 구현 (0) | 2025.01.16 |
---|---|
[Spring] Filter & Interceptor & AOP (0) | 2023.05.29 |
[Spring] IoC & DI (0) | 2023.05.24 |
[인증] JWT(JSON Web Token) (0) | 2023.04.19 |
[Spring] Rest Docs와 Swagger UI (0) | 2023.04.11 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!