[interview] 나만의 취향을 발견해 주는 아이디어스의 힘, 검색 추천 기술을 이야기하다.

Saeyeon Park
Backpackr Team (idus, Tumblbug, Steadio)
35 min readMar 18, 2022

아이디어스팀에서 검색&추천을 개발하고 있는 무권님을 만나 아이디어스팀의 기술력, Deep dive 하고 왔습니다.

Part 1. How I started.

Q. 안녕하세요 무권님, 자기소개 부탁드려요!

안녕하세요. 저는 검색 관련 분야에서 20년 이상 몸을 담았습니다. 강산이 두 번이나 바뀌는 동안에도 ‘검색 엔진’ 한 우물만 파게 되었네요. 제가 걸어온 커리어를 뒤돌아 보니, 검색의 역사를 함께했다고 말할 수 있을 것 같아요.

검색엔진의 발전 (1995 ~ 현재)

1995년, 국내 검색 엔진의 탄생

검색 엔진 분야는 대학원 석사 시절 선배님의 ‘까치네’ 서비스를 이어받으며 입문했었어요. 당시 1995년도 즈음에는 국내에 www와 같은 웹이 들어오면서 탄생하게 되었던 것 같아요. 이를 기반으로 한 문서(Document, 브라우저를 통해 보이는 웹 페이지 등을 의미) 생성이 많아지게 되자, 문서를 찾기 위한 웹 검색에 대한 니즈가 높아지고 검색엔진 서비스가 생겨났었죠.
저는 그중 국내 최초 한글 웹 크롤러를 이용한 인터넷 검색 엔진 서비스 ‘까치네’ 를 함께 개발했었습니다. 사용자가 검색어를 입력 하면, 해당 검색어를 1차적으로 이해 해야 관련 문서들을 찾을 수 있기 때문에 사용자의 쿼리를 이해하는 Searcher 모듈을 개발하거나 검색 시스템 운영 업무를 담당했었어요.

2000년, 기업 자체 검색 엔진 서비스 태동

2000년도에 접어들자 고객들에게 더 많은 양의 정보들을 제공하기 위해서 자체 검색엔진 개발에 대한 니즈가 생겨나기 시작했습니다. 저는 이무렵 현대백화점 온라인 사업부에서 웹 검색과 웹 크롤러 관련 개발을 했었어요.
온라인 웹에서 검색 할 수 있게 하려면 1차적으로 웹에 있는 모든 문서를 수집하고, 이 문서를 리파지토리(repository)라는 특정 공간에 저장해야 하는데요, 해당 기능 개발을 위해 관련 모듈과 크롤러들을 저장할 수 있는 대용량 데이터 공간 등을 만들었습니다.

2005년, 기업형 웹 검색 엔진의 고도화

2000년대 중반에는 기업마다 검색엔진이 구축되어 가고 있었어요. 이에 따라 기업형 검색 엔진 개발이 활발했죠. 당시 저는 다음소프트라는 회사에서 여러 기업의 니즈를 맞춘 기업형 검색엔진 서비스를 개발하는 작업들을 진행했습니다.
이후, Daum communication으로 넘어오면서 검색엔진 고도화 니즈에 발맞춰 전반적인 검색 엔진 교체 작업을 하기도 했습니다. 포털 회사이다 보니 검색 유닛들이 다양하잖아요. 어학사전, 카페, 뉴스 등 다양한 유닛들을 하나로 통합하여 제공하는 사이트를 담당하여 각 유닛들이 동적으로 움직이는 고도화된 구조를 만드는 데 집중했었어요. 수많은 정보를 갖고 있는 포털은 쿼리의 request 수가 일반 Enterprise보다는 월등히 많아서 안정성과 속도가 보장되어야 하거든요, 그러면서도 자유자재로 들어오는 쿼리에 따라 unit들이 동적으로 변경될 수 있는 구조로 고도화하던 작업이 가장 기억에 남네요.
동적인 구조를 조금 더 설명드리면, 검색창에 특정 키워드를 검색했을 때 뉴스, 어학사전과 같은 카테고리가 랜덤으로 나열되는 것이 아니라 검색한 키워드와 밀접하게 연관된 카테고리를 먼저 보여주는 겁니다. 예를 들면 ‘올림픽’을 검색했을 때, 올림픽 시즌이 아닌 경우 올림픽의 연혁과 같은 사전 카테고리가 나오고, 올림픽 시즌에는 진행된 경기 관련 뉴스, 경기 결과 등이 먼저 나오는 거죠.

2010년, 소셜 커머스의 검색엔진 서비스 출발

2010년도에 들어서자, 위메프 / 티몬 / 쿠팡 등 소셜커머스 이용이 폭발적으로 늘어나면서 웹 검색엔진 수요도 급증하기 시작했어요. 당시 저는 쿠팡에서 초기 검색엔진 세팅과 개선 작업 등을 진행했었습니다.
이후 개발 팀을 꾸려나가 조직과 기술 전반을 안정화하는 작업들을 많이 했었네요. 뒤돌아보니 검색엔진 전반의 구조를 새롭게 변경했던 프로젝트가 아직까지도 잊히지 않습니다. 할인 딜 기반 서비스품목(아이템) 중심 서비스로 옮겨가는 프로젝트였는데요, 딜 기반 번들로 묶이 던 상품들이 1개의 품목으로 전환되는 상황이었기 때문에 처리해야 할 문서 수가 5천 건에서 수백만 건으로 늘어나게 되는 프로젝트였어요. 성능과 응답속도에 대한 이슈들이 있었고 그래서 하나의 검색엔진이 여러 개의 서버에서 구동 될 수 있게 클러스터화 하는데 집중했었죠. 당시에는 현재 클러스터 형태와는 달리 솔라(solar)라는 검색엔진을 기반으로 하나의 서버에 하나의 검색 엔진이 올라가는 구조였거든요.
그 외에도 Ranking 관련된 작업, 타사와 함께 판매되고 있는 작품들을 확인하고 가격 경쟁력이 있는지 비교하여 분석하기 위한 Candidate 추출 작업 등 정말 다양한 프로젝트들을 진행했던 것 같습니다.

