“Adnroid Push와 카카오톡 사건”에 대한 반론

Posted by

http://www.mobizen.pe.kr/1074 에서 모비젠님께서 안드로이드 푸시와 카카오톡 사건에 대해서 시의적절한 좋은 글을 포스팅하여 주셨습니다.

시기적으로 굉장히 중요한 의견이라고 생각되는데, 몇가지 사실과 다르다고 생각되는 부분들을 말씀드리고 싶습니다.

1. APNS와 C2DM은 기본적으로 거의 비슷한, 다르지 않은 푸시 플랫폼입니다.

2. “C2DM이 구글 계정이 설정되어야만 사용할 수 있다”는 의견도 오해의 소지가 있다고 보여집니다. iOS도 itunes계정이 활성화 되어 있어야 여러서비스를 이용할 수 있듯이, 안드로이드도 마켓 로긴 아이디가 있어야만 여러 기능이 활성화 됩니다. 그런데, 안드로이드폰 이용자 중 마켓을 사용하지 않고 폰을 사용하는 유저는 사실상 없다고 봐도 되므로 구글 아이디가 있어야만 C2DM을 사용할 수 있고 그것이 C2DM의 단점이 된다고 보기는 어렵다고 생각됩니다.

사실상 C2DM은 기존에 구글의 gmail과 구글토크서비스에서의 메시지 푸싱에 사용되던 프로토콜 프레임웍을 다른 3rd party 어플리케이션에서도 사용할 수 있도록 “개방”한 셈이기 때문입니다.

3. 카카오톡이 발생하는 트래픽이 통신사에 “엄청난” 부하를 주는가?

결론적으로 전혀 사실과 다르다고 말씀드리고 싶습니다.

우선, 카카오톡이 세션유지를 위해 주기적으로 keep alive신호를 보내듯이 APNS나 C2DM 역시 비슷한 keep alive 알고리즘이 있습니다. 때문에 카카오톡만이 푸시 noti를 위해 특별히 더 많은 트래픽을 유발하는 것은 아닐 겁니다(단지 사용자가 많을 뿐). MS의 EAS나 구글토크 등은 실제로 카카오톡보다 더 많은 대기 상태의 트래픽을 유발합니다.

 APNS, C2DM, EAS, 블랙베리 푸시 모두 정도의 차이가 있을 뿐 세션유지를 위해 주기적인 keep alive, pin hole 유지 등의 트래픽을 발생시키는 것은 같습니다.

>폴링 방식의 근본적인 문제는 응답 서버가 장애를 일으킬 경우이다. 실제 카카오톡의 경우 작년 11월부터 10여차례 서버가 중지되었다. 서버가 중지될 경우에는 Keep Alive가 서버 반응을 받을 때까지 계속해서 동작하게 된다. 의도치 않게 DDOS 공격을 하는 것이다. 간혹 이동통신사 트래픽의 25%를 카카오톡이 차지한다는 이야기가 나오는데 이는 과장이 아니며 카카오톡 서버가 중지될 경우에 이러한 상황이 될 수 있다.
참고 포스팅 : 왜 메시징 앱들이 통신사에 과다한 트래픽을 주는가?

위의 내용과 링크된 내용 또한 저로서는 좀 의아한 의견인데요, 사용중인 대부분의 푸시 또는 세션유지 프로토콜은 서버와의 주기적인 keep alive 통신이 실패하였을 경우 원래 예정된 시간보다 더 짧은 주기로 keep alive를 발생시킵니다. 가령 보통은 30분에 한번씩 keep alive를 주고받다가 네트웍 단절 또는 서버 다운으로 keep alive 응답이 없게 될 경우, 단말은 실패 후엔 1분에 한번씩 다시 keep alive를 반복적으로 (응답이 올때까지)요청하게 되고 이때문에 트래픽이 평소보다 많이 발생할 수 있습니다. 그런데, 이런 상황 역시 여러 운영 경험으로 문제가 되었던 상황이기에 대부분의 푸시 플랫폼은 이러한 경우에 대비한 추가적인 타이머 알고리즘을 갖고 있습니다. 예를들어 첫번째 keep alive가 실패하면, 1분 후에 다시 시도하고, 그 후엔 10분후에 요청하고, 또 그 후엔 30분 후에 요청하기를 3번 반복하다 그래도 응답이 없으면 시도를 중단하는 그런 식입니다. 대표적 표준 VoIP프로토콜인 SIP에는 이런 룰이 T1, T2 타이머라는 형태로 구현되어 있고, EAS, APNS등도 저마다의 노우하우를 반영하여 이런 룰이 적용되어 있습니다.

