트위터가 어떻게 개발되었을 까? 아래는 타임지에 실린 트위터의 기사이다. 타임지에서 트위터가 우리의 삶을 어떻게 바꾸어 놓을 것인가 에 대한 기사를 실었다. 이처럼 현재 트위터같은 실시간 웹은 온-오프라인을 넘나들면서 새로운 문화를 만들어 가고 있다.

사용자 삽입 이미지

개인적으로도 맥장비에는 Twitterrific 을 설치하고 윈도우의 FireFoX에는 Twitter Extension을 설치하여 사용하고 있다. 분명한 것은 트위터가 폭발적으로 성장하고 있고 앞으로도 성장할 것이라는 것이다. 개인적으로는 무선 환경 특히 , SMS 서비스로 길들여진 실시간 정보 교환 문화가 140개의 문자로 소통하는 트위터를 성장시킨 밑거름이 아닐까 싶다. 지금도 인터넷에서는 트위터로 , 현실에서는 핸드폰 문자와 포스트잇으로 의사를 교환하곤 한다. 

사회.문화적 관점을 떠나 개발자 입장에서 트위터가 어떻게 개발이 되었을까 고민을 하며 그 기술을 추적을 해보았다. 특히, 트워터는 실시간에 대용량 데이타에 대한 Push 서비스를 제공해야 하기 때문에 서비스의 구조와 운영 기술은 아주 중요하다. 

먼저 트위터의 아키텍쳐에 대한 전반적인 소개 자료를 보면 트워터는 아래와 같은 기술을 사용하여 개발되었다.

-개발 언어 : Ruby on Rails , 자바 , Scala
-시스템 관리 : Puppet , 오픈소스 서버 관리 툴
-Cache : Memcache , 오픈소스 분산 객체 캐쉬 시스템(트워터의 성능을 위해 중요한 역할을 한다.)
-H/W : X86 기반 리눅스
-DBMS : MySQL
-Web Server : Apache
-서비스 특징 :  일반 웹 서비스처럼 웹 페이지를 중심으로 서비스를 제공하는 것이 아니라 트워터 서버에서 API를 제공하고 이를 통해 웹과 디바이스등 다양한 생태계를 구성하고 있다.

트위터의 경우 웹 프론트는 성능의 이유때문에 Ruby on Rails를 사용하고 백엔드는 자바를 사용한다. 특히, 자바를 사용할 때 Scala 를 함께 사용한다.  Scala는 자바 등의 언어와 함께 사용하여 보다 코드는 간결하게 만들어주는 개발 언어이다. 간략히 테스트 코드는 보면 스칼라 코드에서 직접 자바 라이브러리를 호출하여 사용할 수 있다. 이렇게 자바와  Scala , Memcache 를 사용하여 초기 서버를 구축하여 2008년까지 사용하였다.

이렇게 개발된 시스템의 현재 상황은 다음과 같다.

- 초당 600개의  Request를 처리함
- 초당 평균 200-300 커넥션( 초당 800 커넥션 까지 확장 가능함 )
- MtSQL 은 초당 2,400 Request를 처리함
- 웹 서버는 Mongrel 이고 180개의 레일스 인스턴스를 운용
- 8 코어 하드웨어 박스에 1 MySQL 서버와 1 슬래이브 구성( 슬래이브는 통계 및 레포팅용으로 데이타 마트 구성 )
- 예외 상황에 대비하여 30개 이상의 추가 프로세스를 운영중
- Sun X4100 모델, 8대
- 평균 DB에서 처리 시간 : 50-100 밀리초
- 16GB Memcached

트위트 사이트보다 트위트의 API가 10배 이상 호출이 많다고 한다. 이러한 상황에서 최대한의 성능을 내기 위해 당연히 DB를  denormalization하여 테이블간의 죠인을 줄이고 , 메모리 캐쉬에 모든 데이타를 올려놓아서 성능을 보장한다.

과거 DBMS 수업시간에 DBMS Normalization을 배우고 오라클에 종속적인 지식을 갖고 있는 DA(Data Architecture)가 테이블과  SQL을 설계하고 곳에서는 상상할 수 없는 일이다. 왜 Normalization을 안하냐고 당장 공격이 들어올니까.. 그게 그 분들의 밥줄이기도 하지만... 얼추 계산해 보니 하드웨어와 기타 라이센스 해서 2억 정도면 서비스를  구축하지 않을까 싶다. 나머지 상용제품은 눈을 씼고 찾아볼 수 없다... 쩝.. 외국 회사의 장비와 소프트웨어를 구매해야 데 많은 비용을 써야 하는 입장에서는 가슴이 아프다..

Posted by 박재현
,

