똑똑한 뉴스 서비스 만들기

내가 미국에서 한국 뉴스를 소비하는 방법

Taeho Kim
9 min readDec 18, 2013

미국에 온지 2년 되었다. 영어 컨텐츠 소비가 늘었고 한국에 있을 때 얼마나 제한된 정보와 컨텐츠 만을 접해왔는지 몸소 깨달을 수 있었다. 인터넷 상의 한글 대비 영문 웹페이지 수가 183배 차이가 나는데 한글로 된 컨텐츠 만을 고집한다면 우물 안의 개구리를 고집하는 꼴이라는 것도 알게 되었고.

뉴스 컨텐츠의 경우, 모든 언론사에서 비슷한 내용의 기사만 뽑아내는 한국과는 달리 미국은 각 매체에서 다양한 시각과 관점을 제시하는 경우가 많다. 기사의 수 또한 비교가 되지 않게 많은데 때문에 자신에게 도움이 되는 컨텐츠를 잘 가려 읽는 것이 중요하고 이를 도와주는 서비스들 또한 인기가 높다.

예를 들어, 뉴스 기사를 200자 내외로 축약해 주는 Summly는 Yahoo!에서 사들였고, LinkedIn에서 인수한 Pulse 같은 개인화 뉴스 서비스들도 있다. 여기에 하나의 토픽에 대한 다양한 목소리를 한 눈에 보여주겠다며 나온 circa 앱이 순항하고 있고, Facebook과 Twitter에 올린 글을 분석해 관련 뉴스를 찾아 보여주는 Prismatic는 시리즈A에서 $15M의 투자를 유치하기도 했다.

그런데 한국 뉴스는 어떤가. 나는 창업한 개발자로서 항상 기술동향과 시장상황에 관심을 갖고 있어 관련 뉴스에 민감하다. 똑똑하게 뉴스 컨텐츠를 소비하고 싶은데 한국의 상황은 이와는 거리가 멀다. 일단 언론사가 만들어내는 기사의 수가 적으며 이 또한 언론사 별로 내용이 대동소이한 경우가 대다수다. 네이버 뉴스가 메이저 언론사들과의 기싸움으로 연합뉴스 등으로 뉴스 컨텐츠 제공사를 바꿨었지만 여기에 기사의 질이 낮아졌다고 불만을 제기한 사용자들은 거의 없었던 것을 보면 알 수 있다.

이제 많은 사람들이 포털에서 게시하는 뉴스를 생각없이 소비하는데 익숙하다. 연예, 스포츠 섹션 페이지뷰가 정치, 시사, 사회, 국제, 기술 등 모든 다른 섹션의 페이지뷰를 훌쩍 뛰어넘는다는 점도 우리가 어느덧 뉴스 기사를 읽고 사유할 꺼리를 얻기 보다는 단순 가십거리를 씹고 뜯고 맛보는데 그친다는 것을 보여준다.

그래서 어떻게 하면 한국 뉴스를 똑똑하게 접할 수 있을까를 고민하다가 먼저 내가 어떻게 한국 뉴스를 접하는지 관찰해봤다.

  1. 포털 뉴스 페이지 훑기
  2. 페이스북이나 트위터에 올라오는 뉴스 보기
  3. RSS 피딩

첫째로, 포털의 천편일률적인 뉴스들을 하루 한번 훑었다. 이 행동은 마치 밤 9시가 되면 공중파 9시 뉴스를 틀고 단방향적인 뉴스를 소비하는 어르신들과 같은 가장 보편화된 패턴이다. 둘째로, 페이스북이나 트위터 등 SNS을 통해 올라오는 뉴스를 접한다. 페이스북에는 내 또래 및 업계 친구가 많고 트위터에는 같은 관심사를 갖은 사람이 많으니 이 친구들이 공유하는 소식은 개인화 되어 나를 찾아온 뉴스들이고 만족도가 올라간다. 셋째는, 나에게 도움이 되는 컨텐츠를 생산하는 사이트에 직접 찾아갔다. 예를 들어 스타트업 관련해서는 beSUCESS에 접속하고 기술 관련해서는 ZDNet에 들어간다. 이를 RSS 피딩을 이용해 수고를 덜곤 한다.