2015년, 사업 분야 별 검색엔진 구축

2015년도에는 각자의 사업 분야의 적합한 정보를 노출시킬 수 있는 검색엔진 서비스를 제공하고자 고민하던 때였어요. 쇼핑, 핀테크, 여행과 같이 비즈니스 모델에 포커싱 된 검색 서비스를 제공하고자 하는 니즈가 있었다 정도로 이해해 주시면 될 것 같아요. 이 즈음 저는 O2O 여행 서비스 야놀자에서 여행 서비스에 포커싱 된 검색엔진을 구축하였습니다. 먼저 검색 품질을 개선하기 위해 클러스터를 자유자재로 Scale out, Scale in 할 수 있게 작업했고요, 이후 사전, 랭킹에서 여행 서비스에 맞는 데이터(호텔명/지역명 등)들을 반영하기 위해 형태소 분석기를 적용하여 검색 정확도를 높였습니다.

2020년, 개인화 검색&추천 → “지금 여기 idus에서”

2019년 팬데믹 이후 주요 구매 채널이 오프라인에서 온라인으로 넘어가며, 비대면 서비스의 수요가 증가하게 되었잖아요? 이로 인해 다양한 구매 니즈를 가지고 있는 고객들을 위한 ‘개인화 추천 기능’이 중요해졌습니다. 검색은 속도뿐만 아니라 ‘얼마나 빠르게, 또 적절하게 원하는 상품을 찾아주느냐’가 포커싱 된 거죠.
그동안 제가 경험해온 것들이, 아이디어스의 검색엔진을 끌어올리는데 많은 도움이 될 것 같더라고요. 실제로 2020년 합류한 뒤 유의미한 결과들을 만들어가고 있어요. ⓐ기본적인 검색엔진 구축부터 ⓑ성능 개선을 위한 클러스터 교체산업 분야에 포커싱 된 검색 기술사전 기반 형태소 분석 등 20년 커리어 경험들을 하나하나 아이디어스 검색 기술에 담을 수 있었거든요.

저는 지금 여기, 아이디어스에서 다음과 같은 일들을 하고 있습니다.
① 검색/색인 속도 개선을 위한 시스템 구조 설계
② 검색/추천에 필요한 다양한 Tool 개발
③ 개인화 추천 모델링

Q. 20년 넘게 무권님을 몰입하게 만든 강력한 매력이 있었을 거라 생각되는데요! 그 매력이 무엇이었나요?

검색 엔진 개발은 프론트 엔드, 백엔드 역할 등 다양한 영역에서 개발할 수 있다는 매력이 있어요.

Frontend view

검색엔진은 인프라를 통해 결과가 도출되기 때문에 단순 배포 파이프라인만 필요한 게 아니라, 지속적인 상호작용(interaction)이 필요해요.
예를 들어 Ranking model 을 개발하면, 정상적으로 배포하기 전 비즈니스적 가설과 결과가 적절했는지 확인하기 위해 A/B 테스트를 진행합니다. 사용자가 해당 Ranking 정보를 통해 작품을 클릭하고 구매행위까지 하는지?, 사용자의 클릭/구매 전환이 Ranking에 적용되어 정상적으로 작동하고 있는지 보는 것이죠. 그래서 프론트엔드에서 집중하고 있는 UX 요소 또한 함께 확인하고 있고요.

Backend view

검색 엔진이 정상적으로 구현되려면 안정성과 속도 등이 보장되어야 해요. 그리고 사용자들이 자주 검색하는 키워드나, 특정 키워드에 해당하는 적절한 상품을 노출시키는 데이터 모델링 작업은 검색 노출에 중요한 역할을 담당하죠.일례로 블랙프라이데이 같은 이벤트 시즌에 검색 결과들이 응답 지연 없이 안정적으로 노출되는지 확인하여 검색 결과 속도를 확인하기도 하고요, 고객에게 방금 본 작품과 연관된 작품을 추천하는 기능을 제공할 때 적절한 데이터 모델링으로 비슷한 작품들이 추천되는지 점검하기도 합니다. 사용자에게 적절한 정보를 빠르게 제공하기 위한 검색엔진의 중추 역할을 한다고 생각하시면 돼요.

서비스 솔루션 제시 예시

위 이미지처럼 하나의 기능을 개발할 때에도 여러 관점에서 개발을 하다 보니 폭넓은 시각을 바탕으로 서비스 개선 솔루션을 제시할 수 있게 되는 것 같아요. 무엇보다 검색/추천 기능이 사용자의 만족도를 높이고 구매까지 이어지도록 만들 수 있다는 사실이 가슴을 두근거리게 만들기도 합니다.
그 외에도 서비스 개발에 필요한 일련의 과정들을 경험할 수 있는데요, 이 경험들은 조금 뒤에 더 설명드리겠습니다.

Q. 이쯤 되면 다들 궁금하실 것 같아요. 많은 e-commerce 중 아이디어스를 선택한 이유! 어떤 매력에 이끌려 합류하게 되셨나요?

아이디어스팀은 제가 머릿속으로 그렸던 이상적인 스타트업 모습과 닮아있었어요.

Culture

“문제에 집중하고, 새로운 시도나 실패에 두려움이 없어요. 오롯이 우리의 성장이 최우선이에요.”

이 문화를 처음 느꼈던 건, 2년 전 홍대 캠프에서 아이디어스팀의 이야기를 들었던 때입니다. 함께 대화를 나누었던 아이디어스팀원들의 모습과 회사의 전반적인 분위기가 딱, 제가 상상하고 이상적으로 그리던 스타트업 모습과 가장 가까웠어요. 제가 생각하는 스타트업은 ‘문제에 집중하고 새로운 시도와 실패에 두려움이 없어야 한다’라고 생각했었거든요. 아이디어스팀은 산업에서 생존에 대한 걱정보다는 ‘어떻게 하면 아이디어스와 작가님이 상생하여 사용자에게 가치 있는 작품을 제공할 수 있을까?’, ‘어떻게 하면 고객들이 새로운 작품을 발견하는 기쁨을누리게 할 수 있을까?, ‘독창적인 아이디어와 정성의 가치를 알아보는 문화를 만들려면 어떻게 해야 할까?’ 등의 고민에 집중하고 있더라고요.