국내에서 죠엘온블러그로 많은 개발자들에게 알려진 죠엘 스폴스키가 쇼셜 네트웍에 대해 그의 생각을 발표했습니다. 또한 스택오버플로 라는 개발자용 쇼셜 네트웍 기반의 Q&A서비스를 개발.시작했습니다.

사용자 삽입 이미지

스택오버플로 는 쇼셜네트웍에 기반하여 개발자들의 질문과 이에 대한 답변을 공유할 수 있는 서비스를 제공한다. 이 서비스는 죠엘이 말하는 "쇼셜 서비스 개발시 필요한 9가지 필수 기능들"이 포함되어 있습니다.

사용자 삽입 이미지

  1. Voting: 사용자에게 투표할 수 있게 하자! 스택오버플로에서는 답변들에 투표를 하게 해주고 가장 높은 점수의 답변이 가장 랭킹이 높다는 것을 표시해서 답변들의 질과 관심도를 알려준다.
  2. Tags: 커스터마이징 할 수 있는 태그 서비스를 제공하자.
  3. Editing: 위키피디아처럼 질문과 답변 모두 편집할 수 있는 기능을 제공한다. 이렇게 함으로써 질문과 답변 모두 개선될 수 있다.
  4. Badges: 보상방법으로 뱃지를 제공하자.
  5. Karma: 사용자 Reputation 관리하여 권한 등급을 부여하자!
  6. Pre-search: 질문 입력시 미리 해당 이슈가 등록되어 있는지 사전에 검색하여 만족도를 높인다.
  7. Google is UI:사람들은 구글을 통해 적합한 페이지로 이동하길 원한다. 이런 측면에서 구글은 UI이다. 따라서 각 질문에는 Persistent 한 URL을 부여하자.
  8. Performance: 빠른 성능을 제공해야 한다. 스택오버플로는 MS스택을 사용하여 개발되었다. 2대의 장비로 월 1천 6백만 페이지를 서비스하는 데 1대는 웹서버, 다른 1대는 Microsoft SQL Server 2008를 사용한다. ( 개발자의 성향일 듯, 스폴스키는 오픈소스보다는 MS 플랫폼에 익숙할 것 입니다. 과거 맥용 엑셀을 개발한 경력도 있는 걸 보면요...^-^)
  9. Critical Mass: 원활하게 답변을 생산해 낼 수 있게 끔 사용자 기반을 확보해야 한다.( 죠엘과 그의 블거그가 이미 널리 알려진 사이트이기 때문에 새롭게 개발한 스택오버플로도 기본 사용자 기반은 확보할 수 있었던 것 같습니다. 이렇치 못하다면 기존의 페이스북이나 트워터 등에 매쉬업하는 것이 가장 좋은 방법일 것 같습니다. 국내에서는 얹을 프레임웍도 없는 것 같습니다. 다음이나 네이버에서 이렇게 플랫폼을 좀 열면주면 좋으련만....ㅠㅠㅠ ^-^)
죠엘이 강조한 9가지 기능들이 쇼셜 서비스를 개발하는 데 있어 반드시 필요한 요소들이라고 말할 수는 없을 것 입니다. 그러나 그 간 개발되어 온 쇼셜 서비스들의 공통점을 잘 정리한 것 같습니다. 그러나 곰곰히 생각해 보면 현재 쇼설 서비스의 발전을 고려할 때 하나 중요한 사실이 빠져 있습니다. 바로 실시간이라는 요소가 간과되어 있습니다. 현재 쇼셜 서비스는 인터넷 SMS 처럼 사용되고 있습니다. 실시간에 관련된 정보를 조회하고 의견을 보낼 수 있으며 검색 또한 실시간에 제공이 돼야 합니다. 트위터프렌드피드, 그리고 첫페이지를 실시간 웹으로 변경한 페이스북이 바로 이러한 사실을 입증하고 있습니다. 이러한 실시간 웹 프레임웍이 죠엘의 쇼셜 서비스에는 빠져있습니다. 가령, 스택오버플로에서 현재 사용자들이 업데이트 하고 있는 관련 답변들과 연관된 질문들이 검색이 되고 이들 관련 정보가 트워터같은 플랫폼에 연계되어 실시간에 제공되는 서비스를 생각해 볼 수 있습니다. 아마 조만간 그렇게 발전하지 않을까 싶습니다. 기존 게시판 위주로 운영되던 개발자 커뮤니티와 비교할 때 많은 생각을 하게 해주네요..^-^


Posted by 박재현
,

