본문 바로가기 메뉴 바로가기

kakao 블로그 본문

카카오톡 URL 미리보기와 다음 웹검색 연동에 대한 기술리포트

2016.06.02 09:27

안녕하세요, 카카오입니다.
먼저, 카카오톡 'URL 미리보기'를 위해 수집된 웹페이지 주소 (URL)를 다음 웹검색과 연동한 것 관련 이용자 분들께 심려를 끼쳐드린 점 사과 드립니다.
[바로가기] 카카오톡으로 공유된 웹주소의 다음 웹검색 활용에 대해 말씀드립니다.

카카오톡에서 주고받은 URL이 다음 검색에서 노출되었다는 언론 보도와 관련하여 기술 구현 방식을 설명드리고자 합니다. 저희는 품질 개선을 위한 기술적 구현이라고 생각했으나, 이용자들을 불안하게 한 점 송구하게 생각합니다. 신중하지 못한 결정을 돌아보며 어떤 목적으로 어떻게 진행했는지 저희 서비스 과정을 세밀하게 들여다봤습니다.

URL 미리보기 기능은 이렇게 구현했습니다

카카오톡의 서버는 메시지를 주고받는데 사용하는 메시징 서버와, 친구 목록 등 메시지 외의 기능을 제공하는 API 서버를 독립적으로 분리해서 운영하고 있습니다. 카카오톡의 URL 미리보기 기능은 카톡 앱과 API 서버, 그리고 카카오의 공통 플랫폼인 스크랩 서버간의 연동을 통해 구현되며, 메시징 서버와는 관련이 없습니다.

스크랩 서버는 카카오가 제공하는 서비스에서 URL에 대한 미리보기 정보를 요청할 때 사용하는 공통 플랫폼으로, 웹사이트의 대표 이미지와 제목, 그리고 요약 정보를 추출하는 역할을 합니다. 스크랩 서버에서 추출하는 데이터는 다음과 같습니다.

og:title, og:description, og:image, og:type, og:url, og:audio, og:determiner, og:locale, og:locale:alternate, og:site_name, og:video, twitter:title, twitter:description, twitter:image, twitter:image:src, twitter:url

위 메타정보가 없는 웹문서의 경우 본문 첫번째 텍스트의 일부를 description으로 저장합니다.

이 정보가 필요할 때마다 웹사이트에 접속해서 데이터를 추출하는 방식으로 구현하면 해당 웹서비스에 불필요한 부하를 줄 수 있기 때문에 한 번 추출한 정보는 1시간 정도 캐시에 저장하고 있습니다. 카카오가 제공하는 서비스 중 스크랩 서버를 활용하고 있는 서비스는 다음 팁, 카페, 브런치 등이 있습니다.

카카오톡의 URL 미리보기 기능을 도식화하면 다음과 같습니다.

(1)(2) 이용자 A가 이용자 B에게 대화를 전송하면, (3) A와 B의 카톡 앱은 각각 서버로부터 받은 메시지에서 정규 표현식을 이용해서 URL을 포함하고 있는지 확인합니다. 메시지 안에 URL이 존재한다면 그 URL을 따로 떼어내 앞서 설명한 API 서버에 전송합니다.

API 서버에서 사전에 지정한 패턴으로 1차 필터링을 거치는데, 이 패턴은 대중적으로 사용하는 클라우드 / 노트 같은 개인의 데이터를 저장하는 서비스에서 생성한 URL들로 구성되어 있습니다. 패턴을 포함하는 URL이라면 카카오톡 앱으로 오류 메시지를 반환하고, 이 때 카카오톡 앱은 미리보기 말풍선을 그리지 않습니다.

특정 패턴의 URL은 말풍선을 그리지 않음

그리고 스팸 / 불법 / 악성 URL 데이터베이스로 2차 필터링을 수행, 해당할 경우에는 경고 이미지를 노출합니다. 이용자가 이 링크를 클릭했을 때는 '주의가 필요하다'는 경고 팝업을 띄우고 있습니다.

스팸 / 불법 / 악성 URL을 클릭하면 경고 팝업이 나타남

패턴을 이용한 1차 필터링, 스팸 정보를 이용한 2차 필터링을 통과한 URL이면, (4) API 서버는 스크랩 서버에 ADID와 URL을 parameter로 넘겨서 정보를 요청합니다. 스크랩 서버는 요청받은 URL의 대표 이미지와 제목, 요약 정보가 캐시에 저장되어 있는지 확인하고, 캐시에 있으면 그 데이터를, 그렇지 않으면 (5) 웹페이지에 직접 접속해서 데이터를 추출하고 캐시에 저장한 다음 반환합니다.