People

“오직 더 나은 아이디어스를 만들기 위해 노력하는 사람들만 있어요.”

아이디어스팀을 선택했던 가장 결정적인 요인 ‘동료’였습니다. 아이디어스팀 동료들에게 아이디어스의 존재 이유와 미션, 일하는 방식들을 듣다 보니 제가 갖고 있는 pain point를 해결할 수 있겠다는 생각이 들었어요. (진심 어린 애착을 가지고 이야기하는 것에 감동받기도 했었어요)

이커머스 서비스를 운영함에 있어서 중요한 건 ‘사용자에게 어떤 유의미한 정보를 줄 것이냐’에 집중하는 것 같아요. 과거에는 더 나은 서비스를 만들기 위한 문제 해결/개선 등의 노력보다 각 팀과 개인에게 분배된 역할에 집중해야 하는 환경들이 답답했었거든요.

그런데 아이디어스팀 동료들과 첫 만남에서 그 갈증들이 모두 해소된 느낌이 들었습니다. ’사용자에게 어떤 유의미한 정보를 줄까?’라는 고민을 하기 위해선 결국 사람이 가장 중요하거든요. 더 나은 서비스를 만들기 위해 한 방향을 바라보고 함께 고민하여 힘을 합쳐줄 동료 말이죠. 아이디어스팀 동료들은 그런 사람들 같았어요.

더 나은 아이디어스를 위한 고민들

아이디어스팀에 합류한 이후, 다양한 고민을 거쳐 만들어낸 결과물이 제법 되는 것 같아요.
ⓐ 화수분과 같이 생겨나는 엄청난 양의 신조어를 iMoran이라는 형태소 분석기 개발을 통해서 대응 가능하게 됐고
ⓑ 사용자의 수많은 Request 양에 빠르게 대응 가능한 서치 구조를 갖고 있게 되었어요
ⓒ User feedback ranking을 통해 사용자의 니즈가 반영된 알고리즘도 구축할 수 있게 되었죠.

정리하자면, 이렇게 이야기할 수 있을 것 같아요, 이상적으로 그려왔던 문화와 사람들이 실존하여 함께 결과물들 만들어 갈 수 있는 스타트업. 아이디어스팀은 그런 곳이었어요.

Part 2. Search&Recommend Deep dive

Q. Search&Recommend 셀, 아이디어스팀의 기술력을 고도화하기 위해 어떤 업무를 진행하고 있나요?

Search&Recommend 셀의 업무는 크게 2가지 범위, Backend, Quality로 나누어집니다.

Backend task

주로 색인 대상 문서 입수, API 개발, Search Infra 구축, Latency 개선, *ES Cluster에 대한 다양한 Plugin 개발과 같은 업무들을 진행합니다.
검색 Ranking을 지속적으로 개선하기 위해 빠른 Iteration 환경이 구축되어 있는지가 중요하잖아요? 그래서 셀 초기에는 Client log 입수, Ranking script, 검색 결과 확인 Tool, 검색 결과에 대한 QA를 할 수 있는 End to End Ranking 개선 환경을 구축하기도 하였어요. Quality가 고도화되면 될수록 검색 속도 또한 자연스럽게 비례하여 증가하거든요. 이에 Backend 측면에서는 검색량 상승과는 관계없이 다양한 Keyword-Document Ranking 적용이 가능하도록 만들고 있습니다. 다양한 실험 등을 진행하고 ES Cluster Core Level을 분석 작업 등을 하면서 말이에요.
또, 우리는 서비스 최신성을 구축하고, 누구나 쉽게 또 수시로 A/B 테스트와 개선 활동이 가능한 시스템을 만들어가기도 하고요,
실시간으로 발생되는 이유들을 모니터링하여 시스템 내 장애를 최소화하는 환경을 만들어가고 있습니다.

요약해보면,
벡엔드 파트는 고객들이 아이디어스에서 작품을 찾아보는데 불편함 없는 환경을 만들어 가고 있습니다.

Quality task

검색 Ranking Modeling 및 Ranking feature 개발, 다양한 영역의 추천 모델 개발, 검색 데이터 분석을 위한 *Tokenizer를 개발하고 있습니다. 검색 Ranking feature로 사용자의 Click, Order, Favorite, CTR, *Mutual information 계산을 통해 검색어와 카테고리의 연관성을 feature로 사용 중에 있습니다.
최근에는 사용자가 남긴 작품 리뷰로부터 의미 있는 키워드 분석 검색 필드 적용을 통해 검색 재현율(Recall) 향상과 유저 카테고리 간의 관련성을 Ranking model에 적용하는 작업도 진행 중에 있어요.
또 사용자가 입력하는 검색어를 잘 분석하기 위해서 형태소 분석기를 개발/연구하고 있기도 하고요.
결론적으로, 사용자들의 화면에 적합한 작품이 노출 되도록 하고 있어요. 예를 들면 검색창에 입학식이라는 특정 키워드만 입력해도 입학식과 관련된 작품들이 적절한 랭킹 순위 별로 보이도록요.

예시) 검색 노출 _ 키워드 입력

*ES Cluster (Elasticsearch Cluster) : Apache Lucene Library를 기반으로 한 오픈소스 실시간 분산 검색 엔진의 Cluster(하나 이상의 Node들의 집합체)

*Tokenizer : 컴퓨터에 입력할 단어를 숫자로 변환시켜주는 것

*Mutual information(상호의존 정보) : 두 변수 사이의 상호 의존성을 측정하는 것으로, 다른 무작위 변수를 통해 하나의 무작위 변수에 대해 얻어진 정보량을 정량화하는 것

Q. 아이디어스에서 현재 제공하고 있는 검색/추천 서비스를 소개해 주세요.

현재 Search&Recommend Cell에서 운영 중인 검색 Collection으로는 작품, 온/오프라인 작품, 기획전, 작가가 있으며, 각 Collection들을 색인하여 검색 서비스를 제공하고 있습니다.