이렇게 살펴보니 내가 좋은 뉴스와 컨텐츠를 만나기 위해 꽤 많은 노력을 하고 있다는 것을 알았다. 하지만 위 언급한 미국의 다양한 뉴스 서비스를 이용해 영문 뉴스 컨텐츠를 접할 때의 효율에는 크게 미치지 못한다는 것 또한 깨달았다. 지니뉴스, 뉴스썸머 등도 이용해 보았지만 내가 보고 싶은 질 좋은 컨텐츠 디스커버링 측면에서는 만족할 수준이 아니었다. 그래서 직접 위 미국 서비스들의 접근을 적용해 보기로 했다.

접근 방법은 다음과 같다.

  1. 실시간으로 국내 언론사, 유명 블로그 등 모든 뉴스 기사 및 컨텐츠 모두 긁어 DB에 저장
  2. 긁어 온 기사에서 명사(noun)를 추출 인덱싱
  3. 사용자가 앱에서 페이스북 계정으로 로그인하면 페이스북에 올린 글을 분석해 해당 사용자의 관심사 파악
  4. 분석된 사용자의 관심사를 기반으로 기사에서 추출된 명사, 발행일시 등을 고려하여 관련 뉴스 추천
  5. 뉴스는 처음부터 기사 전문이 아닌 3문장으로 요약된 버전으로 보여주며 왜 이 기사가 추천되었는지 관련 키워드를 함께 출력
  6. 추천된 뉴스 중에서 사용자가 실제로 읽은 뉴스, 저장한 뉴스, 공유한 뉴스, 삭제한 뉴스를 기록하고 다음 뉴스 추천시 이를 반영

