본문 바로가기

Tech Story

다음 통합웹 검색 MOAS / Search Results Fusion

 이제껏 본 블로그를 통해서 제가 지금 다니고 있는 회사 (다음 커뮤니케이션) 및 경쟁사들의 서비스나 그들의 경영/서비스 전략에 대해서 많은 비판을 올렸습니다. 제 짧은 세치혀로 그런 비판을 하는 것이 옳은가에 대한 가치판단은 아직도 서지 않습니다. 그래서, 나름 회사에 사죄한다는 의미에서 다음검색에서 담당했던 몇몇 부분들에 대해서 소개하는 글들을 몇 차례 적어볼까 합니다. 하나의 서비스/제품이 나오기까지 많은 사람들이 관여하기 때문에, 저만의 공으로 돌릴 수는 없지만 그래도 제가 했던 부분까지에 대한 소개글을 적어볼까 합니다. 그래서, 오늘은 그 첫번째 글로 다음검색의 '통합웹 컬렉션' (내부에서 통합검색에서 '출처'별 영역을 컬렉션 Collection이라 지칭하기 때문에 본 포스팅에서도 그 용어를 그대로 사용하겠습니다.)에 대한 글부터 시작하겠습니다. (아래에 용어들이 혼용되어서 이해하기가 조금 어려울 수도 있다는 점 미리 밝힙니다.)

 여러 포스팅들을 통해서 현재의 (한국의) 검색은 구글이 만들어놓은 패러다임과 네이버가 만들어놓은 패러다임에 종속되어있다고 말했습니다. 당연히 세계적으로 구글의 점유율이 거의 70%이고, 한국에서는 네이버의 점유율이 60%에 이르는 현 시점에서 어쩔 수 없는 것입니다. 그런데, 구글은 검색 그 자체에 대한 패러다임을 만들어놓았다면, 네이버는 한국적 (?) 검색에 대한 패러다임을 만들어놓았습니다. 구글의 검색 이야기는 일반 배제하고, 네이버가 만들어놓은 한국 검색의 병패는 바로 검색결과를 출처별 (컬렉션)로 보여주도록 만들었다는 것입니다. 물론, 정보의 성격에 따라서 출처별로 따로 보여줘야하는 경우가 많이 있지만, 네이버에서 시도했던 것은 검색어/쿼리에 내재된 사용자의 의도라던가 검색된 정보의 성격 등을 모두 무시하고 단순히 카페글, 지식글, 블로그글 등으로 구분했다는 점입니다. 이런 출처별 구분이 사용자들에게 더 좋은 결과를 보여주기 위한 방편으로 설계되었다면 제가 병폐라는 말까지 사용하지 않을 것입니다. 이런 출처별 보기의 시작은 기술력의 부재에서 시작했습니다. 더 엄밀히 말하면, 대용량의 데이터를 효과적으로 처리하지 못하고, 이종의 출처에서 온 정보들에 대한 랭킹기술이 부재했다는 것입니다. 그래서, 해당 출처 내에서만 검색결과를 만들어내고, 그 내에서 랭킹요소를 적용해서 통합검색에서 출처/컬렉션별로 단순하게 나열하는 것으로 검색이 끝나도록 만들었습니다. 그런데, 자신들의 기술력 부재에 대한 자성의 반응보다는 마치 사용자들의 편의를 위해서 이렇게 만들어두었다는 식의 마케팅에 집중했고, 또 그런 노력에 의해서 한국이용자들은 모두 검색하면 당연히 출처별로 보여줘야된다는 인식을 가지게 되었습니다. 그래서, 후발업체들인 다음이나 네이트 등도 당연히 출처별로 검색결과를 보여줘야되는구나라는 생각을 가졌던 것같습니다. 순전히 웹검색에 초점을 맞추던 90년대의 네이버나 엠파스 (그리고 야후, 구글 등)의 검색결과를 기억하신다면 당시에는 출처의 구분이 없었습니다. (그런데, 요즘은 구글도 출처별로 구분하기 시작해서, 전 별로 좋아하지 않습니다. 그래도, 나름 스마트하게 출처구분을 해주고 있어서 다행이라면 다행입니다.) 어쨌던 네이버의 이런 노력 (기술력의 부재의 결과)으로 '한국의 검색 = 출처별 검색'이라는 등식이 성립하였습니다. (출처별 보여주기가 나쁘다거나 장점이 없다라고 말하는 것이 아닙니다. - 단순히 네이트 '수手맨틱'검색 광고에서처럼 출처별보기를 매도하는 것이 아닙니다.) 

 제가 회사에 들어오기 전부터 그리고 회사에 들어온 이후로 계속 주장했던 것이 바로 이런 출처별 경계를 없애자는 것이었습니다 (참고). 그런데, 2년의 시간이 흐른 후에 그 작업을 제가 직접 담당하게 되었습니다. (그런데, 처음 3개월간의 프로토타입을 만드는 것까지만 저 혼자서 담당했고, 그 이후에 팀을 옮기게 되어서 다른 후속작업들은 다른 동료들이 마무리하였습니다. 그런데, 서비스가 오픈한 이후에 제 노력에 대한 보상 (?)은 어느 곳에도 없더군요. 참, 씁쓸하고 욕나오는 현실.) 이 글에서는 제가 처음 3개월동안 시도했던 출처통합에 대한 얘기를 다룰려고 합니다. 제 손을 떠난 이후의 작업에 대해서는 제가 잘 모르는 일이니 생략하겠습니다. 미리 밝혀두지만, 제가 3개월동안 작업했던 내용이나 알고리즘이 현재의 다음통합웹 컬렉션에 어느 정도 반영되었는지는 알 수가 없습니다. 완전히 새롭게 탄생했을 수도 있기 때문에, 아래에 적는 내용을 100% 신뢰하지는 마십시오. 그리고, 이 프로젝트의 아쉬운 점 한가지는 저는 보통 새로운 일을 시작할 때 제일 먼저 프로젝트/코드명을 정하는 것인데, 이 프로젝트에는 제가 정한 이름을 붙여주지 못했습니다. 단순히 위에서 내려온 일반적인 Fusion이라는 이름을 그냥 사용했습니다. 그래서, 지금이라도 이 프로젝트의 이름을 모아스 MOAS로 정했습니다. 한글로 '모았어' 즉, 모아보기라는 의미도 가지지만, 영문으로 Mother of All Searches, 즉, '모든 검색의 어머니'라는 이름을 붙여주려고 합니다. (*참고. MOAS는 미국의 대표적인 강력 폭탄인 MOAB이라는 Mother of All Bombs에서 영감을 얻은 것입니다.)