기본적으로 각 Collection은 독립적으로 존재하기도, 필요에 따라서 집합화(Aggregation) 할 수 있는 구조가 되기도 해요. 검색 결과 페이지(SRP, Search result page)에서 검색 결과만 제공하지 않고 연관 검색어, 오탈자, 추천 카테고리 등을 보여준다는 이야기죠.
다시 말해, 사용자의 관점에서 원하는 작품을 더 쉽고 편리하게 확인할 수 있는 기능을 구현하기 위해, Collection들을 집합 구조로 만들어 한번 검색할 때 하나의 페이지에서 다양한 정보를 확인할 수 있는 검색 결과를 제공하고 있습니다. 여러 번 검색해야 하는 수고로움을 덜기 위해서요.​

현재 서비스 중인 검색/추천 기능에 대해서도 간략히 소개해 드릴게요.

① 검색 기능

idus 검색 기능
  • 자동 완성 :검색어를 입력할 때, 자동으로 키워드를 추천
  • 핫이슈 검색어 : 실시간으로 많이 검색하고 있는 키워드 랭킹
  • 연관 검색어 : 검색어와 연관된 키워드를 상단에 추천
  • 검색 기능 별 Dynamic Pricing : 검색 필터에서 가격대를 선택하여, 해당 가격대에 있는 작품만 볼 수 있는 기능

② 추천 기능

  • 방금 본 작품의 연관 추천 : 방금 클릭한 작품의 연관 작품을 추천하는 기능
  • 000님이 좋아할 만한 작품 : 클릭했던 작품들을 바탕으로 추천해 주는 커스텀 기능
  • 함께 구매하면 좋을 작품 : 장바구니에 담은 작품들과 연관된 작품을 추천하는 기능
  • 추천 카테고리(Navigation Keyword) : 입력한 검색어와 연관된 카테고리를 추천해 주는 기능

Q. 이와 같은 검색/추천 기능을 제공하기 위해 다양한 프로젝트를 진행하셨을 것 같아요, 완료되었거나 혹은 현재 진행 중인 기술 프로젝트 몇 가지를 소개해 주실 수 있을까요?

Backend Project

‘검색 속도 개선 프로젝트’

사용자 관점에서 빠른 응답속도는 곧 서비스 전반의 신뢰성을 높이는 핵심 요소 중 하나입니다. 이에 Backend 파트에서는 운영 중인 서비스의 아키텍처를 간소화하여 아이디어스의 지속적인 성장을 견인할 수 있는 서비스를 만들어야 한다고 생각했어요. 이에 크게 2가지 ⓐ Search API 제공 데이터 확대 ⓑ Keyword-Document Ranking 효율화 작업을 진행해야 한다고 판단했습니다.​

ⓐ Search API 제공 데이터 확대
검색결과 페이지(SRP)와 작품 상세페이지(PLP) 내 데이터를 Search API에서 통합하여 제공하여 최대한의 정보를 간소화시켜 수급 가능하도록 하였습니다. 이에 메인 서비스 API의 DB 조회(Lookup) 횟수를 줄여 응답 지연속도(Latency)를 감소시켰어요.

이 프로젝트를 위해 진행했던 주요 Action Plan을 몇 가지 소개할게요.​

👉🏻 Action Plans

  • 현재 Search API에서 색인하고 있지만, 제공하지 않는 필드가 무엇인지 리스트업 하여 Search API 응답 포맷에 추가
  • 실시간으로 변경되지 않으면서 SRP/PLP List 노출을 위해 필요한 정보를 색인하여 제공
  • 추천 List에도 검색과 동일하게 필드 제공
  • 특정 필드에 대해서 Grouping이 필요한 경우(Grouping name, count)
  • 현재 SRP/PLP를 제외한 Listing 페이지에 Search API를 제공(이하 Latency 감소 효과 기대)
    └ 특정 필드들에 대해서 Filtering, Sorting, searching (형태소 분석이 아닌 특정 키워드들에 대한 검색)

ⓑ Keyword -Document Ranking 효율화 작업
선물이라는 키워드는 아이디어스에서 가장 많은 문서량을 가지고 있는 키워드 중 하나입니다. 많은 문서량으로 인해 검색 지연 속도(Latency)가 발생 될 수 있는데요. ES로부터 데이터를 로딩 하는 응답속도가 증가하게 되고 장기적으로도 색인 작품이 증가하면 할 수록 이에 비례하여 느려지게 되죠. 이를 해결 하기 위해, 검색 응답 지연 속도의 영향없이 검색 가능하도록 자료의 세부 항목을 저장하는 장소 즉, 신규 필드 구조를 변경하였고, 효율적으로 색인/검색할 수 있는 스키마 리서치를 하기도 했어요. 쉽게 이야기해 문서수가 많은 키워드를 검색하여도 문제 없는 서비스를 위해 Keyword-Document Ranking에 적합한 필드를 적용했습니다. 사실 이 프로젝트는 그저 시작에 불과해요

검색 속도 개선 프로젝트는 앞으로도 지속적으로 다양한 관점에서 문제 해결을 위한 시도들이 진행 될 예정입니다.

*스키마 : 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조

▼Keyword- Document Ranking 프로젝트 과정 자세히 살펴보기!

Quality Project

‘iMoran 프로젝트’

iMoran은 idus + *Komoran의 줄임말로, 검색 대상 데이터와 사용자가 입력한 검색어를 잘 분석할 수 있는 아이디어스 맞춤 형태소 분석기(idus Morphological Analysis)입니다.

최초 형태소 분석기를 개발하게 된 배경은 더 나은 검색 결과를 제공하기 싶었기 때문이에요.
검색창에 레드향을 검색하면 과일 ‘레드향’이 아니라 ‘레드’, ‘향’이 각각 키워드로 인식하여 향이 있는 비누가 검색 되기도 하고, 욕실화를 검색하면 ‘욕실’ ,‘화(花, 꽃 화)’가 인식되어 욕실에 비치하는 화분들이 검색 되더라고요. 또 띄어쓰기를 인식하지 못해 ‘케이크 생일초’와 ‘케이크 생일 초’를 각각 검색하면 서로 다른 결과를 보여주기도 했어요.

*Komoran : java로 구현된 한국어 형태소 파서로 공백이 포함된 형태로 분석이 가능

기존 검색 결과

