기사 공유하기

미국에 온 지 2년. 영어 컨텐츠 소비가 늘었다. 그동안 한국에서 얼마나 제한된 정보와 컨텐츠 만을 접해왔는지 몸소 깨달을 수 있었다. 영문 웹페이지는 한글 웹페이지보다 183배가 많다. (영어를 어느 정도 할 수 있다면) 한글 컨텐츠 만을 고집하는 건 우물 안의 개구리를 자처하는 꼴이다.

미국, 다양하고 알찬 뉴스 필터링 서비스 인기

뉴스 컨텐츠를 보자. 비슷한 내용으로 기사를 뽑아내는 한국 매체와 달리 미국에는 다양한 시각과 관점을 제시하는 개성 있는 매체가 많다. 기사 수 또한 비교할 수 없을 만큼 많다. 그래서 독자 입장에선 잘 가려 읽는 게 중요하다. 좋은 기사 ‘선별’을 도와주는 뉴스 앱이 인기 있는 건 당연하다.

그런 뉴스 앱 서비스로는 어떤 게 있을까? 예를 들어 몇 개만 살펴보자.

  • 섬리(Summly): 기사를 약 200자 정도로 축약해서 제공. 야후!가 인수.
  • 펄스(Pulse): 개인화 뉴스 서비스다. 링크드인에서 인수.
  • 서카(Circa): 하나의 토픽에 관한 다양한 목소리를 한눈에 보여주는 앱.
  • 프리즈매틱(Prismatic): 페이스북과 트위터 글을 분석해 관련 뉴스를 찾아 보여준다. 시리즈 A에서 1,500만 달러 투자를 유치했다.

(시리즈 A란 신생 회사가 벤처캐피탈 등으로부터 첫 6개월에서 2년 동안 회사가 성장하는 데 필요한 초기자금을 투자받는 단계를 말한다. – 편집자)

다양한 뉴스 앱 서비스들
요즘 잘 나가는 영어권 뉴스 앱 서비스들

한국, 똑똑한 뉴스와 가까이 하기엔 너무 먼 상황

그런데 한국 뉴스는 어떤가.

나는 창업한 개발자로서 항상 기술동향과 시장 상황에 관심이 있어 관련 뉴스에 민감하다. 똑똑하게 뉴스 컨텐츠를 소비하고 싶은데 한국의 상황은 이와는 거리가 멀다. 일단 언론사가 만들어내는 기사 수가 적고, 언론사별로 차별성 없이 기사 내용이 대동소이한 경우가 대부분이다.

이제 많은 사람이 포털에서 게시하는 이른바 ‘포털 뉴스’를 생각 없이 소비하는 데 익숙하다.

더불어 연예, 스포츠 섹션 페이지뷰가 정치, 시사, 사회, 국제, 기술 등 모든 다른 섹션 페이지뷰를 훌쩍 뛰어넘는다. 우리는 어느덧 뉴스 기사를 읽고 사유할 거리를 얻기보다는 단순 가십거리를 씹고 뜯고 맛보는 데 익숙해지고, 길들여졌다.

네이버 첫 화면(PC)와 네이버 앱 화면
네이버 첫 화면(PC)와 네이버 앱 화면

자기 관찰: 난 어떻게 한국 뉴스를 접해왔지? 

어떻게 하면 뉴스를 똑똑하게 접할 수 있을까? 먼저 나 자신을 관찰하기로 했다. 내가 그동안 한국 뉴스를 접해온 방식은 이랬다.

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

첫째, 포털의 천편일률적인 뉴스를 하루 한 번 훑는다. 이 행동은 마치 밤 9시가 되면 공중파 9시 뉴스를 틀고 단방향 뉴스를 소비하는 어르신들과 같은 가장 보편적인 패턴이다.

둘째, 페이스북이나 트위터 등 소셜 미디어를 통해 올라오는 뉴스를 접한다. 페이스북에는 내 또래 및 업계 친구가 많고 트위터에는 같은 관심사를 갖은 사람이 많으니 이 친구들이 공유하는 소식은 개인화된 정보들이고, 만족도가 올라간다.

셋째, 나에게 도움이 되는 컨텐츠를 생산하는 사이트에 직접 찾아갔다. 예를 들어 스타트업 관련해서는 비석세스(beSUCESS)에 접속하고, 기술 관련해서는 지디넷(ZDNet)에 들어가는 식이다. 이들 매체는 RSS를 이용해 구독해서 수고를 덜곤 한다.

관찰 결과: 나는 꽤 노력하고 있지만 효율성은 낮구나!

이렇게 살펴보니 나는 좋은 뉴스(정보)를 만나기 위해 꽤 많이 노력하고 있었다.

하지만 앞서 언급한 미국의 다양한 뉴스 서비스를 이용할 때보다는 효율성이 크게 떨어졌다. 지니뉴스, 뉴스썸머 등도 이용해 봤지만, 만족할 수준이 아니었다. 그래서 직접 미국 뉴스 앱의 요약/필터링/큐레이팅 방식을 참조해 적용해 보고 직접 만들어보기로 했다.

애플 앱스토어에 올라온 다양한 뉴스 앱
애플 앱스토어에 올라온 다양한 뉴스 앱

직접 ‘똑똑한 뉴스 필터링 앱’ 제작에 도전하다

접근 방법은 다음과 같다.

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

1. 뉴스 기사와 컨텐츠 긁어오기

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

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

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