카카오톡의 경우, 이러한 알고리즘이 적절하게 반영되지 않았었을 수도 있습니다.  이렇게 되어 카카오톡의 푸시서버가 다운되었을 경우 마치 DDOS공격과도 같은 자기가 배포한 클라이언트에 의한 Push keep alive storm 상황에 직면하게 될 수도 있습니다.

 이런 상황이 생긴다면 가장 큰 피해자는 카카오톡 서비스와 그를 이용하는 이용자이지 서비스carrier가 아닙니다. 즉, 카카오톡 서버가 다운되어 카카오톡 서비스 단말들이 과도한 registration storm packets을 발생시킬 수 있는데, 그로 인한 carrier의 피해는 가늠하기가 거의 여러울 정도로 적고, 실질적인 피해는 카카오톡의 서버와 그 서버가 위치한 IDC의 네트웍입니다. 

4. 카카오톡이 발생시키는 트래픽?

이통사 내부자료로 인용된 카카오톡이 단순히 푸시서비스를 위해 발생시키는 발생 트래픽이 한달 17,280건이나 된다고 언급하고 있습니다.  이게 많은걸까요? 카카오톡을 한달 내내 사용할 때의 대기 데이터량은 한달에 1181KBytes이고 약 1.2MBytes 입니다. 

한달에 17280건의 keep alive negotiation과 한번에 280byte씩 한달 1.2MByte의 데이터량..  이게 엄청난 데이터일까요?

대부분의 스마트폰 이용자는 월4만원 이상의 요금을 내고 있고, 무제한 데이터 요금제 이용자의 경우 실제론 하루 70MBytes정도로 이용이 제한된다고 하죠.. 이통사가 정한 하루 최대 이용량의 0.058%의 데이터 트래픽을 사용하는 카카오톡의 기본 대기 유지 네트웍 사용량이 carrier에게 과도한 망 부하를 일으킨다는 주장은 과장을 넘어 억지 주장이라고 생각됩니다.

언급된 카카오톡이 한달 동안 발생시키는 트래픽량은 스마트폰 이용자가 스마트폰으로 웹서핑 한시간만 해도 그만큼의 데이터 이상 사용하게 됩니다.

5. 발전적인 방향으로의 고민

서비스 사업자 또는 carrier의 입장이 아닌 스마트폰 사용 유저의 입장에서 지금의 스마트폰 사용환경은 결코 바람직한 환경이 아닙니다.

결론적으로 메일,메시징,SNS등 여러가지 목적으로 스마트폰에서 동시에 구동되는 PSN(Push Network Service)는 해당 플랫폼에 가장 완성도 높은 PNS서비스가 하나만 구동되고 다른 서비스들이 한개의 PSN를 같이 사용하도록 해야만 합니다. 그래야만 스마트폰의 배터리 drain을 최소화 하고 불필요한 데이터 통신을 줄이고 안정적인 통신 환경을 구현할 수 있습니다.

현실적으로 이미 OS에서 제공하고 있는 APNS와 C2DM은 disable할 수가 없는 서비스 이므로 다른 3rg party서비스들은 각자의 독자적인 PNS를 버리고 보다 적극적으로 APNS와 C2DM을 활용하는 것을 고려할 필요가 있습니다.

그런데, 이런 발전적인 방향의 PNS서비스에 대한 논의에서 통신망 제공 사업자는 특별히 같이 논의해야 할 것이 없습니다. 통신망 제공 사업자가 “자사의 안정적인 SMS PNS서비스를 IP에서 3rd party 서비스 사업자에게 개방”하는 파격적인 제안을 하기 전에는 말이지요..