2020년대의 검색엔진은 커머스의 Q&A 역할도 하다 보니 더 적절하고 적합한 결과를 제공해 주어야 합니다. 단순히 명사만 잘 인식하는 게 아니라 서로 다른 품사들도 이해해 줘야 하는 거죠. 아이디어스는 타 이커머스 대비 독특하고 이색적인 작품명과 작가님 명이 많기 때문에 특히 더 아이디어스러운 형태소 분석기가 필요했습니다.
이에 크게 3가지 ⓐ형태소 분석 지식 ⓑ색인어 추출 정책 ⓒ동의어 색인 작업 기준을 정립하며 사전을 구축하고 형태소를 분석했습니다.

ⓐ 형태소 분석 지식 구축
형태소 분석 지식을 구축하기 위해선 형태소 분석의 기준과 정책이 요구되는데요. 이를 위해 사용자 검색어/작품명/작가명을 비교하고, 검색 오류 유형들을 분석합니다. 분석한 결과를 바탕으로 검색 결과의 기준들을 정해두는 거죠.

👉🏻Example

  • 가장 작은 단위의 유의미 형태소 기준으로 분리하고 해당하는 품사로 태깅└ 키링 → 키/NNG+링/NNG, 향초 → 향/NNG+초/NNG
  • 자주 쓰이는 영어 표현 혹은 외래어는 원어의 띄어쓰기 기준으로 각각 명사로 태깅
    └ 스마트톡 → 스마트/NNG+톡/NNG

ⓑ 색인화 추출 정책
형태소 분석 후에도, 검색에 필요한 유의미한 형태소검색 대상에 따라 다르기 때문에 색인어 추출 작업이 필요합니다.

👉🏻Example

컴팩트 지갑과 컴팩트한 지갑은 같은 의미이지만, 다른 의미와 역할을 하는 형태소가 결과로 노출되어 검색 품질이 좋지 않게 돼요. 그래서 불필요한 품사는 제외하고, 검색 결과에 필요한 색인어만 추출하는 거죠.

동의어 색인
단어가 완전히 동일한 형태는 아니지만, 뜻이 같은 단어(이형 동의어)에 경우, 검색 결과가 다르게 보일 수도 있는데요.

예를 들어 채식 만두와 비건 만두의 경우 뜻은 같은데, 아래와 같이 다른 검색 결과를 보여주고 있었어요. 이 밖에도 생강레몬차의 경우에는 3가지의 이형 동의어를 갖고 있어서 (‘진저레몬티’ / ‘진저레몬차’ / ‘생강레몬티’) 동의어 색인이 필요한 키워드였죠. 동의어 사전 구축을 통해 이형 동의어가 입력되었을 때, 동일한 검색 결과가 나올 수 있게 했습니다.

iMoran 적용 결과

위와 같은 작업을 바탕으로 iMoran을 적용하여 운영하고 있고요. 2022년 3월 15일 기준 약 8만 2천여 개의 단어가 iMoran을 통해 수정되어, 사용자에게 적절한 검색 결과를 제공하고 있습니다. iMoran 모델은 분기 별로 성능 체크를 진행하고 있고요. 현재(21년 4분기 기준) 모델의 정확도는 키워드 별로 빈도 수가 높은 검색어의 경우 100%, 작품 타이틀의 경우 97% 이상의 정확도를 보이고 있고 계속 고도화 진행 중입니다.

현재는 불규칙용언 분석에 따른 학습 패턴 구축 중에 있어요. 작품 명은 ‘귀여운, 아름다운, 고운’ 과같이 다양한 용언으로 작품이 표현되고 있는데요. ‘아름다운, 아름다운지, 아름다워라’ 와 같이 불규칙 용언에 따라 잘못된 검색 결과가 발생할 수 있어서, 불규칙 형태 별로 활용 가능한 단어를 사전에 등록하려고 준비하고 있습니다.

‘리뷰 기반 검색 노출 프로젝트’

아이디어스는 서비스 특성상 사용자의 작품 사용 리뷰에 중요한 정보가 담겨 있는 경우가 많습니다.
예를 들어 이 작품이 남자 친구 혹은 부모님의 선물로 적절한 작품인지 확인하기 위해 리뷰를 보고 판단한 경우들이 있죠. 이는 동일한 작품을 구매한 아이디어스 고객들만이 답을 줄 수 있는 일이라 판단되어 구매 리뷰를 분석하게 되었고, PoC를 통해 유의미한 결과를 도출하였어요. Production 화 도 가능할 것으로 보였고요.

한 가지 소개해 보자면, 이 리뷰작품을 표현하는 중요한 키워드가 포함되어 있고, 이를 활용하면 검색 재현율(Recall)이 향상될 것이라 판단했습니다. 또 분석된 키워드를 통해 사용자의 사용성을 분석하면 취향 또는 성향을 발견할 수 있을 것으로 기대했고요.
정말 쉽게 이야기하자면, 김치라는 작품을 구매한 리뷰에 맵지 않아 좋았어요라는 리뷰가 많다면, 안 매운 김치가 검색되게 하고, 마카롱이 달달해서 좋았다는 리뷰가 많다면 달달한 마카롱을 주로 추천해 줄 수 있겠다는 생각이 발현된 거죠.

사용자들의 취향이 반영된 작품이 검색 결과에 재현될 수 있도록 현재는 작품 리뷰에 주된 키워드를 분석하고, 구현 가능한 모델링을 고민하고 있는데요. 곧 유의미한 결과가 나올 것 같아요.

예시) 작품 리뷰 주요 키워드 분석 _ 폰 케이스

Part 3. ​Search & Recommend Next Level

Q. 목표하고 있는 검색/추천 기술력 수준과, 이를 달성하기 위한 노력을 알려주세요!

2021년에는 검색/ 추천 시스템의 기반을 구축했다면, 2022년에는 고도화가 필요한 시스템 요소들을 하나씩 Deep dive 하는 해라고 생각합니다.​

Problem

ⓐ 인기가 많은 작품뿐 아니라 Ranking 하위에 있는 작품들도 추천해 보자.

