초기 커머스에서 기본적인 검색 시스템을 설계하는 방법
대부분의 커머스 서비스는 검색기능을 제공하는 경우가 많다. 하지만 미리 계획을 짜두지않은 경우, 보여주는 검색결과가 엉망이 되기 쉽다. 그래서 오늘은 초기 커머스 서비스에서 검색시스템을 만드는 방법에 대해 이야기해보도록 하겠다.
1.
검색시스템은 기본적으로 키워드를 찾아 일치하는 정도를 매칭해주는 형식이다. 하지만 100% 매칭하는 키워드만 검색하는 경우, 사람들이 원하는 내용을 제대로 찾기가 어려워진다. 그러니 단순 키워드 매칭을 넘어, 다른 무언가를 준비하는 것이 필요하다. 바로 유사한 키워드를 묶어주고, 비슷한 내용의 검색을 하나로 통일하는 방식이다.
텍스트 유사도를 분석하는 방법에 대한 내용
https://brunch.co.kr/@kakao-it/189
우리가 쓰는 단어들은 사람마다 쓰는 방식이 조금씩 다르다. 특히 외국어를 한글로 번역해서 읽히는 방식을 단어르 쓰는 음독 형태의 경우는 더욱 그렇다. 예를 들어 초콜릿은 초코렛이나 초컬릿, 초코렛 등 다양한 변형형태로 사용된다. 물론 주로 사용되는 단어는 존재하겠지만, chocolate같은 영어표기나, choco 같은 짧은 표기의 경우는 상황이 다르다. 분명 동일한 단어를 뜻하지만, 100% 매칭키워드 방식을 사용하는 경우 모두 다른 결과가 나온다. 심지어 일부 키워드는 상품명이 조금 다르다는 이유로 검색 자체가 불가능해지는 경우도 발생한다. 이런 문제들을 해결하기 위해 등장하는 것이 단어 클러스터링이다.
유사한 단어를 묶어서 동일한 결과값을 보여주는 클러스터링
클러스터링은 일반적으로 개발자 한명이 구현하기가 쉽지않은 기능이다. 그래서 별도 API를 사용하거나, AI 기능을 탑재한 클라우드 서비스 등을 이용하는 것이 편리하다. 다만 이런 지점들을 당장 구매하거나, 연결하기 어려운 상황이라면, 다른 방법이하나 더 있다. 바로 한국어 기준, 글자의 자음과 모음의 형태로압축해 유사한 단어를 찾는 것이다. 그리고 그 유사도의 대상은 바로 제품 카테고리에 사용된 텍스트다. 영어의 경우는 적용이 더 쉽고, 한글의 경우 자음과 모음을 분해해 비슷한 기능을 구현할 수 있다.
퍼지문자열 검색 (자음모음 분해)
https://taegon.kim/archives/9919
2.
이외에도 커머스의 검색에서 신경써야할 것들이 하나 더 있다. 바로 '사람들이 검색결과가 없는 단어'를 입력했을 때. 그 내용을 저장하고, 그 횟수를 카운트하는 것이다. 일반적으로 사람들은 자신이 '알고있는 단어'를 입력한다. 하지만 그 결과값이 서비스 자체에서는 검색할수 없거나. 결과값이 없는 상황이 발생한다. 이런 경우, 그냥 결과없음 - 화면을 보여주기보다, 다른사람들이 검색한 인기키워드를 보여주는 편이 훨씬 낫다.
다만 인기키워드를 만들어내려면, 사람들이 검색한 키워드를 클러스터링으로 묶어서 정리하거나. 혹은 비슷한 문자열에 가까운 카테고리 등과 묶어 따로 기록을 해줘야한다. 이 경우도 백엔드 개발자에게 물어보면 구현이 쉽지 않다고 이야기할 수 있다. 그러니 이 경우에는 적어도, 나중에 기능을 업데이트 할 수 있도록 '어떤 단어들이, 얼마나 자주 검색되었는가'를 저장하는 정도로 처리를 요청하는게 좋다.
나중에 커머스 서비스에 광고서비스를 집어넣거나, 기능을 업그레이드했을 때. 이렇게 준비해둔 자주검색된 키워드들은 써먹을곳이 많기 때문이다. 조금 더 머리를 써보자면, 운영과정에서 '자주 검색된 상품 키워드'를 운영자나 MD 쪽에서 추가하는 방향도 생각해볼 수 있다. 다만 이 경우에는 별도의 관리자 화면에서, 해당 화면을 볼 수 있게 따로 설계를 해줘야할 것이다.
3.
커머스 기준에서 검색을 했을 때, 어떤 제품을 가장 먼저 보여줘야할까? 커머스 운영하는 사람들이라면 항상 고민하게되는 지점들이다. 초기 커머스에서는 이런 검색기준에 노출할 정보들이 많지않다. 그러니 가장 편리한 방법은 '판매량'과 상품 페이지에 대한 방문자 수를 저장해서 보여주는 방법이다.
어떤 제품이 더 인기있는 제품인가? 판매량과 방문자수, 리뷰수, 별점표기
일반적으로 상품 검색결과에서 제일 상단에 나오는 것들은 대부분 '검증된 상품'일 가능성이 높다. 그만큼 사람들이 많이 찾은 결과값이기 때문에, 검색에 들이는 시간을 줄여줄 수 있다. 여기에 리뷰수나 별점표기 같은 것들까지 추가되는 경우, 누적된 데이터 양에 따라 검색 신뢰도가 급격히 올라갈 수 있다.
물론 이런 방식에도 단점이 없는건 아니다. 가장 오래전에 등록되어서, 꾸준히 판매되어온 상품들이 가장 우선적으로 노출되는, 키워드별 검색결과가 고정되어버리기 때문이다. 이런 상황에서는 신규 업체의 제품이나, 다른 우수한 제품들이 노출되기가 어렵다. 그래서 대부분의 커머스들은 '광고 상품'을 기획한다.
4.
대부분의 광고상품은 검색기반으로 동작하는 경우가 많다. 말 그대로 '검색어'에 대응하는 형태로 특정 상품의 결과 상단에 보여주는 형태다. 과거에 등록되어, 현재까지 잘 판매되고있는 베스트 상품들은 왠만해서 검색어 상위를 놓치지 않는다. 이런 상황에서는 광고를 통한 신규 제품 노출이 오히려 도움이되기도 한다. 신규 제품을 판매하는 판매자들도 구매자들에게도 판매기회를 만들어주는 것이다.
다만 이 역시도 장점만 있는 것은 아니다. 검색결과를 어떻게 설계하느냐에 따라, 꾸준히 광고하는 특정 상품들만 검색에 노출되는, 판에박힌 결과가 나오기도 한다. 어찌보면 자본주의 사회에서는 당연한 이야기겠지만, 비용을 내고 키워드를 선점해버리면 다른 업체들은 방법이 없다. 이런 지점이 커머스 운영업체 측에는 큰 수익원이 되어주긴 하겠지만, 단점이 크다는 점 역시 기억해두어야한다.
만약 백엔드 개발자들이 여유가있는 상황이라면, 다양한 로직을 적용해 검색결과를 좀 더 튜닝할 수도 있다. 예를 들어 사용자가 검색한 단어에 연관된 키워드들을 찾아서, 그중 판매량이 많고, 자주 검색된 키워드의 상품도 보여주는 것이다. 물론 이런 방식 또한 키워드에 연관된 유사 키워드나, 인기키워드 등의 '클러스터링' 이 필요한 방식이다. (혹은 정말 무식하게, 연관검색어를 주요 검색어마다 강제로 연결시켜줄수도 있다.)
-
이처럼 검색결과를 어떤 기준으로 보여주느냐에따라, 커머스의 검색형태는 다양한 방식으로 변화할수 있다. 단지 문제가 있다면, 이걸 구현하는 개발자 입장에서 그 로직을 쉽게 짤 수 있을 것인지. 좀더 그들이 '단순하게' 그 기능을 구현하려면 어떻게 해야하는지를 찾아주는게 중요하다. 그리고 그런 지점을 찾아서, 가능여부를 찾아내는게 기획자의 역할이기도 하다.
그러니 일단 개발자분들에게 물어보자. 이 기능, 개발할 수 있을까요?