이를 구현하기 위해 다양한 오픈소스를 사용하였으며 나 또한 대부분의 소스코드를 공개했다. 먼저 국내 언론사, 유명 블로그 목록은 HanRSS에서 가져왔다. 특히 인기 RSS 페이지가 있어 여기에 신규 포함된 블로그는 바로 크롤링 리스트에 추가하도록 했다. (https://github.com/xissy/node-hanrss)

RSS 피딩만으로는 기사 전문을 얻을 수 없기 때문에 이렇게 만들어진 사이트 리스트에서 직접 기사를 긁어와서 해야 하는데, 여기에 사이트별 정책을 JSON파일로 만든면 자동으로 해당 부분을 스크랩핑하는 모듈을 사용했다. (https://github.com/xissy/node-crawl-baby)

이를 구현하는데 언론사의 경우는 큰 문제가 없었지만 네이버, 티스토리 등은 페이지에서 리다이렉팅 구문이 있는 등 따로 처리를 요하는 부분이 있어 이것도 구현해야 했다. (https://github.com/xissy/node-blog-request)

다음은 기사 페이지에서 헤더와 푸터, 메뉴 등을 제외하고 순수한 기사 본문 영역만 구별해 내도록 해야 했는데 이는 Boilerpipe라는 JAVA 기반 오픈소스를 포팅해 사용했다. (https://github.com/xissy/node-boilerpipe)

이렇게 긁은 기사 본문은 언론사, 발행일시 등 메타데이터와 함께 모두 DB에 저장하고, 이 기사 본문에서 기본 의미 단위인 명사 추출과 인덱싱을 위해 한글 형태소 분석 오픈소스인 mecab-ko를 사용했다. mecab은 일본에서 만들어진 엔진인데 한글과 궁합이 좋았다. 이를 만들어 공개하신 리디북스 이용운님과 LG전자 유영호님께 다시 감사하다고 말씀드리고 싶은데, 한국가면 개인적으로 한 번 꼭 찾아뵙고 싶은 분이다. 이 또한 포팅해 사용했다. (https://github.com/xissy/node-mecab-ffi)

기사 본문은 전문과 함께 요약본도 함께 추출하는데 이는 공개되어 있던 간단한 텍스트 요약 모듈을 수정해 사용했다. 유니코드를 지원하고 핵심 문장 순으로 추출 등의 기능을 추가했다. 이 모듈은 이미 잘 요약된 글인 뉴스 기사를 몇 문장으로 요약하는데는 좋은 결과를 보였지만 중구난방으로 쓰여진 글들에서 몇 문장만 추출했을 때는 제대로 동작한다고 볼 수 없었다. 이 프로젝트에서는 주로 뉴스만 추출했기 때문에 따로 연구를 더 하지는 않았다. (https://github.com/xissy/node-summary)

사용자가 페이스북 계정으로 로그인시 사용자가 올린 글과 좋아요 항목들을 가져와 명사 추출을 하고 DB에 저장한다. 각 단어는 얼마나 많이 언급되었고 함께 언급된 다른 단어들과의 연관 그래프를 함께 추출해 사용자의 관심사를 추측하게 되는데, 이는 뉴스 추천을 위한 가장 기본적인 데이터가 된다. 사용자 관심사와 기사 요약의 유사도에 기사의 발행일시를 인자로 더해진다.

각 뉴스 기사는 뉴스 제목, 본문 요약, 언론사, 발행일시, 관련 키워드가 함께 출력되며 사용자는 각 기사에 대하여 기사 전문 보기, 좋아요, 삭제 등의 액션을 취할 수 있다. 기사 목록도 추천, 읽은 기사, 좋아요 한 기사, 삭제한 기사 등으로 요청할 수 있으며, 이 모든 액션은 node.js + express를 이용해 RESTful API로 만들어서 웹이나 모바일앱에서 쉽게 클라이언트를 만들 수 있도록 했다.

사용자들이 기사를 읽고, 좋아하고, 삭제한 액션을 모두 기록하여 다음 기사 추천 때 반영하는데 이는 Collaborative Filtering을 사용했다. 같은 기사를 좋아요 한 사람은 서로 관심사가 공유되는 방식이다. 이는 기존에 서비스 중인 Recom.io API를 사용해 구현했는데 아직 이용자가 나를 비롯한 주위 사람들 뿐이라 CF의 특성상 더 많은 사람들이 사용해야 추천 결과의 질을 논할 수 있을듯 하다. (http://recom.io)

모바일앱은 Android와 iOS모두 만들어봤다. 안드로이드는 네이티브에서 android-query를 이용해 만들었고, iOS는 네이티브 기반으로 본문 출력 부분만 UIWebView에서 zepto.js, pure.css, rivets.js를 이용하도록 해서 하이브리드 형태를 띄고 있다. Appcelerator Titanium은 느리고 Apache Cordovatrigger.io는 웹 느낌이 강한데 이렇게 직접 하이브리드로 만들면 네이티브 코드는 줄고 익숙한 HTML5에서 스타일 및 AJAX 콜을 할 수 있다는 점에서 성능과 생산성의 두 마리 토끼를 모두 잡을 수 있다. 특히 iOS7 플랫 디자인 이후로 이런 시도를 훌륭히 해내는 앱이 많이 보인다. (https://github.com/xissy/ios-news4me, https://github.com/xissy/news4me-android)

아이폰앱 실행 화면. 나의 관심사가 제대로 반영되어 있음을 확인할 수 있다.
API 호출 화면. 모든 기능은 API로 구현되어 있으며 모바일앱은 껍데기에 불과하다.
DB에 저장된 뉴스 기사들.

이상으로 내가 똑똑한 한국 뉴스 서비스를 만들어 본 계기와 그 구현을 살펴보았다. 개인적으로 매우 만족하며 사용 중이지만 본업이 바빠 서비스를 가다듬어 앱스토어에 올리지는 못하고 있다. 하지만 이런 시도들이 나 뿐만 아니라 서로 연구되고 발전되어 간다면 분명 더 나은 서비스가 나오게 될 거라 확신한다. 한국에서 새로운 뉴스 서비스를 만들고 싶은 팀이 있다면 내 이런 경험이 도움이 되었으면 한다.

돈이나 지분 주면 컨설팅 해줄 용의도 있고. ☺

--

--

Taeho Kim

A programmer who can code, caffeine to codes machine, former entrepreneur in custody.