검색 Ranking model 특성상 사용자로부터 많이 클릭 된 작품이 더 많이 노출될 수밖에 없거든요. 그렇다고 Ranking 하위에 있는 작품들의 퀄리티가 떨어지는 게 아니에요. 이커머스가 발전되면서 웹사이트 다양한 작품들을 무제한으로 진열할 수 있는 공간이 생겼다고 해도 과언이 아닌데요, 인기도가 높은 Short head 상품뿐 아니라 Long tail에 있는 작품들도 노출될 수 있는 선순환 구조를 만들어 사용자들과 작가 모두가 더 다양한 작품을 구매하고 판매할 수 있는 기회를 만들고 싶어요.

ⓑ 특정 기념일을 검색하기만 해도 적절한 작품이 노출되게 하자

설날, 명절이 되면 한우세트, 굴비세트 등 명확하게 특정 제품을 구매하려고 하는 사용자도 있지만, 적절한 작품이 무엇인지 고민하고 또 살펴보는 사용자들도 존재하는데요, 해당 이벤트에 적절한 작품을 추천할 수 있는 기능을 현재보다 더 고도화하여 더 많은 사용자들이 발견의 즐거움을 누릴 수 있게 하고 싶어요.

Solution

위 두 가지의 고민을 바탕으로 최적의 검색& 추천 결과를 제공하기 위해서 새로운 시도를 하려고 합니다.

ⓐ Bert4Rec (Sequential Recommendation with BERT)

이미 아이디어스는 Word2Vec, Clinet log를 기반으로 서로 간의 유사성을 계산하여 연관 작품 또는 OO 님을 위한 추천과 같은 서비스를 하고 있지만, Bert4Rec이라는 Bert 기반 딥러닝 모델을 통해 현재보다 더 고도화된 작품 추천 시스템을 도입하고 있습니다. log를 통해서 사용자가 다음에 Click할 작품을 예측하는 모델로 Home 영역에서 ‘이 작품을 찾으시나요?’ 추천 Unit 서비스를 준비 중에 있어요.

▼4월에 Bert4Rec 모델이 적용된 추천 유닛이 오픈됐어요! Search&Recommend셀 Youngdon Tae님의 bert4Rec 모델 개발기를 확인해보세요:)

ⓑ DeepFM(Factorization Machines) Model

FM 모델은 사용자가 찜 한 작품을 분석하여 추천해 주는 모델인데요, 충분한 데이터가 없이도 학습이 가능하고 선형 시간 내 계산을 통해 결과가 도출되는 별도의 transformation이 필요하지 않는 모델이에요. 저희는 DeepFM 모델을 통해 CTR을 예측하고 Item Cold Start, 즉 충분한 정보가 수집되지 않아 사용자들에게 적절한 제품을 추천해 주지 못하는 문제를 해결하려고 합니다. 최근에 오픈 된 작품들도 노출될 수 있는 작품 선순환의 구조를 만들어갈 것이라 기대되기도 하네요.

다양한 Deep learning model뿐 아니라 대용량 Search System에 발맞추어 또 다른 기술 스택들도 적용될 예정입니다. 대표적으로 ES&ES Plugin, Lucene, Redis, Kafka 등이 있을 것 같아요.

Q.Search&Recommend 셀 혹은 무권님만의 개발 원칙과 기준이 있다면 소개해 주세요!

Search&Recommend Cell의 개발 원칙은 단순해요.

Search & Recoommend셀의 원칙과 기준
  1. 자유롭게 다양한 시도를 진행하고 명확한 결론을 도출하며 회고를 통해 발전합니다.

가장 중요한 것은 ‘문제 해결을 위한 다양한 시도와 자유로운 환경 구축’ 인 것 같아요. 이를 위해 셀 내 모든 결정은 강제성이 없어야 하고요. 시도로 끝나는 것이 아니라 명확하게 결론을 내려 결과물을 확인한 후 어떤 점을 잘했고 또 보완해야 했는지 회고와 학습을 통해 발전합니다.

좌) 다양한 시도와 실험 / 우) 회고 대상을 Action item으로 정리

2. 특정 인원만이 작업할 수 있는 상황은 배제합니다.

​셀특정 인원에게 업무가 집중되는 상황은 최대한 배제하고 셀 멤버 간의 의존성(Dependency)을 최소화하여 빠르게 기능 개발할 수 있는 환경을 만들고 있습니다.
모든 팀원이 검색 추천과 관련된 업무를 담당할 수 있고, Component 별 담당자가 따로 없어요. 프로젝트 플래닝을 할 때 담당자를 할당하지 않고, 업무를 시작하는 시점에 셀원들의 리소스를 파악하여 담당자를 할당하고 있습니다.

이렇게 업무를 진행하다 보니 새로운 프로젝트를 하게 될 때마다 서로 다양한 토론이 오고 가고, 문제 해결에 있어 다양한 시도와 실패를 경험하는데 주저하지 않게 되더라고요.
또 이런 분위기가 모두를 성장하게 만들고, 누군가의 부재 상황에서도 업무 공백이 발생하지 않는 장점이 있기 때문에 특정 인원만이 작업할 수 있는 상황은 배제하고 있어요.

예시) 리소스를 체크하고 업무 할당을 준비

3. 개발 과정에서 얻은 교훈은 동료들과 공유하고 혁신을 위한 새로운 기술은 끊임없이 스터디하여 개인의 성장과 아이디어스의 성장을 도모합니다.

​문제 해결에는 크게 두 가지 방법이 있죠. ‘끊임없는 시도를 통해 학습된 경험을 활용하는 방법’과 ‘혁신적인 기술적용하는 방법’. 더 나은 서비스를 지속적으로 제공하기 위해서 이 두 가지 방법은 늘 병렬적으로 이루어져야 합니다. Search&Recommend 셀은 새로운 기술에 대한 리서치에도 리소스를 할애하며 문제 해결에 혁신적인 방안을 제시하기 위해 노력합니다. 매 Sprint마다 새로운 기술 리서치를 위해 일부 리소스를 사용하고 있거든요.

이 시간에 논문 자료를 읽고 셀원들과 공유하기도 하고요, 새로운 기술을 리서치하여 셀원들과 공유하고, 또 도입하기 전 함께 토론하기도 합니다. 셀 멤버 모두가 서비스 성장에 기여하고 있다는 것뿐 아니라 개인도 성장하고 있다고 체감할 수 있는 환경을 만들고 싶어요.

