Pushsphere: LINE 메신저의 빠르고 신뢰할 수 있는 대량 푸시 알림 비법

3 weeks ago 9

이 글은 Tech-Verse 2025에서 발표된 Pushsphere: LINE의 신뢰성 있고 신속한 대량 푸시 알림 비법 세션을 글로 옮긴 것입니다.

안녕하세요. LINE Plus Corporation의 Developer eXperience 팀 이희승(Trustin), 엄익훈이라고 합니다. Developer eXperience 팀은 LINE 앱의 메시징 시스템을 개발하는 데 필요한 마이크로 서비스 프레임워크 Armeria와 고가용성 분산 설정 저장소 Central Dogma를 개발 및 운영하고 있습니다.

이번 글에서는 Developer eXperience 팀과 LINE 메시징 시스템 개발 팀이 협업해 개발한 푸시 알림 게이트웨이 서버, Pushsphere를 소개하려고 합니다. 먼저 메시징 시스템에서 푸시 알림 전송을 구현하면서 맞닥뜨렸던 이슈를 공유하고 전반적인 관점에서 디자인과 아키텍처를 소개한 뒤 구체적인 구현 방식과 그 효과를 공유하겠습니다.

LINE 앱의 푸시 알림 전송 시스템이 고려해야 할 점

모바일 환경에서의 ‘푸시 알림 전송’이라고 하면 많은 분들이 이벤트나 프로모션 홍보와 같은 용도를 떠올릴 것입니다. 물론 그런 용도로도 많이 사용되는데요. LINE 앱과 같은 인스턴트 메신저에서는 메시지 전달 및 음성/화상 통화에서 핵심 역할을 맡고 있다는 점이 다른 서비스와의 차이라고 할 수 있을 것 같습니다.

이 차이를 전송되는 내용 관점에서 한 번 살펴보겠습니다. 예를 들어 할인 이벤트 알림 같은 경우 놓치거나 제대로 전달받지 못했더라도 보통 좀 아쉬운 정도로 끝날 것입니다. 하지만 만약 사랑하는 아내가 보낸 중요한 연락이 제대로 전달되지 않았다면 어떨까요? 내용에 따라서 누군가 '생명'에 위협을 느낄 가능성도 배제할 수 없을 것 같습니다. 그 외에도 나라에 따라서 지진이나 화산 분화와 같은 중대한 재해 관련 알림을 LINE 앱으로 전달하는 경우도 있습니다. 따라서 푸시 알림이 제대로 전달되지 않는다면 LINE 앱의 신뢰에 중대한 영향을 끼칠 것입니다. 인스턴트 메시징 시스템에서 안정적이고 신속한 푸시 알림 전달은 말 그대로 삶과 죽음의 문제라고 할 수 있을 것 같습니다.

안정성과 속도라는 두 마리 토끼를 잡는 것만으로도 어려운 일인데요. 여기 세 번째 토끼가 있습니다. 바로 때에 따라 극적으로 증가하는 메시지 발송량입니다. 다수의 사용자가 짧은 시간에 같은 경험을 공유하는 어떤 사건이 발생하면 LINE 앱으로 발송되는 메시지가 평소의 수배에서 수십배까지 치솟는 상황이 발생합니다. 이런 상황에서도 푸시 알림이 안정적으로 빠르게 전달되도록 하려면 생각보다 고려할 것이 많습니다.

본격적으로 어떤 점을 고려해야 하는지 이야기하기 전에 간단한 퀴즈를 하나 풀어보겠습니다. 아래 세 가지 상황 중 어느 상황에서 메시지 발송량이 가장 많을까요?

  • 새해 0시 0분(자정)
  • 지진이 발생했을 때
  • 상공을 통과하는 인공위성 발사체를 미사일로 착각했을 때

정답은 ‘지진이 발생했을 때’입니다.

그런데 저희가 안정적으로 푸시 알림을 전달하고 싶어도 통제할 수 없는 부분이 있습니다. 바로 Apple의 iOS 통지 시스템인 APNs(Apple Push Notification service)와 Google의 Android 통지 시스템인 FCM(Firebase Cloud Message)입니다. 이 서비스들은 대체로 꽤 안정적인 것으로 보이지만, 실제로 안을 살펴보면 꼭 그렇지만은 않다는 것을 알 수 있습니다.

이 서비스들은 다수의 인스턴스로 구성된 거대한 클러스터로 운영되는데요. 클러스터의 전반적인 상태가 양호할지라도 일부 인스턴스가 문제를 일으키는 경우가 상당히 자주 발생합니다. 따라서 운이 나쁘게도 응답이 늦거나 타임아웃이 발생하는 인스턴스에 걸렸다면 푸시 알림이 제대로 전달되지 않을 것입니다. 그 밖에도 갑작스럽게 연결이 끊어지는 경우도 있기 때문에 이에 대한 대비도 필요합니다.

보통 이런 상황에 대처하기 위한 방법으로 푸시 알림을 다시 전송하는 재시도(retry) 로직을 많이 사용하는데요. 재시도 로직을 사용하기 위해서는 다음과 같이 고

Read Entire Article