APNs (Apple Push Notification Service) 시리즈 - (1) APNs란?
from 나에 의한/Development, iPhone 2010/03/16 11:56| 애플 푸쉬 노티피케이션 서비스(Apple Push Notification Service : APNs)에 대해서 샅샅이 파해쳐 보도록 하겠습니다. ^*^ 아이폰에 대해서 공부하면서, 푸쉬서비스 이해하기가 가장 난해했었는데.. 어느정도 실마리가 풀려나가는 것 같습니다. 이론을 토대로 실무에 적용하면서 배운 많은 것들을 몇가지 소개 해드리겠습니다. 아무 생각없이, 써보자! 라고 했던거라.. 분량이 얼마나 나올지는 모르겠습니다만.. 생각나는대로 계속 업데이트 하겠습니다. ![]() ---------------------------------------------------------------------------------------------------------
어플리케이션에서 사용자에게 어떠한 알림메시지나, 이벤트를 주기위해서 푸쉬~라는 서비스가 필요로 합니다. 예를들면, 메신저를 통해 친구가 로그인 했다던가 하면 오른쪽 구석에서 네모난 상자가 올라갔다가 내려가면서 사용자들에게 어떤 상황을 전해 주는걸 푸쉬 서비스라고 생각을 하시면 됩니다. 모바일 디바이스에서도 예외가 아니에요. 디바이스에 설치한 어플리케이션에서 사용자에게 도움이 되는 정보나, 어떠한 상황이 발생했을 때 알려주는 기능이 있어야 되는건 당연하겟죠. ![]() ( 왼쪽에 있는게 윈도우 모바일의 작업관리자 화면 인데요 지속적으로 푸쉬알림을 받고, OS를 관리하는 프로세스들이 실행되고 있습니다. ) 하지만, 단순히 어플리케이션이 백그라운드로 많이 떠있으면 그만큼 퍼포먼스도 떨어지고, OS도 불안불안해집니다. 특히 개인개발자들이 만든 백그라운드 어플리케이션들은 그 안정성도 보장할 수 없고, 걔네들이 무슨짓을 하는지도 알 방법이 없죠.. 그래서 애플이 아이폰을 발표하고, 기존에 모바일 OS와 차별을 두기 위해 꺼내든 카드는 OS의 안정성과 신뢰성입니다. iTunes AppStore를 통해서 애플의 검수를 모두 마친 어플리케이션들만 판매 / 제공함으로서 사용자들은 믿고 어플리케이션을 받을 수 있게되고, 어플리케이션들의 안정성은 전화기를 껐다,켰다 반복하지 않게 되었습니다. 사용자들은 디바이스가 제멋대로 꺼지진 않을까? 바이러스가 걸려서 내 개인정보가 빠져나가진 않을까? 에 대한 걱정은 깨끗하게 잊을 수 있게 만들었습니다. 그러면, 아이폰은 백그라운드 프로그램을 지원하지 않는데 어떤방식을 통해서 어플리케이션 푸쉬서비스를 받을 수 있을까요? 정답은 바로 APNs에 있습니다. 어플리케이션이 사용자에게 알려줘야 되는 내용을 애플 서버를 경유해서 전달해줌으로 인해서, 그 푸쉬되는 내용에 대해서 신뢰할 수 있게 됩니다. 일반적인 푸쉬 서비스의 흐름은 간단합니다. ( 클라이언트 서비스 서버 ) -> ( 모바일 디바이스 ) 반면에, APNs는 ( 클라이언트 서비스 서버) -> ( APNS : Apple Push Notification Server ) -> ( 아이폰 ) 의 방법을 통해서 사용자에게 푸쉬를 해주는 겁니다. 그리고 APNs는 일반적인 푸쉬서비스와 개념이 약간 다른데요.. 일반적으론 백그라운드에 있던 어플리케이션이 푸쉬를 받는 순간 특정한 모듈이 작동하고, 액션이 발생하지만 APNs의 개념은 "어플리케이션에 다음 과 같은 상황이 일어났으니.. 어플리케이션을 실행해서 서버와 통신을 하도록 해라." 라고 할 수 있을 것 같습니다. 푸쉬 메시지가 어플리케이션의 어떤 행동을 해주는게 아니란 얘기죠.. ^^ APNs를 이용함에 있어서 단점도 있습니다. 전세계 아이폰 어플리케이션에서 원하는 푸쉬의 내용이 각 나라의 통신사 서비스를 통해서 애플서버를 경유해 가기 때문에, 반응이 느릴 수 밖에 없습니다. 그리고 푸쉬가 폭주하는 날이면 종종 알람을 받지 못하는 경우도 일어납니다. ( 경우에 따라 다르지만, 푸쉬를 제공하는 클라이언트 서비스 서버가 트래픽을 감당못하고 뻗어버리는 경우가 더 많죠... ) 그리고, 푸쉬로 제공할 수 있는 데이터의 제한이 있습니다. 다음 파트에서 또 언급을 할 거지만.. 256byte의 제한이 있습니다. 텍스트의 크기가 아니고, 모든 푸쉬서비스에 관련된 패킷 사이즈가 256byte 미만이어야 합니다. 푸쉬 서비스 치곤 할 수 있는게 너무 없다고 생각하실 수도 있을거에요, 하지만 애플이 원하는건 안정성을 담보로 아이폰의 안녕을 바라고 있으니까요 ^^ 구현의 관련된 사항과, 또 무언가 들은... 계속적으로 써 나가겠습니다.. 그럼 안녕~ ![]() ![]() |









댓글을 달아 주세요
클라이언트 서비스 서버라 하심은 직접 운영할 서버가 있어야 한다는 얘기 인가요?
서버 없이 푸쉬노티피케이션 서비스를 이용할수는 없는건가요?ㅠㅠㅠ
글 잘봤습니다. 푸쉬쪽공부를 하고싶어서 찾다가 잘 정리된 곳을 발견했네요
질문이 있는데요. 정확히 APNs라는것은 통신사? 혹은 애플서버에 존재하는 서버(?)인가요?
프로바이더까라 APNs로 보낸다는것이 어느 특정 서버로 데이터를 보내주는건가요?
애플에서는 모든 푸쉬에 관련된 네트워크 패킷은 애플사에서 직접 받아서 처리를 한다고 명시되어 있지만, 실제로는 전세계의 모든 푸쉬의 양을 감당할 순 없을 겁니다.
아이폰 네트워크 사업자 캐리어 파일을 살펴보면
KT 통신망을 쓰는 유저들은
" alwayson.ktfwing.com " , " leo.ktfwing.com " 서버를 이용한다고 나와 있는데요, 실제로 저게 정말 작동하는 서버인지는 모르겠습니다.
간단하게, 프로바이더에서 애플서버를 거쳐서 각 통신사에 마련된 서버를 통해 푸쉬가 전달된다고 보시면 되겠네요 ^^;
안녕하세요? 답변 감사드립니다.
한가지 더 질문이 있는데요. 앱 자체에서 메세지를 보내고 싶은데 예를들어 제 핸드폰에서 옆사람 핸드폰으로 푸쉬를 보내고 싶을때 php파일의 기능을 앱에서 구현을 해야하는데 .. 어떻게 해야 할까요?
무엇을 이용해야 할수 있나요?