좌) 논문 스터디 / 우) 새로운 기술 리서치 공유
예시 ) 새로운 기술 리서치

Q. 주요 아키텍처와 주요 Stack에 대해서도 알려주세요.

2021년 기점으로 아이디어스의 서치 구조는 레거시 시스템에서 신규 시스템으로 전환을 완료했습니다.

Background

  • 사용자의 검색 서비스에 영향 없이, 언제든지 전체 색인과 플러그인을 배포하기 위해 ES Cluster 전체가 재시작 가능한 검색 아키텍처 구축 필요​
  • 검색 대상 데이터의 최신성을 유지하기 위해서 iMoran(idus Tokenizer) 및 지식 배포 시, 전체 색인구조를 통해 동적 색인 프로세스와 검색 품질 향상이 필요한 상황​
  • 빠른 비즈니스 지원과 검색 품질 향상을 위한 Search Components 확보 필요

이러한 배경을 바탕으로 몇 가지 목표를 세운 후 신규 아키텍처를 구축하게 되었습니다.

Goal

  • 사용자 검색 서비스의 영향 없이 Cluster를 재시작 할 수 있게 한다.
  • 상품 관련 정보가 변경되어도 최신 정보를 고객에게 제공한다.
  • 상품 정보 변경은 검색 시스템 상태 영향도 없이 *Async 하게 동작해야 한다.
  • Ranking, Category와 같이 상품 전반적인 변화가 있을 때 사용자의 검색 서비스에 미치는 영향 없이, 전체 문서의 전체 색인이 가능해야 한다.
  • ES Cluster의 Scale in/out이 쉽게 운영될 수 있어야 한다.
  • 사용자 대상 검색 서비스와 데이터 분석을 위한 Batch Job은 분리하여 관리되어야 한다.

NEW Search Architecture

👉🏻 ES Cluster

ⓐ Blue와 Green으로 구성되어 있으며, ELB(Elastic Load Balancing)를 통해 중단 없이 새로운 ES Cluster로 교체할 수 있습니다. 이는 Search API에서 유입되는 Request와 ES Cluster 간의 종속(Dependency)을 제거하기 위해 ES Cluster 앞에 ELB를 두었기 때문에 ES Cluster가 변경되어도 정상적인 서비스가 가능해집니다.

ⓑ 모든 일련의 작업이 *Airflow를 통해 동작할 수 있도록 작업하여 휴먼 에러 발생을 최소화했습니다.

ⓒ AWS CloudFormation을 통해 쉽게 배포 가능하도록 구성했습니다.

👉🏻 Search API

검색어와 종속성(Dependency)을 가지는 모든 데이터를 집합화(Aggregation) 하여 제공하고 ES Cluster 장애가 발생하였을 때 자동으로 회로(Circuit)가 오픈되어 *Redis를 통해 정상적인 서비스가 가능하도록 구성되어 있습니다.

👉🏻 Kafka

아이디어스 작품 색인은 주기적으로 전체 색인을 진행하고, 동적으로 변경되는 데이터는 Kafka Streamming을 통해서 동적 색인이 동작하게 됩니다. 이러한 일련의 작업들은 모두 Airflow를 통해 이루어지고 있습니다.

Part 04. Join idus!

Q. 아이디어스팀을 보면, 가장 먼저 떠오르거나 좋아하는 컬처 핏을?

아이디어스팀을 보면 Action이 제일 먼저 떠오릅니다.
작년 말에 Action을 잘 보여준 프로젝트가 있었는데요. 전사적으로 모두가 한 팀이 되었을 뿐 아니라 빠르게 실행에 옮겨 문제를 해결했던 사례가 아니었나 싶어요.​

‘작품 카테고리 Mapping 프로젝트’

Background

아이디어스에 점점 더 다양한 작품들이 입점되다 보니, 작품을 분류하는 카테고리와 적합하지 않은 작품이 생겨나기 시작했어요. 이 문제를 해결하기 기존 카테고리를 새로운 카테고리로 매핑하는 리뉴얼 프로젝트를 진행하게 되었습니다.
카테고리 분류 작업은 장기간 시간이 필요한 작업이에요. 아이디어스가 갖고 있는 수십만 개의 작품들을 어떤 카테고리로 규정해야 할지 기준을 세우고 분류해야 하고, 또 이렇게 분류된 작품을 등록시켜야 하죠.
‘이러한 리소스를 줄이고 효율적으로 분류할 수 있는 방법이 무엇이 있을까?’ 많은 고민이 이어졌고, Mapping model tool을 구축하자는 아이디어를 제안하게 되었습니다.

idea

“작품과 적합한 카테고리를 분류하는 model을 만들어 적절한 정답을 찾아보면 어떨까?”

Action

아이디어가 나온 그날 저녁에 바로 셀원들과 테스트해 봤어요. 결과를 살펴보니, 1개의 작품에게 추천되는 카테고리 후보 5개 중 적절한 카테고리가 맵핑 되어 분류가 가능할 확률이 80~90%였습니다. 유의미한 결과라고 판단되어 바로 Tool 작업을 시작했어요.
머신러닝을 구축하여 작품 정보에 따라 5개의 추천 카테고리 추출 모델링, 학습 데이터 정제, 모델링 테스트, 입력 Tool 작업 등이 진행되었죠.

예시) 카테고리 분류 tool

Result

기존에는 숙련자가 수동으로 시간당 약 250건 정도의 작품을 분류할 수 있었다면, 새로운 Tool로 인해 약 3배 정도 분류 속도를 가속화 시킬 수 있었어요. 타 이커머스에서도 카테고리 개편 작업은 분류의 모호성 때문에 시간이 많이 걸리는 작업인데 말이죠. 아이디어 하나가 이렇게 빠르게 Action 되어 결과물이 나오는 이커머스는 아마 많지 않을 겁니다.

이후, 작품 분류 작업에 전사적으로 많은 동료분들이 참여하는 One Team 정신을 보여주기도 했었습니다. Mapping tool을 기반으로 ‘카테고리 분류 모의고사’를 진행했거든요.