세상의 모든 것들의 웹으로의 연결이 가속화되고 있다. 특히, 손안의 인터넷이라 말할 수 있는 스마트폰이 확산되면서 웹은 생활의 일부가 되어 가고 있다. 디지탈 카메라나 스마트폰으로 찍은 사진과 동영상이 실시간에 플리커유튜브같은 웹에 업로드되고 , 페이스북이나 트위터에 남긴 글들을 스마트폰을 통해 실시간으로 모니터링을 하고 답변을 달기도 한다. 쇼핑을 할 때는 가격 비교 사이트에서 조회를 하고 다시 가격 비교 사이트에 낚이는 것을 방지하기 위해 내 쇼셜 네트웍에 있는 친구들에게 자문을 구하고 쇼핑을 한다. 이 모든 것이 현재의 모습이다. 과거에 비해 다른 것은 점점 더 웹이 실시간화 되고 있다는 것이다.


실시간 방송
직접 야구장에 가서 경기를 관람하는 게 가장 좋치만 그렇치 못할 경우에는 포탈에서 제공하는 실시간 방송을 보곤한다. 특히, 포탈의 실시간 방송이 재미난 것은 사용자들이 실시간에 올리는 댓글이다. 물론, 때론 눈살을 찌푸리게 하는 경우도 있지만 사용자의 반응을 실시간에 보는 것 만으로도 무척 즐겁다. 간혹 실시간 캠을 통해  독도나 한강변을 보기도 한다.

사용자 삽입 이미지


실시간 정보 - 교통,주식,등등
포탈에서 제공하는 실시간 정보도 유용하다-교통,주식 정보 등등. 아쉬운 점은 실시간으로 변경되는 해당 정보를 일일이 포탈에 방문해야 확인할 수 있다는 점이다. 실시간 웹으로 발전하기 위해서는 해당 정보를 전달받을 수 있도록 RSS,Atom같은 피드를 제공하면 보다 유용할 것이다.

사용자 삽입 이미지



실시간 검색
구글의 검색은 방대한 양의 HTML 데이타를 크롤러가 수집하고 이를 색인한 후 검색한다. 크롤러가 수집하는 HTML은 실제 죽어있는 데이타이다. 보다 생생하고 살아있는 정보는 없을까? 일반적으로 쇼셜 서비스로 알려져 있는 트위터(Twitter)의 서치는 검색양에 있어 구글보다는 못하지만 실시간으로 살아있는 정보를 조회할 수 있다. "Samsung Electronics"란 단어로 만들어지는 실시간 정보를 트워터는 제공해 준다. 구글의 죽어있는 문서간의 연결되는 URL을 기반으로 한 페이지 랭킹 알고리즘과 실시간 사람들의 관심사를 랭킹으로 한 알고리즘은 많은 차이가 있을 것 같다. 나는 문서 검색을 할 때는 구글을 이용하지만 사람들의 관심사와 지식에 기반한 정보를 원할 때는 트위터 서치를 이용한다.

사용자 삽입 이미지


실시간 매쉬업
페이스북, 마이스페이스,구글 독스,구글 리더,트위터,플리커,피카사,유튜브,.. 현재 사용하고 있는 사이트만 나열해 보아도 10가지는 넘는 것 같다. 이 들 사이트에 실시간에 업로드되는 나와 관련된 정보는 얼마나 많을까? 이들 정보를 조회하는 것도 무척 큰 일이다. 이러한 다양한 서비스들의 실시간 정보들을 한 곳에서 실시간에 조회하고 관리하는 서비스를 이용하면 손쉽게 해결할 수 있다. friendfeed를 이런 용도로 사용한다. friendfeed를 이용하여 내가 가입되어 있는 많은 쇼셜 서비스와 정보를 실시간에 확인하고 업로드할 수 있다.

사용자 삽입 이미지


아주 다양한 분야에서 웹이 실시간화되는 것을 볼 수 있었다. 이렇게 웹이 실시간화 되면서 사회,문화적으로도 많은 영향을 줄 것이다. 보다 스마트해진 디바이스들을 통해 텍스트와 이미지, 동영상 등이 업로드될 것이며 이를 항상 휴대하는 스마트폰을 통해 실시간에 조회하고 참여하여 정보를 생산하게 될 것이다.  모바일 디바이스가 실시간 웹을 항상 사용자에게 전달하는 매개체가 되면서 기존의 통신 수단이라는 개념에서 탈피하여 사용자를 실시간 웹을 연결해주고 궁극적으로는 하나의 노드가 되도록 해준다. 사용자는 실시간 정보를 생산해 내는 생산자이자 이 정보를 이용하여 다양한 활동을 수행하는 소비자가 될 것이다. 과거부터 현재까지 우리는 SMS 단문 서비스를 실시간처럼 사용해 오고 있다. 어떤 경우에는 SMS가 실시간 서비스인 것 같다. 아니 우리는 SMS를 실시간 서비스인 채팅처럼 사용하고 있다. 마찬가지로 우리는 웹을 실시간으로 이용하게 될 것이다. 실시간화된 웹이 바로 차세대 웹의 모습중 하나가 아닌가 싶다.



Posted by 박재현
,