푸시 서비스.
다들 알고 계시죠? 휴대폰 등의 알림을 제공해 주는 서비스입니다.
푸시 서비스가 없다면, 서버가 클라이언트에게 정보를 제공해 주기가 어려우니.. 클라이언트가 수시로 서버에게 알림이 왔는지 물어봐야 하는 형태가 될 겁니다. 그렇게 되면 의미 없는(?) 요청이 계속되어질 테고(알림이 계속 뜨진 않을 테니까요..) 그로 인해 서버/네트워크 부하가 가중될 것입니다.
그래서 푸시 서비스가 나온 것으로 알고 있습니다.
서버가 클라이언트에게, 필요할 때에만 정보를 제공하는 것이죠.
필요할 때 접속하는 것은 어쩔 수 없는 것이죠. 이것 때문에 부하가 가중된다면, 용량을 증설해야겠죠.
그런데 본질적인 궁금증이 있습니다.
논리적 서버는 1대로 보고.. 논리적이든 물리적이든 클라이언트는 전 세계에 수십억 대가 있을 텐데..
서버 입장에서 어디로 정보를 보내야 하는지 어떻게 식별할까요?
실제로 이런 '알림'은 거의 실시간으로 오던데..
심지어 일부 이동통신망은 공인IP도 아니고.. 사설IP로 되어 있는 경우도 있던데요..
(쉽게 말하자면 공유기 뒤에 있는 거죠. 클라이언트 입장에서 나가는 건 자유롭겠지만, 들어오는 건 막혀 있을 겁니다.)
그리고, 푸시 서비스 역시 TCP/IP 통신을 할 것 같은데..
각 클라이언트에 어떻게 연결되는 것일까요? 보통 클라이언트는 막혀 있잖아요.
하긴, 이건 클라이언트(IOS, 안드로이드)가 특정 IP/포트에 대해서 개방해 놓으면 되긴 하겠네요.
자료 검색을 좀 해 봤는데, 이런 밑바닥(?) 이야기는 별로 없어서, 질문 드려봅니다.
IOS, 안드로이드 각각 이런 푸시 서비스를 제공하고 있다는데.. 전세계의 그 많은 알림을 다 처리한다니 놀랄노자네요.
카카오는 자체 서비스를 구축했다고 그러더군요.
궁금합니다..
예전에 장터알리미 종료할때 공개했지만, 만들때 참조했던 레퍼런스 정보들을 아래 붙입니다. 필요시 참고하시면 될것 같습니다.
Web Push Notification 참조자료들
푸시서버
(GITHUB) PHP 웹푸시 서버 https://github.com/web-push-libs/web-push-php
구글공식자료
(HTML) Introduction to Push Notifications : https://developers.google.com/web/ilt/pwa/introduction-to-push-notifications
(HTML) Push Notifications on the Open Web: https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web
(Youtube) Intro to Web Push & Notifications : https://www.youtube.com/watch?v=ggUY0Q4f5ok
(HTML) Web Push Notifications Overview : https://developers.google.com/web/fundamentals/push-notifications
MDN web docs
Push API : https://developer.mozilla.org/ko/docs/Web/API/Push_API
Notification API : https://developer.mozilla.org/ko/docs/Web/API/notification
사용자자료
(Youtube) Web Push Notifications in Xampp with PHP : https://www.youtube.com/watch?v=vi9d6MjiBGQ
설명이 좀 이해하기 어려운데..
'endpoint' --> 제가 말하는 '클라이언트'
이렇게 이해하면 되려나요?
그리고, 이 endpoint로 연결을 어떻게 하는지는 FCM의 경우, 구글이 알아서 해 준다? --> 그 로직은 고민할 필요가 없다?
이렇게 이해하면 됩니까? ^^
그래서 리버스 커넥션은 이번 건의 해결책은 아닌듯 합니다.
클라이언트에서 (정확히는 각 앱이 아니라 OS에서 사용하는 서비스 같은 거) 주기적으로 긁어 오는 것이겠죠.
사용자 (앱) 입장에서는 OS에서 주기적으로 확인한 내용을 앱으로 푸쉬 해주는 거니까 서버에서 푸쉬 해주는 걸로 느껴지는.. 뭐 그런 거 아닐까요?
p.s. 위에서 꿀벌님 얘기를 보니까 주기적으로 긁어오는 것이 아니라 내 위치가 바뀔 때마다 내위치만 갱신해주고 이벤트가 있을 때 서버쪽에서 바뀐 위치로 쏴주는 건가 보네요.
대단히 고맙습니다.
서버에 클라이언트를 등록해 둡니다.
(그러면 서버가 클라이언트에게 메시지를 보낼 수 있습니다.)
클라이언트의 위치가 바뀌거나 하면, 클라이언트가 서버에게 이를 알립니다.
그러니 서버는 항상 클라이언트에게 메시지를 보낼 수 있게 되는 것이죠.
알고 보니 별 것 아니긴 하네요. ^^