당시 진행된 카테고리 모의고사

Q. 아이디어스팀 Search&Recommend 셀의 예비 지원자에게 아이디어스팀의 매력을 소개한다면?

아이디어스는 개발자로서 좋은 회사라고 생각하는 요소들을 갖추고 있습니다.

1. 대다수의 개발을 Top down이 아니라 bottom up으로 진행하고 있습니다.

지금까지 진행했던 프로젝트들의 일련의 과정들을 돌아보면 누군가 ;이런 추천 시스템을 개발했으면 좋겠어’ 요청해서 진행하거나 C-suite에서 Mission을 할당했다기 보다 셀 내부적으로 ‘우리 Next Step으로 이런 기능들 개발할 수 있지 않을까?’, ‘OO 모델을 적용시키면 더 큰 비즈니스적 성과를 가져올 것 같은데?’ 등의 자유로운 이야기들을 바탕으로 시작되었어요. 이 이야기들을 바탕으로 플래닝 전 논의를 진행하고 다른 기술들과 비교하여 결과를 예측하고, 테스트를 거쳐 프로덕션하고. 그렇게 서비스를 만들어 가는 과정들 대부분 주도적으로 제안하며 작업했던 것 같습니다.
내가 제안한 기능들을 개발할 수 있어 더 큰 보람과 서비스에 대한 오너십이 생기고, 이 기능에 긍정적인 반응을 해주는 사용자들을 보면 자부심이 생기기도 해요. 이 과정에서 실패했다고 누군가 뭐라고 하는 그런 문화를 가지고 있지도 않습니다. 그저 어떤 것을 학습했고 긍정적인 결과물을 만들기 위해 Next Step으로 무엇을 해야 하는지 함께 고민하니까요.

2. 새로운 기술의 중요성을 알고 있습니다.

기술이라는 건 우리가 가지고 있는 기존의 지식에 머물면 한계가 생겨나는 영역입니다.
저도 20년 넘는 커리어가 있지만, 30년 이상의 경력인 분들 혹은 더 많은 노력을 바탕으로 보유한 기술력 가진 개발자들에게는 여전히 부족한 실력일 수 있고요. 기술의 차이는 시도와 횟수가 중요한 거지 내가 커리어를 이어온 연차가 중요한 건 아니라고 생각합니다.
그런 관점에서 우리는 끊임없이 새로운 기술을 리서치하고 습득하고 레벨 업해야 해요. 그렇지 못한 우물 안 개구리는 좋은 서비스를 만들어 낼 수 없어요. 끊임없이 스터디하고 또 동료들과 공유하고 의미 있는 아이템들이 있다면 뽑아내어 프로덕션 해야죠. 이러한 일련의 작업들이 지속적으로 이어져가야 해요. 아이디어스팀은 이러한 새로운 기술의 중요성을 알고 있고 앞서 말씀드린 것처럼 저희 셀은 끊임없이 스터디하며 개인의 성장을 도모하고 있습니다.

3. 시너지를 만들어낼 수 있는 동료들이 넘쳐납니다.

마지막으로 아이디어스팀에는 어디에서도 경험하지 못할 좋은 동료들이 있다고 생각합니다. 개인적인 의견이긴 하지만, 누구라도 아이디어스팀을 경험한다면 저와 같은 생각을 가질 거라고 느낄 정도죠.
한 사람의 뛰어난 능력으로 서비스가 좋아진다고 생각하지 않습니다. 함께 나아가는 사람들과의 시너지가 더 좋은 결과를 만들어 낸다고 믿어요.
아이디어스팀의 동료들은 앞서 이야기 한 것처럼 함께 나아가고자 하는 방향성이 분명하고, 함께 힘을 합쳐 시너지를 낼 준비가 되어있습니다. 머리를 맞대어 결론을 도출하고, 학습 결과를 공유하고, 궁금한 사항은 언제든 부담 없이 물어볼 수 있는 문화들이 내재되어 있는 것 같습니다.

Q. 마지막으로 아이디어스팀의 검색&추천 기술은 000​이다.

아이디어스의 검색&추천은 ‘연인’ 과 같은 기술을 만드는 곳인 것 같아요.

일반적인 연인 관계를 보면, 상대가 어떤 걸 좋아하는지 알기 위해 노력하거나, 필요한 것을 찾아 한없이 주려고 노력하죠. 저희가 추구하는 기술이 이런 마음과 유사하지 않을까 싶습니다.

👉🏻‘무엇이 필요한지 알려주세요, 지금 바로 찾아 줄게요!’

찾고 있는 작품이 있다면 이에 부합하는 검색 결과를 전달하거나 연관된 작품을 제공하여 고객이 필요로 하는 정보를 즉시 전달해 주고 있습니다.​

👉🏻‘당신의 취향을 파악해서 작품을 추천해 줄게요!’

패션/인테리어 소품/수제 먹거리 등 어떤 카테고리든지 사용자의 마음에 딱 드는 작품을 발견할 수 있는 즐거움을 선사하고 있어요.

맛있는 음식이 생각날 때, 예쁜 옷을 사고 싶을 때, 특별한 이벤트 선물을 하고 싶을 때 등 고객의 취향을 바탕으로 지금 필요로 하는 작품을 알려주는 거죠.​

앞으로도 Search & Recommend 셀은 고객들을 더 알고 싶어 할 거예요. 어떤 걸 좋아하고 매력적이라고 느끼는지 탐구하며 적시에 적합한 작품을 추천해 드릴 예정이에요. 상대방을 끊임없이 궁금해하고 또 무엇이든 해주고 싶어 하는 연인의 마음처럼요.
저희의 기술력이 서비스 만족도를 향상시키고, 더 나아가 고객들의 머릿속에 ‘아이디어스 = 나의 취향을 발견해 주고, 일상을 설레는 순간으로 바꾸어 주는 서비스’로 각인되었으면 좋겠습니다.​

Written by idus Friends Cell

Content writer
Youngmin Lee & Saeyeon Park

아이디어스팀과 함께 할 테크인재를 영입 중입니다.
지금 여기에서 지원해 보세요!

--

--