검색과 추천 서비스에 관심을 가지고 앞으로 해당 서비스를 개발하고 싶다는 마음으로 Elasticsearch를 공부하고 있다.
구조와 알고리즘에 대해서도 공부하고 있지만, 만약 내가 당장 검색 시스템을 구축해야 한다면 어떻게 해야 할까?
최근에 있었던 경험을 재현하면서 검색 시스템에 대해 고민해 보는 시간을 가졌다.
얼마 전부터 빨간색 티셔츠를 구매하고 싶은 마음이 들어 몇 차례 검색을 했었는데, 원하는 결과를 얻지 못하고 구매를 포기했던 경험이 있다. 내가 원하는 티셔츠의 조건은 다음과 같았다.
- 빨간색
- 반소매
- 오버사이즈
가장 중요한 항목은 이렇게 3개였다.
구체적으로 원하는 디자인이나 가격대는 어느 정도 감안하고 볼 생각으로 후보에서 일시적으로 제외했다.
빨간색 = 반소매 > 오버사이즈
우선순위는 빨간색과 반소매가 오버사이즈보다 높았기 때문에 처음에는 빨간색 반소매로 검색했다.

내가 입력한 빨간색 반소매라는 검색어와 무신사 추천순이라는 필터를 통해 화면과 같은 검색 결과를 얻을 수 있었다.
상품 데이터에서 빨간색과 반소매를 검색하고, 검색 결과 데이터를 내부 추천 알고리즘을 이용한 추천순이라는 필터로 정렬한 내용일 것이라고 추측했다.

로그인한 후에 동일한 검색어를 입력하여 화면과 같은 검색 결과를 얻을 수 있었다.
사용자가 평소에 선호하는 브랜드를 알 수 있는 좋아요 정보를 통해 검색 필터 상단에 좋아요한 브랜드의 상품을 보여줄 수 있는 필터도 제공하고 있었다.
하지만 해당 브랜드의 상품 대부분은 추천 목록 상위권에서 찾아보기 어려웠다.
빨간색 티셔츠를 구매하고 싶었지만 흰색 바탕에 빨간색 로고가 들어간 티셔츠나, 원하는 핏이 아닌 티셔츠가 목록의 상단에 떴다.
특정 카테고리에서 필터만을 이용한 검색을 할 수 있다는 점을 알게 되었고 이를 활용한 두 번째 검색을 시도했다.

다양한 조건을 선택하여 검색어 없이도 원하는 결과를 얻을 수 있는 필터가 존재했다. 모든 구체적인 조건을 반영하지 않더라도 원하는 항목을 강력하게 적용할 수 있다는 점에서 굉장히 편리할 것 같다고 생각했다.
이번에는 소매기장 > 반소매, 색상 > 레드 필터를 이용해서 두 번째 검색을 시도했다.

필터와 검색어라는 차이가 있지만 첫 번째 검색과는 또 다른 결과가 나타났다.
첫 번째 검색 결과와 비슷하게 추천된 항목은 1개뿐이었고, 나머지는 전부 새로운 항목이 우선적으로 정렬되었다.
빨간색이라는 검색어가 상품명에 영향을 주었다고 생각해서 색상 > 레드라는 필터를 사용했지만 빨간색 로고가 있는 새로운 흰색 티셔츠가 결과에 나타났다.