그림의 하단에 '통합웹'이라는 부분이 MOAS입니다. 기존에는 카페/블로그/게시판/지식/웹문서가 별도의 컬렉션으로 노출되었지만, 현재는 하나의 통합웹컬렉션으로 노출되고 있습니다. (참고로, 실시간검색 컬렉션에 공통적으로 나오는 @falnlov 는 눈에 익죠?)


 모아스를 설명하기 전에, 출처별 검색의 특징을 먼저 자세히 알 필요가 있는데... To make a long story short, '출처별로 다른 랭킹 알고리즘을 사용한다'입니다. 예를들어, 카페글의 경우 카페의 등급이 랭킹에 반영될텐데, 게시판글은 게시판 등급이라는 것이 존재하지 않습니다. 그리고, 뉴스 (모마스에는 미포함)글은 최신순이 정확도보다 더 높은 가중치를 받는 경우도 많습니다. 그리고, 다음검색에서는 초창기의 다음검색의 다음소프트라는 회사에서 만든 검색엔진을 사용한 부분도 있고, 회사 내에서 자체개발한 신규검색엔진을 사용하는 부분도 있습니다. 즉, 검색엔진에 따라서 검색색인방법과 랭킹방법이 다르다는 것입니다. 물론, 현재는 많은/대부분 컬렉션들이 신규엔진으로 교체되었습니다. 즉, 출처별로 검색된 문서에 태깅된 쿼리와의 매칭정도 및 검색스코어가 모두 다르고, 또 각 컬렉션의 특징을 반영해줘야하기 때문에, 단순히 출처별로 검색된 모든 문서들을 검색스코어에 따라서 나열해준다고 해서 컬렉션 퓨전이 이뤄지지 않습니다. 그래서, 이들 랭킹/검색스코어를 조정해주는 것이 컬렉션퓨젼/모아스의 핵심입니다.

 모아스에 반영된 요소들 (자세한 내용은 생략하겠습니다. 나중에 이 글이 기업정보를 빼돌렸다는 이상한 오해의 소지가 될 수가 있으니...)을 간략히 나열하겠습니다. 혹시, 더 자세한 설명이 필요한 부분은 별도로 요청해주시면, 후속글을 통해서건 아니면 별도의 방법을 통해서 알려드리겠습니다.
  • 문서별 랭킹점수: 출처별로 랭킹스코어를 계산하는 방식이 다르다고 했습니다. 그렇지만, 출처별로 해당 문서를 검색결과를 선정할 때 사용했던 점수를 모아스에서 완전히 무시할 수가 없습니다. 그런데, 앞서 말했듯이 출처별로 랭킹스코어의 스케일이 모두 다르기 때문에 스케일을 0~1로 정규화시켜줬습니다. 정규화 방법이나 선형변환, Min/Max, 표준화 등의 여러 방식이 있습니다.
  • 문서 매칭점수: 앞에 말한 문서 랭킹점수는 검색엔진에서 사용하는 모든 랭킹요소 (최신순, 정확도 등)을 고려해서 만든 문서점수라면, 문서매칭점수는 현재 검색화면상에서 보이는 검색스니펫 Snippet/summary이 사용자가 입력한 검색어 Query와의 매칭정도를 말하는 것입니다. 즉, 현재 화면상에서 검색스니펫이 사용자입력 키워드와 더 적합하게 일치하는 경우에, 모아스 결과에서 상단에 위치하게 되는 것입니다. 문서매칭점수에서 고려될 요소 중에 하나가, 문서스니펫이 얼마나 정상적이냐도 중요한 요소입니다. 문서스니펫이 상대적으로 짧다면 문제가 있을 가능성이 높고, 또는 문서가 'ㅋㅋㅋㅋ' 등으로 채워졌다면 이런 결과를 상단에 노출시켜줄 수도 없습니다. 
  • 컬렉션 매칭점수: 개별 문서스니펫에서 매칭점수를 구하듯이, 개별출처 전체에서의 매칭점수를 구했습니다. 이런 컬렉션매칭점수가 필요한 이유는, 더 적합한/매칭된 컬렉션에서 나온 문서를 최종결과에서 상단으로 올려주기 위한 것입니다.
  • 컬렉션 프리퍼런스: 이것은 사용자들이 선호하는 컬렉션의 결과를 상단에 놓기 위한 장치입니다. 특정 검색어 또는 특정 검색패턴에서 사용자들이 '카페'글을 주로 확인을 한다 등의 정보가 있다면 해당 패턴의 검색어에서는 카페글이 더 높은 우선순위를 가지게 되는 것입니다. 보통 컬렉션 프리퍼런스는 정책적인 점수가 반영이 될 수도 있고, 또 사용자들의 피드백이 반영이 될 수가 있습니다. 여담으로, 2008년도 이전의 다음검색에서는 검색최상단이 대부분 '카페'글이었습니다 (지금은 아님). 그런데, 네이버의 경우 '지식iN'이 검색최상단에 위치하는 경우가 많았습니다. 이는 다음에서는 카페를, 네이버에서는 지식을 우선시한다는 정책적인 결정이 있었기 때문입니다. 즉, 이런 정책/정치적인 논리에 의해서 최종 퓨젼결과가 달라질 수가 있다는 것입니다.  (... 컬렉션별로 줄을 세우는 방식에 대해서는 기회가 되면 다시 다루겠습니다.)
  • 중복여부: 같은 키워드에 대해서 중복/중첩된 글이 많이 나온다면 해당 문서의 중요도가 바뀔 수 있습니다. (모아스 랭킹에는 사용되지 않았지는 않았고, 단지 화면에서 중복문서 보여주기 용도로만 사용했음.)
  • 그 외에도, 글의 최신성도 사용될 수가 있고, 출처 내에서의 랭킹/순서도 모아스 랭킹에 이용되었습니다. 즉, 출처별 검색에서 카페라는 출처에서 '문서 A - B - C'의 순서로 문서를 보여주도록 소팅이 되었다면, 모아스에서도 가능하면 같은 순서를 유지하도록 해주는 것입니다. 물론, 매칭점수나 최신성점수 등에 의해서 ABC의 순서는 바뀔 수도 있습니다. 그래도, 이런 역전현상을 줄여주기 위해서 원 출처별 정열순서를 모아스에서 반영을 해준 것입니다.
  • 쿼리의 종류: 사용자들이 입력한 키워드와 서비스제공자들이 추천해주는 키워드 (실시간 급등어 등) 여부에 따라서 사용자들의 검색패턴/검색선호도가 조금씩 차이가 있습니다. 그리고, 실시간급등어의 경우 최신성이 많이 중요하기도 합니다. 그래서, 이런 사용자 입력 키워드 여부에 따라서 퓨젼/모아스 결과가 달라지게 됩니다.
  • 마지막으로 (다른 요소들이 더 사용되었을 것임), 위의 결과들을 하나로 뭉쳐주는 것...이 필요한데... (생략)

 마지막으로 퓨젼/모아스에서 중요한 요소는 도대체 언제 출처를 묶어서 보여줄 것이고, 또 언제 출처별로 따로 보여줄 것이냐에 대한 판단이 필요합니다. 이 부분은 제가 담당하지 않았기 때문에 확증적으로 말씀드릴 수 없지만... 롱테일 키워드 (조합형 검색어 및 검색어가 긴 경우)에 대해서 보통 모아스가 반응하고, 1~2 단어의 짧은 검색어에 대해서는 기존 방식인 출처별로 보여주는 경우가 많습니다. 사실 사용자들이 검색결과에 대해서 기대하는 것이 있기 때문에, 언제 모아스가 나오고 또 언제 출처별검색이 나온다라는 것을 예상할 수가 있어야하는데, 지금은 사용자들이 예측하기가 어렵습니다. 검색기대의 일관성 Consistency of Search Expectaction에 대한 고려가 다음검색에서는 많이 부족합니다. (ㅠㅠ)

 어제 밤에 이 글을 적겠다고 결심했을 때는 더 다양한 이야기를 펼쳐놓으려고 했는데, 막상 글을 적기 시작하니 어떤 내용을 담아야할지에 대한 판단이 흐려져서 그냥 생각나는 부분들만 적었습니다. 가능하면 후속글들을 통해서 빠진 부분들을 보충하겠습니다. 

반응형