gateway-server

1 개의 포스트

Pushsphere: LINE 메신저의 빠르고 신뢰할 수 있는 대량 푸시 알림 비법 (새 탭에서 열림)

LINE은 대규모 푸시 알림 발송 과정에서 발생하는 신뢰성 문제를 해결하기 위해 고성능 게이트웨이 서버인 'Pushsphere'를 개발했습니다. Pushsphere는 복잡한 재시도 로직, 쿼터 관리, 엔드포인트 모니터링을 추적 및 자동화하여 시스템의 복잡성을 낮추고 가용성을 극대화했습니다. 이를 통해 LINE은 대규모 트래픽 상황에서도 안정적인 메시지 전달력을 확보하고 운영 부담을 대폭 줄이는 성과를 거두었습니다. **대규모 푸시 알림 시스템의 도전 과제** * **외부 플랫폼의 불안정성:** APNs나 FCM 같은 외부 푸시 플랫폼은 대규모 환경에서 응답 지연, 갑작스러운 연결 끊김, 특정 인스턴스의 오작동 등 예측 불가능한 문제를 자주 노출합니다. * **단순 재시도의 한계:** 장애 발생 시 단순히 재시도를 반복하면 시스템에 부하를 주는 '재시도 폭풍'이 발생하거나, 서비스 제공자의 쿼터(Quota) 제한(429 Too Many Requests)에 걸려 전체 메시지 전달이 차단될 위험이 있습니다. * **관리 복잡도:** 수백 개 이상의 엔드포인트를 수동으로 관리하며 상태를 추적하고 최적의 서버로 라우팅하는 작업은 매우 높은 운영 비용을 발생시킵니다. **Pushsphere의 핵심 아키텍처 및 구현** * **통합 인터페이스 제공:** iOS와 Android 등 각 플랫폼별로 상이한 API 규격을 단일 인터페이스로 추상화하여, 내부 메시징 서버가 복잡한 플랫폼별 로직 없이도 간편하게 알림을 발송할 수 있도록 설계되었습니다. * **재시도 인식 부하 분산(Retry-aware Load Balancer):** 라운드 로빈 방식을 기반으로 하되, 재시도 시에는 이전에 시도했던 엔드포인트를 자동으로 건너뜁니다. 이를 통해 결함이 있는 특정 노드에서 실패가 반복되는 현상을 원천 차단합니다. * **쿼터 인식 재시도 로직:** 남은 전송 쿼터를 실시간으로 모니터링하여, 한도에 가까워지면 무리한 재시도를 중단함으로써 시스템의 전체적인 안정성을 유지하고 서비스 차단을 방지합니다. **서킷 브레이커를 통한 엔드포인트 회복 탄력성** * **엔드포인트별 독립 감시:** 모든 개별 엔드포인트에 서킷 브레이커를 적용하여 발송 성공/실패 여부를 실시간으로 보고받습니다. * **자동 장애 노드 격리:** 특정 엔드포인트에서 오류가 임계치를 넘으면 서킷이 열리고, 해당 노드는 즉시 활성 풀에서 제거되어 트래픽 유입이 차단됩니다. * **DNS 기반 자동 교체:** 제거된 노드의 빈자리는 DNS 리프레시를 통해 확보된 새로운 후보군 노드로 자동 교체되어, 전체적인 트래픽 처리 용량을 일정하게 유지합니다. **성능 개선 및 운영 결과** * **고성능 비차단 통신:** Armeria 마이크로서비스 프레임워크와 Netty를 기반으로 구축되어, 대량의 요청을 논블로킹(Non-blocking) 방식으로 신속하게 처리합니다. * **운영 효율성 극대화:** 시스템 도입 후 온콜(On-call) 알림 횟수가 연간 30건 이상에서 4건 수준으로 급감했습니다. 더 엄격한 모니터링 기준을 적용했음에도 불구하고 자동화된 장애 대응 덕분에 운영자의 개입이 거의 필요 없는 환경을 구축했습니다. 이 글은 대규모 트래픽을 처리하는 시스템일수록 개별 노드의 상태를 세밀하게 관리하고, 외부 의존성(Third-party API)의 불안정성을 시스템 계층에서 어떻게 추상화하여 방어해야 하는지에 대한 실무적인 통찰을 제공합니다. 특히 Armeria와 Netty를 활용한 고성능 게이트웨이 설계는 유사한 과제를 안고 있는 백엔드 엔지니어들에게 좋은 참조 사례가 될 것입니다.