Open ByteAurora opened 3 years ago
우리와 같은 소규모 프로젝트에서는 시간과 편이성이 중요하다고 생각합니다. 이러한 부분에서 보았을 때 기존의 방식대로 FCM을 사용하는 것이 좋을 것 같다고 생각합니다. 추가적으로 U.O.S에서 Notification시 보내는 데이터에는 매장명과 주문번호 밖에 없기 때문에 데이터의 보안 부분에서는 걱정할 필요가 없다고 생각됩니다.
FCM비용은 개인이 사용하기에 귀찮을 것 같습니다.
FCM비용은 개인이 사용하기에 귀찮을 것 같습니다.
FCM은 비용이 들지 않습니다. 위 FCM 장점 부분과 FCM 설명 링크에 들어가시면 FCM이 트래픽 용량에 상관없이 무료인 것을 확인하실 수 있습니다. FCM은 기존 GCM(Google Cloud Messaging)의 최신버전이라고 생각하시면 됩니다.
추가적으로 FCM은 U.O.S 파트너(자영업자 등)가 관리하는 것이 아닌 U.O.S를 서비스로 배포하고자 하는 사람이 프로젝트를 만들어 관리하는 것입니다. 배포자가 FCM 프로젝트를 만들고 해당 프로젝트에 자신이 배포할 앱의 SHA-256과 같은 디지털 서명 키 등록, 배포할 POS기 프로그램에 FCM 프로젝트의 api키만 등록하면 FCM을 사용할 수 있는 구조입니다.
본 링크에서는 MQTT는 발행/구독 구조이므로 다대다 기능에서 유용하다고 설명하고 있습니다. 현재 우리의 Notification은 1 대 1 구조로 이루어져 있고 FCM에도 발행/구독 기능이 포함되어 있기 때문에 FCM을 쓰는 것이 더 유리하지 않을까 생각됩니다.
현재 구조는 FCM 프로젝트를 서비스 배포자가 만들어서 해당 서비스를 사용하는 모든 일반고객/업자들이 동일한 FCM 프로젝트를 사용하게 됩니다. Firebase 공식문서에서는 FCM에 아래와 같은 제한을 두고 있다고 합니다.
XMPP 서버 제한
- FCM XMPP 서버에 연결할 수 있는 속도를 프로젝트당 1분에 400개의 연결로 제한합니다. 메시지 전송에 문제가 생겨서는 안 되지만 시스템의 안정성을 확보하는 것이 중요합니다.
- 프로젝트마다 FCM에서 동시 연결 2,500개를 허용합니다.
단일 기기에 대한 최대 메시지 속도
- 단일 기기에 전송할 수 있는 최대 메시지 수는 분당 240개, 시간당 5,000개입니다. 이렇게 기준이 높은 것은 사용자가 채팅에서 빠르게 상호작용할 때와 같이 단기간의 트래픽 급증을 허용하기 위해서입니다. 이 한도는 전송 로직 오류로 인해 의도치 않게 기기의 배터리가 방전되는 것을 방지합니다.
업스트림 메시지 한도
- 업스트림 대상 서버에 과부하가 걸리지 않도록 업스트림 메시지를 프로젝트당 1,500,000/분으로 제한합니다.
- 악성 앱 동작으로 인한 배터리 방전을 방지하기 위해 기기당 업스트림 메시지를 1,000/분으로 제한합니다.
주제 메시지 한도
- 주제 구독 추가/삭제 속도는 프로젝트당 3,000QPS로 제한됩니다.
우선 위 제한 중 '단일 기기에 대한 최대 메시지 속도' 부분은 제외해도 됩니다. U.O.S에서 Mobile App은 한 주문에 대해서 한 개의 Notification이 발생합니다. 따라서 분단 240개 이상의 주문을 한 개의 Mobile App에서 주문할 가능성은 거의 없기 때문입니다.
가장 고려해야할 부분은 'XMPP 서버 제한' 입니다. 해당 부분에서 말하는 400개의 연결이라는 것이 분당 400개의 Notification 전송 횟수가 넘었을 경우 최초 Notification 전송 후 1분이 지난 시점에서 다시 400개를 전송할 수 있는 의미라면, U.O.S에 대해서 적용하기 어려울 수 있습니다. 각 매장별로 분당 2~3개씩 Notification을 전송한다고 할 때 서비스 이용 매장이 200개 이상이라면 문제가 생길 수 있는 부분입니다. 해당 부분에 대해서는 Firebase에 문의를 넣어둔 상태이고 만약 위의 내용이 맞을 경우에는 MQTT를 사용하는 것이 더 맞을 것이라고 생각됩니다.
위의 내용에서 Firebase Cloud Messaging의 다양한 장점에 대해서 말씀드렸지만, 프로젝트가 FCM에 의존성이 생기게 됩니다. 즉, 구글의 FCM 서버측에 문제가 생길 경우 서비스를 이용할 수 없게 되는 경우가 생길 수 있습니다. 이러한 문제를 피하기 위해서는 FCM을 사용하지 않고 자체 Notification 서버를 구현해야 합니다. 따라서 현재 전체적인 기능이 마무리되는 동안에는 FCM 사용을 유지하고 추후 MQTT로 변경하는 것이 좋을 것 같습니다..
U.O.S Notifiation