로그인 후에 동일한 필터를 사용하여 검색한 결과이다.
첫 번째 회원 검색 상위권에 나타났던 항목과, 두 번째 비회원 검색 상위권에 나타났던 항목과, 처음 보는 항목까지 복합적인 결과가 나타났다.
첫 번째 검색과 다른 점으로는 검색어를 통한 검색 결과는 좋아요 기반의 데이터를 제공하지만 필터를 통한 검색 결과에서는 제공하지 않는 것으로 보였다.
결과적으로 처음 구매를 결심하고 상품을 검색했을 때는 원하는 결과를 얻지 못해서 결제까지 이루어지지 않았다. 시간이 흐르고 정확하게 원하는 품목이 생긴 상태에서 해당 상품의 존재 여부를 확인하기 위해 다시 검색을 했다.
정확하게 원하는 상품을 찾게 된 경위는 다음과 같다.
과정 1. 인스타그램 내에서 지속적인 스트릿 스타일 게시글 살펴보기 및 저장
과정 2. 과정 1이 추천 알고리즘 형성에 영향을 끼침
과정 3. 추천 알고리즘이 제안하는 게시글 중에서 원하는 디자인 발견
이 과정을 통해 구체적인 상품을 찾기 위해 다시 무신사를 이용했다.
원하는 항목을 키워드나 필터로 검색했을 때 바로 확인할 수 없었던 경험을 통해서, 상품을 검색하는 것이 아니라 브랜드를 검색하고 해당 브랜드 페이지 내에서 직접 확인하는 방식으로 상품을 찾아냈다.
결과적으로 검색을 통해서는 원하는 상품을 찾지 못했지만, 반복적인 노출로 인해 형성된 추천 알고리즘의 도움을 얻었다. 그리고 추천 알고리즘이 새로운 검색으로 이어지는 경험을 하면서 검색과 추천 시스템의 연계성에 다시 한번 흥미로움을 느꼈다.
상품 구매를 목적으로 검색했을 때, 기존에 좋아요했던 브랜드나 상품의 스타일을 검색 결과에 반영했다면 원하는 상품의 존재를 조금 더 빨리 알 수 있지 않았을까 하는 생각을 했다.
로그인한 회원 정보를 구체적으로 활용하여 개인화된 결과를 제공한다면 만족도가 올라가지 않을까?
개인화된 결과를 제공하기 위해서는 어떻게 구조를 설계하고 활용할 수 있을까?

브랜드, 카테고리, 상품명을 대상으로 검색 결과를 얻는다면, 어떤 항목을 활용하여 정렬에 도움을 줄 수 있을까?
회원 정보에서는 크게 구매 내역, 좋아요, 최근 검색의 카테고리를 생각했고 해당 카테고리에서 공통적으로 활용할 수 있는 항목으로는 브랜드, 카테고리, 사이즈, 색상을 생각했다.
여기서 정렬에 활용할 수 있는 가장 강력한 항목은 선호 브랜드, 구체적으로는 해당 브랜드의 스타일이라고 생각했다. 나머지 항목은 사용자가 필요를 느끼는 것에 따라 매번 우선 순위가 달라질 수 있다고 생각했다.
비회원의 경우에는 개인화된 정보를 얻을 수 없기 때문에 검색과 조회 순위, 기존 회원 대상으로 한 좋아요 순위를 바탕으로 정렬하여 제공하는 것이 최선의 방법이라고 생각했다.
회원일 경우에는 선호하는 브랜드와 동일한 스타일의 카테고리나 유사한 스타일을 기준으로 우선순위 데이터를 생성하고, 검색 결과에 이를 필터링하여 정렬하면 조금 더 만족스러운 결과를 낼 수 있지 않을까 생각했다.
구체적으로 어떤 산정 방식을 사용할 수 있는지와 같은 구조에 대해서는 조금 더 생각이 필요하다.
이커머스의 검색은 구매와 직결되어서 영향력이 큰 시스템이라고 느꼈다.
검색과 추천은 다른 개념이지만 사람들의 무의식 속에 존재하는 욕구를 꺼내서 선택의 도구로 쓸 수 있다는 점이 가장 흥미로운 것 같다. 개인화된 추천과 필터링을 기반으로 한 검색 시스템을 구축해 보고 싶다는 생각도 했다.
이를 잘 활용한다면 긍정적인 효과로는 더 많은 결제를 이끌어낼 수 있다는 점이 있지만, 반대로 사용자가 개인적인 정보 활용에 대해 부담을 느끼고 서비스 사용을 거부하는 경우도 생길 수 있을 것 같다.