이커머스에서 검색엔진이 필요한 이유

Jimin Lee
4 min readJun 8, 2020

--

29CM에서는 ElasticSearch를 활용하여 검색 서비스를 운영하고 있습니다.

이번 글에서는 29CM 검색 서비스를 통해 “이커머스 상품 검색엔진의 역할”에 대해서 살펴보고자 합니다.

상품 검색 시스템을 처음 접한다면 검색 엔진의 필요성을 느끼지 못할 수도 있습니다. 일반적인 패턴처럼 RDB에 질의하면 된다고 생각할 수도 있죠.

SELECT * FROM products WHERE product_name LIKE '%{search_keyword}%'

규모가 작은 시스템이라면 이 방식이 유용할 수 있습니다. 그러나 이는 검색 품질이 낮고, 다양한 비즈니스 요구사항을 반영하기 어렵습니다. 그리고 성능과 시스템 관리 측면에서도 기술적 한계가 있습니다.

반면, 검색엔진으로 얻을 수 있는 이점들은 다음과 같습니다.

상품 정보 텍스트에서 의미있는 용어를 추출할 수 있다

RDB를 사용한 단순 질의에서는 검색 키워드가 상품명에 정확히 포함되어 있어야 해당 상품을 조회할 수 있습니다.

예를 들어, “다이슨선풍기" 키워드로는 “다이슨 DP-03 퓨어쿨 선풍기” 상품을 조회할 수 없습니다.

검색엔진은 다양한 패턴의 키워드로 원하는 상품을 찾을 수 있도록 돕는 역할을 합니다. 예를 들어, “다이슨선풍기"가 입력되는 경우, “다이슨”과 “선풍기"가 포함된 문서를 찾을 수 있죠.

검색엔진은 텍스트에서 의미있는 용어를 추출하고, 이를 색인함으로써 위와 같은 문제를 해결합니다.

“다이슨”+”선풍기" 형태소가 포함된 문서를 검색한 결과

검색엔진이 텍스트에서 의미있는 용어를 추출하는 방법은 크게 3가지 입니다.

  • 형태소 분석
  • 불용어 처리
  • 어간 추출

이 덕분에 검색 키워드와 상품 텍스트가 정확히 일치하지 않더라도, 의미가 같다면 검색이 가능해집니다.

동의어 검색이 가능하다

구매자가 상품을 인지하는 명칭과 판매자가 상품을 인지하는 명칭은 다릅니다. 검색엔진은 인지의 차이를 줄이는 역할을 담당합니다.

“동의어 기능"은 형태소의 의미를 확장하는 역할을 담당합니다. 예를 들어, “검정 구두"를 검색하면 “블랙 구두"가 검색될 수 있는 이유는 “검색엔진"의 동의어 기능 덕분입니다.

복잡한 정렬이 가능하다

검색에서 관련성이 높은 상품을 상위에 노출시키는 것이 중요합니다. 여기에서 관련성의 기준을 “키워드와 문서의 유사도”로 단정할 수는 없습니다. 요즘 인기가 많은 상품들이 상위에 노출되어야 하죠.

때문에 검색 서비스에서 상품은 여러 기준으로 정렬되어야 합니다.

이를 RDB로 구현하려면 복잡한 테이블 조인 수식이 필요합니다. 그리고 많은 테이블을 풀스캔하여 DB 부하를 일으킬 수도 있습니다.

반면, 검색엔진으로 사용하면 좀더 간결한 코드로 빠르게 상품을 정렬할 수 있습니다.

추천순에는 여러 정렬 기준이 적용된다

다양한 속성으로 검색이 가능하다

검색엔진을 활용하면 상품의 카테고리/브랜드/상품명/색상 등으로 검색하는 것이 수월합니다.

프라이탁 브랜드의 백팩 카테고리를 검색한 결과

다양한 속성에 질의하는 로직을 RDB SQL으로 구현하는 경우, 복잡한 조인 수식이 필요하고 테이블 스캔으로 인한 DB 부하가 발생할 가능성이 있습니다. 앞서 언급한 “정렬” 이슈와도 동일하죠.

이외에도 검색엔진은 오탈자 교정, 검색어 제안 등 많은 역할을 담당하고 있습니다.

이 글이 검색엔진의 필요성은 알고 있지만, 구체적인 이유를 궁금해하셨던 분들께 도움이 되었으면 하네요 🙂

이 글은 아래의 포스팅을 참고하여 작성했습니다.

--

--