6 comments

  1. 아직 IP layer에서 제공되는 PUSH서비스는 그 아래 layer에서 서비스되는 SMS보다 전반적으로 신뢰성이 떨어지는 것이 현실입니다. SMS만 해도 20여년간 충분히 안정화 된 서비스이기도 하거니와, 현재의 망 구조에서는 IP위의 모든 서비스는 그 완성도가 이통사가 관리하는 그 아래layer의 서비스보다 좋을 수가 없습니다.

    하지만!! 대세는 IP입니다. 이 추세는 절대 바뀌지 않을 추세이므로 결국은 모든 커뮤니케이션 서비스(전화,메시징,방송등)는 All-IP 서비스 기반으로 모두 통합될 것이고, 빠르게 안정화될 것으로 예상합니다.

    그러면서, 이시대를 선도해 나아가는 주인(?)도 아마도 바뀌겠지요….

    좋아요

  2. 위에 언급하신 2번 의견. 구글 아이디가 있어야만 C2DM을 사용할 수 있고 그것이 C2DM의 단점이 된다고 보기는 어렵다는 주장에 대해 다른 의견이 있습니다. C2DM 사용자는 적어도 1개 이상의 구글 계정에 “로그인 되어 있어야”(For C2DM to work, the mobile device must include at least one logged in Google account.) 합니다. 이 점이 서비스를 구성하는데 단점이 아니라고 하는 주장은 납득하기 어렵습니다.

    좋아요

    1. C2DM의 사용이나 구글씽크 사용시 구글계정 설정 여부는 안드로이드마켓 사용여부의 문제이기도 합니다. 즉, C2DM이 반드시 구글계정이 필요로 한다는 단점때문에 사용을 안한다면, 안드로이드폰을 사용하면서 안드로이드마켓도 사용안하는 유저가 되는 것을 의미하게 되죠.

      그러므로 C2DM이 구글계정을 요구하지 않게 바뀌더라도 그것이 안드로이드폰을 구글계정 없이 정상적으로 쓸 수 있다는 상황이 되는 것이 아니기 때문에(마켓 접속등을 위해), 결과적으로 C2DM이 구글계정을 필요로 한다는 것이 C2DM만의 단점이 아니라는 의견을 드렸습니다.(iOS역시 앱스토어도 애플 계정이 있어야 하듯이요) C2DM 안쓴다고 구글계정이 필요 없는게 아니라는 거죠.

      3rd party 개발자 입장에서 자기의 프로그램이 다른회사의 계정정보와 연동된 기능을 사용한다는게 상당히 꺼림직할 수 있습니다. 그런데 어짜피 안드로이드,iOS 공통으로 앱의 배포를 위해서는 해당 플랫폼제공자의 아이디를 가진 유저에게만 할 수 있기 때문에 현재로서는 iOS던 Android던 애플이나 구글계정은 C2DM이나 APNS와 상관없이 사실상 mandatory입니다.

      계정정보를 통한 인증(로그인)과 push 네트웍의 유지는 별개의 문제입니다.

      배터리 절약을 위해 구글씽크, EAS, 카카오톡, 마이피플 등을 선택적으로 disable하는 것은 이 논의와는 별개로서의 사용자의 선택입니다만, 예를들어, 현재 C2DM을 쓰는 네이버톡은 카카오톡과 달리 구글씽크를 같이 켜 놓고 사용해도 배터리 소모량이 거의 증가하지 않는다는 장점이 있기에 오히려 반대로 생각해 봐야 하지 않을까요?

      좋아요

    2. C2DM의 사용이나 구글씽크 사용시 구글계정 설정 여부는 안드로이드마켓 사용여부의 문제이기도 합니다. 즉, C2DM이 반드시 구글계정이 필요로 한다는 단점때문에 사용을 안한다면, 안드로이드폰을 사용하면서 안드로이드마켓도 사용안하는 유저가 되는 것을 의미하게 되죠.

      그러므로 C2DM이 구글계정을 요구하지 않게 바뀌더라도 그것이 안드로이드폰을 구글계정 없이 정상적으로 쓸 수 있다는 상황이 되는 것이 아니기 때문에(마켓 접속등을 위해), 결과적으로 C2DM이 구글계정을 필요로 한다는 것이 C2DM만의 단점이 아니라는 의견을 드렸습니다.(iOS역시 앱스토어도 애플 계정이 있어야 하듯이요) C2DM 안쓴다고 구글계정이 필요 없는게 아니라는 거죠.

      3rd party 개발자 입장에서 자기의 프로그램이 다른회사의 계정정보와 연동된 기능을 사용한다는게 상당히 꺼림직할 수 있습니다. 그런데 어짜피 안드로이드,iOS 공통으로 앱의 배포를 위해서는 해당 플랫폼제공자의 아이디를 가진 유저에게만 할 수 있기 때문에 현재로서는 iOS던 Android던 애플이나 구글계정은 C2DM이나 APNS와 상관없이 사실상 mandatory입니다.

      계정정보를 통한 인증(로그인)과 push 네트웍의 유지는 별개의 문제입니다.

      배터리 절약을 위해 구글씽크, EAS, 카카오톡, 마이피플 등을 선택적으로 disable하는 것은 이 논의와는 별개로서의 사용자의 선택입니다만, 예를들어, 현재 C2DM을 쓰는 네이버톡은 카카오톡과 달리 구글씽크를 같이 켜 놓고 사용해도 배터리 소모량이 거의 증가하지 않는다는 장점이 있기에 오히려 반대로 생각해 봐야 하지 않을까요?

      좋아요

  3. C2DM의 사용이나 구글씽크 사용시 구글계정 설정 여부는 안드로이드마켓 사용여부의 문제이기도 합니다. 즉, C2DM이 반드시 구글계정이 필요로 한다는 단점때문에 사용을 안한다면, 안드로이드폰을 사용하면서 안드로이드마켓도 사용안하는 유저가 되는 것을 의미하게 되죠.

    그러므로 C2DM이 구글계정을 요구하지 않게 바뀌더라도 그것이 안드로이드폰을 구글계정 없이 정상적으로 쓸 수 있다는 상황이 되는 것이 아니기 때문에(마켓 접속등을 위해), 결과적으로 C2DM이 구글계정을 필요로 한다는 것이 C2DM만의 단점이 아니라는 의견을 드렸습니다.(iOS역시 앱스토어도 애플 계정이 있어야 하듯이요) C2DM 안쓴다고 구글계정이 필요 없는게 아니라는 거죠.

    3rd party 개발자 입장에서 자기의 프로그램이 다른회사의 계정정보와 연동된 기능을 사용한다는게 상당히 꺼림직할 수 있습니다. 그런데 어짜피 안드로이드,iOS 공통으로 앱의 배포를 위해서는 해당 플랫폼제공자의 아이디를 가진 유저에게만 할 수 있기 때문에 현재로서는 iOS던 Android던 애플이나 구글계정은 C2DM이나 APNS와 상관없이 사실상 mandatory입니다.

    계정정보를 통한 인증(로그인)과 push 네트웍의 유지는 별개의 문제입니다.

    배터리 절약을 위해 구글씽크, EAS, 카카오톡, 마이피플 등을 선택적으로 disable하는 것은 이 논의와는 별개로서의 사용자의 선택입니다만, 예를들어, 현재 C2DM을 쓰는 네이버톡은 카카오톡과 달리 구글씽크를 같이 켜 놓고 사용해도 배터리 소모량이 거의 증가하지 않는다는 장점이 있기에 오히려 반대로 생각해 봐야 하지 않을까요?

    좋아요

  4. C2DM의 사용이나 구글씽크 사용시 구글계정 설정 여부는 안드로이드마켓 사용여부의 문제이기도 합니다. 즉, C2DM이 반드시 구글계정이 필요로 한다는 단점때문에 사용을 안한다면, 안드로이드폰을 사용하면서 안드로이드마켓도 사용안하는 유저가 되는 것을 의미하게 되죠.

    그러므로 C2DM이 구글계정을 요구하지 않게 바뀌더라도 그것이 안드로이드폰을 구글계정 없이 정상적으로 쓸 수 있다는 상황이 되는 것이 아니기 때문에(마켓 접속등을 위해), 결과적으로 C2DM이 구글계정을 필요로 한다는 것이 C2DM만의 단점이 아니라는 의견을 드렸습니다.(iOS역시 앱스토어도 애플 계정이 있어야 하듯이요) C2DM 안쓴다고 구글계정이 필요 없는게 아니라는 거죠.

    3rd party 개발자 입장에서 자기의 프로그램이 다른회사의 계정정보와 연동된 기능을 사용한다는게 상당히 꺼림직할 수 있습니다. 그런데 어짜피 안드로이드,iOS 공통으로 앱의 배포를 위해서는 해당 플랫폼제공자의 아이디를 가진 유저에게만 할 수 있기 때문에 현재로서는 iOS던 Android던 애플이나 구글계정은 C2DM이나 APNS와 상관없이 사실상 mandatory입니다.

    계정정보를 통한 인증(로그인)과 push 네트웍의 유지는 별개의 문제입니다.

    배터리 절약을 위해 구글씽크, EAS, 카카오톡, 마이피플 등을 선택적으로 disable하는 것은 이 논의와는 별개로서의 사용자의 선택입니다만, 예를들어, 현재 C2DM을 쓰는 네이버톡은 카카오톡과 달리 구글씽크를 같이 켜 놓고 사용해도 배터리 소모량이 거의 증가하지 않는다는 장점이 있기에 오히려 반대로 생각해 봐야 하지 않을까요?

    좋아요

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중