블로그 이전했습니다. 새로운 블로그는 http://miruel.tistory.com 입니다.

아이폰은 푸시서버.. 라는게 있어서 졸라 좋다는데 알아보자. 프로그래밍

경고: 기술적인 설명임
Push서버는 Push 라는 말 때문에 클라이언트에서 입만 벌리고 있으면 서버 쪽에서 알아서 입에 넣어주는 것으로 생각하는 경우가 많지만... 실상 순수하게 서버가 순간 순간 어디에 있는지 모르는 클라이언트를 찾아서 밀어주는 서버는 존재하지 않는다. 
이렇게 하려면 모든 네트워크에 멀티케스트를 하거나, P2P처럼 서버 소켓을 열고 자신의 위치를 advertize 해야하는 수 밖에 없는데, 모든 네트워크에 멀티캐스트를 한다는 것은 불가능할 뿐 아니라, 애초 무선망에선 멀티캐스트라는 것이 존재하지 않고, 설사 Multicast를 한다고 하더라도 대역폭의 문제로 불가능하다. P2P처럼 소켓을 열고 자신의 위치를 광고하는 것은 타이밍 문제로 서비스의 신뢰성이 떨어진다. 
어쨌든, "클라이언트가 서버에 접속해야 한다"는 대 전제는 어떻게 해도 바뀌지 않는다. 
그렇다면 Push 서버가 하는 일은 ?? 한마디로 설명하자면 서버를 하나 구축하고, 클라이언트의 접속을 받아, "끊지 않고 유지하는 것"이다.
이렇게 하면, P2P의 경우와 달리 advertize 트래픽이 발생하지 않고, 연결이 유지 되기 때문에 빠르게 데이터의 전송이 가능해진다. 
반대되는 개념인 Polling 과 비교하면 "연결을 유지한다"는 것이 차이점인데, 일정 주기로 재 시도하는 Polling 방식에 비해서 빠르게 새로운 데이터가 있는 것을 인지 할 수 있다. 카카오톡의 예를 들자면 만약 카카오톡이 10초주기로 메시지를 확인한다면, 사용자는 새로운 메시지를 최대 10초 늦게 받을 수 있게 되는 것이다.
Polling에 비해서 유리한 또 다른 이유는 connect/disconnet 작업은 네트워크 및 배터리 소모면에서 비용이 매우 큰 연산이라는 것이다. Push를 이용할 경우 데이터 전송 통로를 하나만 사용하고, 각 어플리케이션으로의 분배를 서버단이 아닌 단말단에서 할 수 있기 때문에 모바일 단말의 경우 여러모로 유리하다. 
그럼, 이렇게 좋은 Push 기술을 왜 널리 사용하지 않는 것일까? 이유는 일반적인 서버 운영체제에서 동시에 오픈하여 유지할 수 있는 소켓의 수는 제한되어 있는 문제로 부터 해서, 여러가지 이유로 서버 제작이 까다롭기 때문이다.
주의할 점은, "Push 서버라고 모든 데이터를 하나의 열결을 통해서 전송하지는 않는다"는 점이다. 일반적으로 연결자체로는 Notification 메시지만 전달하며, 데이터의 전송은 따로 연결을 두어 이용한다. 이유는, Polling도 지원할 수 있고, 데이터 전송으로 인하여 Notificiation이 지연되는 것을 예방할 수 있는 등 많은 장점이 있기 때문이다.
재밌는 점은, Push 서버와 Polling 서버와의 비교해서 서버 오류 후 복구 시 Polling 방식은 트래픽이 몰려 네트워크에 부하를 준다고 일반에 널리 알려져 있는데.... Push 서버도 그 근본인 "클라이언트가 접속해야 한다"가 변하지 않기 때문에 서버 오류 후 복구 시 트래픽이 몰리는 것은 기본적으로 마찬가지다. 하지만, Load balancing을 도입하거나, 아니면 프로그램을 잘 짜면 Push던 Polling이던 이 문제는 해결이 가능하고, 솔루션도 많이 나와 있다.

덧글

  • 식용달팽이 2011/04/20 11:18 #

    아이폰 푸쉬의 최대 단점이라 한다면 어플리케이션 1개당 하나씩의 푸쉬 프로세스를 가동하고 있어서 3개 이상 푸쉬를 돌리기 시작하면 배터리를 어마어마하게 먹는다는 점이지요. 그래서 Boxcar같은 어플리케이션 하나로 여러 개의 푸쉬를 받고 정작 페이스북이나 트위터 어플의 푸쉬를 꺼놓는 사태가 발생하는;;

    푸쉬를 여러 개 켜 놔도 무사할 만큼 아이폰의 배터리가 발전할 지, 푸쉬의 구조가 단순해 지는 것이 먼저일지;; 기대해 볼 만한 일입니다.
  • 미루엘 2011/04/21 02:27 #

    헐, 그랬나요??...
    푸시 프로세스는 하나돌고 단말에서 나누어 주는 것으로 알고 있었는데 잘못 알고 있었네요.
  • powdersnow 2011/04/20 13:22 #

    엇! 이거 어제 자기 전에 "서버가 어떻게 클라이언트에게 그냥 데이터를 넘겨 줄 수 있지?"하며 궁금했던 내용인데 여기서 보게 되었네요. 감사합니다.
  • 미루엘 2011/04/21 02:27 #

    도움이 되셨다니 기쁩니다.
※ 로그인 사용자만 덧글을 남길 수 있습니다.



구글검색창

맞춤검색