트위터, new tweet 갱신 알림 프로세스 조사

Posted in 모바일 // Posted at 2010. 7. 21. 15:44
728x90
점심시간에 책을 읽다가 문득 트위터에서 새로운 트윗을 알려 주는 방식을 좀 자세히 들여다 보고
싶어졌다

트위터 사이트를 열어 두면 아래 그림처럼 자동으로 새로 올라온 트윗이 있다고 알려 준다



사실 웹 표준을 준수하는 사이트의 자동 알림과 같은 기능은 대체로 폴링(pollling) 방식일 것이며
비동기로 호출해야 하기 때문에 AJAX 가 사용되리라는 것은 웬만한 웹 개발자면 다 아는 내용이다

따라서 심도있는 조사? 라는 것이 있을 수 없겠지만... 어쨋던 한번 들여다 보고 싶어졌다 ㅎㅎ

일단 Fiddler 와 네트워크패킷분석기라는 2개의 툴로 요청과 응답을 캡쳐 해 봤다

예상대로 AJAX를 통한 비동기 호출이었고 데이타 교환 포맷은 JSON 을 사용하는 듯 하다

아래는 트위터가 자동으로 호출하는 요청 패킷의 헤더 정보의 일부이다
XMLHttpRequest 로 부터 AJAX 통신을 유추할 수 있다. 그리고 JSON 포맷을 수용하고 있다
GET http://twitter.com/home?since_id=19054128561&refresh=true.......... HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: ko
Referer: http://twitter.com/
Accept: application/json, text/javascript, */*
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .....
If-Modified-Since: Wed, 21 Jul 2010 05:46:23 GMT; length=120
Host: twitter.com
Connection: Keep-Alive


그리고 아래는 위 요청에 대한 응답 헤더와 바디 정보의 일부이다
응답 컨텐츠 타입이 자바스크립트이며 JSON 특유의(?) 데이터 포맷인 바디 구성이 눈에 띈다

HTTP/1.0 200 OK
Date: Wed, 21 Jul 2010 05:47:10 GMT
Status: 200 OK
Last-Modified: Wed, 21 Jul 2010 05:47:10 GMT
Content-Type: text/javascript; charset=utf-8
Content-Length: 2566
Expires: Tue, 31 Mar 1981 05:00:00 GMT
Set-Cookie: lang=en; path=/
Set-Cookie: lang=en; path=/
Set-Cookie: dispatch_action=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT
.......
Set-Cookie: _twitter_sess=........ ; domain=.twitter.com; path=/
Connection: close

{
 
  "users": {},
 
  "#pagination":null,
      "#timeline":"<ol id='timeline' class='statuses'>\n            <li class=\"hentry u-guitarbboy status\" id=\"status_19054414770\"\n>\n  <span class=\"thumb vcard author\"><a .........=\"photo fn\" height=\"48\" src=\"http://....=\"48\" /></a></span>  <span .....</ul>\n  </span>\n</li>\n      </ol>\n"
}



비동기 호출 (갱신) 주기
그렇다면, 비동기 호출 주기는 과연 얼마로 설정했을까? 일명 폴링 주기이다

폴링주기는 웹 사이트의 성능과 웹 서버의 부담이라는 측면에서 최대한 긴 것이 좋으며
최대한 실시간 같은 갱신 효과라는 측면에서는 최대한 짧은 것이 좋다

폴링주기 설정은 사이트의 특징과 사용 패턴, 웹서버 가용성 및 규모, 네트워크 환경에 따라
환경에 맞도록 최적화 시키는 것이 중요한데, 트위터에서는 어떻게 했는지 궁금해 졌다

비동기 호출을 일정기간 캡쳐했다. 그리고 각 호출간 시간차를 살펴 보았다
재미있는 것은 폴링 주기가 일정하지 않다는 것이다

즉 호출간 매번 일정한 간격이 아니라 조금씩 다른 간격으로 호출되는 것이다
그러나 패턴은 있었다. 항상 같은 간격은 아니지만 간격의 패턴은 유지되고 있었다

대체로 살펴봤을때,
45초 -> 1분 7초 -> 45 - > 1분 7초....와 같은 패턴이 많이 보였으며,
경우에 따라 2분 32초 -> 3분 48초 -> 5분 -> 3분 48초 -> 2분 32초... 와 같은 패턴도 보였다

음... 트위터에서는 항상 같은 간격으로 호출하지 않는다는 것은 명백하다
그러나 일정한 패턴은 유지하고 있다. 그럼 이유는???

글쎄....
처음엔 어떤 상황에 따라 패턴이 분리되지 않나 싶어 꽤 오랫동안 지켜봤다
예를 들어 사이트가 로딩 된 후 사용의 행동이 오랫동안 감지 되지 않을 경우에 간격을 조정한다?
라는 식으로 말이다

즉 항상 일정한 폴링주기가 아니라 나름대로 상황에 맞게 최적의 주기를 설정한 것이 아닌가 했다.
그리고 그 상황과 패턴을 찾고 싶었다

몇 가지 가설을 세워놓고 꽤 오랫동안 패킷을 지켜봤으나 딱 떨어지지는 않았다
다시말해 폴링 주기가 일정한 패턴으로 변경되는 상황을 알 수 없었다

나의 가설이 틀렸던지 아니면 정말 랜덤일수도 있다
몇가지 주기를 설정해 두고 랜덤하게 꺼내 쓴다... 처럼...

뭐.. 어쨋던 정확한 상황을 알지 못했지만 (웬지 관련성이 있을 것만 같은) 한가지는 목격(?)했다
새로운 트윗이 생긴경우 since_id 파라메타 값이 바뀐다는 것이다
그리고 계속 이 since_id는 변화가 없다가 다시 새로운 트윗이 생기면 바뀌는 식이다

어쨋던 점심시간,, 읽고 싶은 책은 1페이지도 못 읽고 문득 든 생각때문에
몇 시간을 보내 버렸다.......

'모바일' 카테고리의 다른 글

오픈페인트(OpenFeint)  (0) 2010.07.30
아이폰 에뮬레이터?  (0) 2010.07.21
모바일 결제 시스템 조사  (1) 2010.07.21
뷰 포트(Viewport)  (8) 2010.07.14
모바일 웹, 유효성 검사  (0) 2010.07.14

트위터, 단축 URL 프로세스 조사

Posted in 모바일 // Posted at 2010. 7. 2. 15:51
728x90

트위터를 보면 글에 인터넷 주소 링크를 심심찮게 볼 수 있다
그리고 대부분의 링크 주소는 꽤 심플하다

그런데 링크를 클릭해서 넘어가보면 다른 주소, 원래의 긴~ 주소 페이지로 이동한다
그럼 긴 URL 을 짧은 URL로 매핑 시켜주는 무엇인가가 있다는 예기인데...
트위터가 제공하는 걸까? 아니면 실제 컨텐츠 제공자가 지원하는 걸까?

팀장님으로 부터 조사 임무를 부여받고, 살펴 보게 되었다
아래는 조사 후 팀에 공유한 메일 내용이다

그나저나 이 조사 덕에 기존에 관심을 두지 않았던 트위터에 가입하게 되고 재미까지 느끼고 있다
조사하는 시간은 약 1시간 정도였는데, 트윗질은 하루 종일 했다는 ... ㅎ
------------------------------------------------------------------------------------------
아시다시피 트위터는 글 수 제한(140)이 있습니다

외부링크주소(URL) 역시 글 수에 포함되기 때문에 URL 단축 기법이 이용됩니다

URL을 줄일 수 있는 방법이 필요한데, 현재 트위터에서 사용되고 있는 대부분의
단축 URL 기법은 트위터와는 무관한 제 3자에 의해 제공됩니다

 

3자에 의한 URL 단축 서비스 제공

기본적으로 URL을 단축해 주는 시스템은 3자에 의해 제공됩니다

URL을 단축해 주는 사이트가 굉장히 많으며 트위터는 물론 기사원문을 제공하는 곳과도
완전히 별개의 사이트 입니다.
아래는 단축 URL 에 대한 서비스 흐름도 입니다


 

단축 URL 을 제공하는 사이트 목록입니다(꽤 많네요..)

http://bit.ly http://tln.kr http://durl.kr http://tinyurl.com http://yep.it http://foldurl.com http://is.gd http://j.mp http://tr.im http://url.fm

http://qurl.net http://url123.com http://ataja.es http://lin.kz http://lnk.in http://shurl.net http://simurl.com http://tinyclink.com http://urlcut.com http://w3t.org http://2u.lc

 

 

컨텐츠 공급자가 직접 제공하는 Fancy Url

팬시 URL 기법은 이전부터 존재 했던 방식으로 유저가 URL을 기억하기 쉽도록 서비스 사에서 직접 단축 url을 제공하는 방식입니다

예를 들어, 네이버 블로그의 경우 다음과 팬시 url 이 제공됩니다

실제 주소: http://blog.naver.com/NBlogMain.nhn?blogId=mkex&

Fancy Url: http://blog.naver.com/mkex/


이는 블로그 주소는 물론 게시물 주소도 해당됩니다. 서비스를 제공하는 업체에서 직접
제공하는 방식입니다

 

이 개념을 적용해 컨텐츠 공급자 차원에서 트위터를 겨냥해 단축 url 을 제공해 주는 경우도
있습니다.
국내 위키트리라는 뉴스 사이트에서는 기사 원문에 대해 단축 url 을 직접 생성 해 주며 글 내용도 자동 생성해 줍니다

 

아래 그림과 같이 기사 원문에서 트위터 이미지를 클릭하면,

 

다음과 같이 트위터 글 쓰기 폼이 열리며 단축 주소와 글 내용이 자동 생성되어 열립니다

 


 


오픈 API를 이용한 연동 가능

트위터는 기능에 대한 API 를 오픈하고 있어 이를 이용하면 외부 사이트에서 트위터로 글을
등록할 수 있습니다

현재 대표적으로 트위터에 이미지를 등록하는 http://twitpic.com  에서 트위터의 Open API 를 이용해 이미지를 등록해 줍니다. 이 방식을 활용하면 우리의 서비스 글을 트위터로 올리는
편리한 프로세스를 (제한적이지만) 만들 수 있을 것 같습니다

아래는 트위터에 이미지를 등록해 주는 사이트 목록입니다

 

http://twitpic.com http://www.yfrog.com http://www.mobypicture.com http://www.twitgoo.com http://tweetphoto.com

 

이상 기본적인 조사입니다

추가 확인 사항 있으면 회신해 주세요