다음은 기사 페이지에서 헤더와 푸터, 메뉴 등을 제외하고 순수한 기사 본문 영역만 구별해 내도록 해야 했는데 이는 보일러파이프(Boilerpipe)라는 자바 기반 오픈소스를 포팅해 사용했다. (깃허브: node-boilerpipe)

2. 명사 추출과 인덱싱

이렇게 긁은 기사 본문은 언론사, 발행일시 등 메타데이터와 함께 모두 DB에 저장하고, 이 기사 본문에서 기본 의미 단위인 명사 추출과 인덱싱을 위해 한글 형태소 분석 오픈소스인 메카브-코(MeCab-ko)를 사용했다. 메카브는 일본에서 만들어진 엔진인데 한글과 궁합이 좋았다.

이를 만들어 공개하신 리디북스 이용운 님과 엘지전자 유영호 님께 다시 감사하다고 말씀드리고 싶은데, 한국 가면 개인적으로 한 번 꼭 찾아뵙고 싶은 분이다. 이 또한 포팅해 사용했다. (깃허브: node-mecab-ffi)

3. 기사 요약본 추출하기

기사 본문은 전문과 함께 요약본도 함께 추출했다. 공개된 간단한 텍스트 요약 모듈을 수정해 사용했다. 유니코드를 지원하고 핵심 문장 순으로 추출 등의 기능을 추가했다.

이 모듈은 이미 잘 요약된 글인 뉴스 기사를 몇 문장으로 요약하는 데는 좋은 결과를 보였다. 하지만 중구난방으로 쓰인 글들에서 몇 문장만 추출했을 때는 제대로 동작한다고 볼 수 없었다. 이 프로젝트에서는 주로 뉴스만 추출했기 때문에 따로 연구를 더 하지는 않았다. (깃허브: node-summary)

4. 페이스북 자료를 바탕으로 관심사 추측

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

5. 사용자 액션을 다음 뉴스 추천에 반영

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

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

모바일 앱 만들기

모바일 앱은 안드로이드와 iOS 모두 만들어봤다. 안드로이드는 네이티브에서 안드로이드 쿼리(android-query)를 이용해 만들었고, iOS는 네이티브 기반으로 본문 출력 부분만 UIWebView에서 zepto.js, pure.css, rivets.js를 이용하도록 해서 하이브리드 형태를 띠고 있다.

앱셀러레이터 티타늄(Appcelerator Titanium)은 느리고 아파치 코도바(Apache Cordova)와 trigger.io는 웹 느낌이 강한데 이렇게 직접 하이브리드로 만들면 네이티브 코드는 줄고 익숙한 HTML 5에서 스타일 및 에이젝스(AJAX) 콜을 할 수 있다는 점에서 성능과 생산성의 두 마리 토끼를 모두 잡을 수 있다. 특히 iOS 7 플랫 디자인 이후로 이런 시도를 훌륭히 해내는 앱이 많이 보인다.

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

내 체험과 기록이 더 나은 뉴스 앱 제작에 도움되길

이상으로 내가 똑똑한 한국 뉴스 선별 앱을 만들어 본 계기와 그 구현 과정을 살펴봤다. 개인적으로 매우 만족스럽게 사용 중이지만 본업이 바빠 정작 앱을 가다듬어 앱스토어에 올리진 못했다.

하지만 이런 시도들이 나 하나에서 그치지 않길 바란다. 많은 이들이 참여해 함께 연구하고, 발전해 갈 수 있다면 좀 더 나은 서비스가 나오지 않을까?  나는 그럴 것으로 확신한다. 한국에서 새로운 뉴스 필터링 서비스를 만들고 싶은 나 같은 사람과 팀이 있다면 내 경험과 기록이 조금이나마 도움을 줄 수 있길 바란다.

[divide style=”2″]

이 글은 필자의 블로그에도 실렸습니다. 원문의 표제와 본문은 슬로우뉴스 편집원칙에 따라 수정, 보충했습니다. (편집자)

관련 글

9 댓글

  1. 그런데 모든 뉴스가 다 똑같은 거짓말을 하면 어떻게 하나요? 거짓말 걸러주는 어플도 있으면 참 좋은텐데요. 그래도 포털과의 싸움에서 이길 수 있는 하나의 방법이 될 수 있을 것 같아 좋은 듯 합니다.

  2. 메카브-코 부분 링크가 깨져있네요. 수정 부탁드립니다. 개인적으로는 빙 뉴스가 업데이트를 잘 하는 것 같더라고요.

  3. 세심한 피드백 고맙습니다. ^ ^
    URL 자체는 이상이 없는 것 같은데요.
    해당 프로젝트 자체가 깨진 것 같기도 하고요. (….)
    아무튼 현재로선 데드링크네요.
    필자께 문의드렸습니다.

  4. 지니뉴스 개발을 책임지고 있는 솔트룩스의 최광선입니다.
    좋은 경험과 식견을 공유해 주셔서 고맙습니다.
    저희 지니뉴스도 더 좋은 뉴스 앱이 될 수 있도록 분발하겠습니다.

  5. 실제 뉴스와 필터링된 결과예시를 한번 볼 수 있을까요?
    얼마나 긴 뉴스가 어느 정도로 짧게 필터링 되는지 궁금하네요..
    앱스토어에 올려주신다면 한번 써보고 싶기도 한데 말입니다^^

  6. 스토어에 올리지 않으셨다니 아쉽습니다.ㅠㅠ
    저도 한번 앱사용을 해보고 싶은데 방법이 있을까요?

댓글이 닫혔습니다.