스크랩 서버가 제공한 요약 정보는 (6) 카카오톡 API 서버를 거쳐 카카오톡 앱으로 전달되고, 카카오톡 앱은 받은 정보를 바탕으로 말풍선을 그림으로써 URL 미리보기 기능을 완성합니다.

웹검색은 URL을 이렇게 활용했습니다

웹검색은 인터넷에 존재하는 웹문서를 수집하여 검색 결과를 제공하는 서비스입니다. 웹검색의 품질은 얼마나 많은 웹문서 URL을 빠르게 수집하느냐가 중요하며, 다음 웹검색은 웹문서 수집을 위해서 Daum, Daumoa 라는 2개의 크롤러(웹문서 수집 로봇 프로그램)를 사용하고 있습니다. 다음 웹검색 크롤러는 http://www.robotstxt.org에 명시된 로봇 규약을 준수하며, robots.txt 파일을 설정하여 웹문서 수집을 제한하는 사이트는 수집하지 않습니다. 다음 웹검색 크롤러의 User Agent는 아래와 같으며, 로봇 규약을 설정하여 크롤러의 수집을 제한할 수 있습니다.

Mozilla/5.0 (compatible; MSIE or Firefox mutant; not on Windows server;) Daum 4.1
Mozilla/5.0 (compatible; MSIE or Firefox mutant; not on Windows server;) Daumoa 4.1

크롤러가 인터넷을 돌아다니면서 웹문서를 수집하는것은 오랜 시간과 많은 노력이 필요합니다. 하지만 seed URL을 제공받을 수 있다면 이같은 시간을 단축할 수 있고, 더 많은 웹문서를 확보할 수 있어서 검색품질 향상에 도움이 됩니다. 카카오의 공통 플랫폼인 스크랩 서버는 양질의 URL을 많이 확보하고 있을거라는 점에 착안해서 스크랩 서버의 URL을 크롤러의 seed URL로 사용, 검색 품질을 높이기로 결정했습니다. 스크랩서버의 URL을 검색 결과에 반영하는 과정은 다음과 같습니다.

크롤러는 초기 seed URL의 링크를 탐색하며 웹문서를 수집하는 것이 일반적이지만, (1) 이용자가 직접 수집을 요청하거나 운영자들이 어드민 툴에서 등록한 URL의 웹문서를 처리하기도 합니다. 여기에 검색 품질을 향상시키기 위해 공통 플랫폼인 스크랩 서버를 URL 출처로 추가했습니다.

수집한 URL은 (2) 초기 필터링 과정을 거치는데, 이미 색인되어 있거나 / 성인 사이트이거나 / Youtube URL이거나 / 블로그, 다음 카페 URL 등일 경우 수집 대상에서 제외합니다. 그리고 검색 DB에 웹문서가 기준 건수 이하로 등록되어 있는 도메인은 검색 데이터로 가치있는 문서를 충분히 가지고 있지 못하다고 판단해서 역시 수집 대상에서 제외합니다. 두 가지 초기 필터링을 모두 통과한 URL은 (3) 크롤러가 수집할 웹문서 후보를 모아놓는 URL Farm에 저장합니다. 이후 크롤러는 (4) URL Farm에 저장된 URL을 로봇 규약을 준수하면서 수집할 수 있는 웹문서인지 판별하고 다음 웹검색 시스템을 통하여 검색 DB에 저장합니다. 이제 (5) 이용자가 다음에서 검색을 하면 검색 DB에서 적합한 문서들을 찾아 검색 결과를 보여주게 됩니다.

다시 한 번 사과드립니다

카카오톡은 URL 미리보기 기능을 제공하기 위해 스크랩 서버를 활용했고, 다음 웹검색은 검색 결과의 품질을 높이기 위해 스크랩 서버의 URL을 사용했습니다. 카카오톡과 검색을 직접 연동하지 않았고, 개인 정보 없이 URL 만을 이용했으며, 로봇 규약을 준수하면서 검색이 허용된 문서를 수집했기 때문에 문제가 없을 것이라고 판단했습니다. 그러나, 검색을 목적으로 추출한 정보가 아니기 때문에 공개를 의도하지 않은 웹문서의 URL이 포함될 가능성을 깊이 생각하지 못했습니다. 잘못 내린 결정이었고 많이 부족했습니다. 저희의 잘못을 인지한 즉시 스크랩 서버의 검색 연동을 중단하였으며, URL은 모두 검색에서 제외, 삭제했습니다.

앞으로도 이용자들께서 우려하실만한 부분은 없는지, 저희가 놓친 부분은 없는지 두 번 세 번 살피고 신중하게 판단하겠습니다. 안심하고 사용하실 수 있도록 더 노력하겠습니다. 죄송합니다.

저작자 표시 비영리 변경 금지
신고
댓글 갯수15
TOP