안녕하세요. 번개장터 엔지니어 이명휘입니다. 이번 글에서는 번개장터의 과거 푸쉬시스템에 대해서 설명하고, 간헐적으로 발생했던 문제점에 대해서 대해서 다뤄보려 합니다.

1. 기존 번개장터 푸쉬 시스템 소개

  • 푸쉬(알림)은 스마트폰에 설치된 특정 애플리케이션의 상태를 주기적으로 표현해줄 수 있는 가장 중요한 수단 중 하나입니다. 번개장터를 예로들어보면, 애플리케이션을 사용하는 유저입장에서는 자신의 물품이 팔리고 있는 상황을 애플리케이션을 직접 작동시키지 않아도 알 수 있습니다. 반대로, 애플리케이션의 관리자입장에서는 유저에게 광고성 푸쉬를 전송함으로써 매출을 향상시킬 수 있는 용도로도 사용되고 있습니다. 이처럼 푸쉬는 애플리케이션을 사용하는 유저와 관리자 모두에게 필요한 필수도구입니다. 우리 번개장터에서도 과거부터 푸쉬를 통해 유저에게 알맞는 정보를 제공하고 있었으며, 기존 푸쉬시스템에 대해서 상세히 설명드리는 시간을 갖고자합니다.

    번개장터에서 매우 중요한 역할을 하는 푸쉬

  • 기존 번개장터의 푸쉬시스템은 구글에서 야심차게 제작한 언어인 Go로 구성되어 있었습니다. 비동기적으로 빠르고 가벼운 함수를 구현해야하는 푸쉬특성상, Go는 해당 목적에 정확하게 들어맞는 언어이기도 했습니다. Go루틴을 중심으로한 기존 푸쉬시스템은 분당 150만건에 해당하는 번개장터의 채팅알림(번개톡)과 전반적인 서비스 알림을 제공해주었습니다.

2. 문제사항

  • 영원할것 같았던 Go로 구성된 푸쉬시스템에 2017년 11월부터 균열음이 생기기 시작했습니다. 간헐적으로 푸쉬가 유저에게 도달하지 못하거나, 많이 지연되는 상황이 일어났습니다. 이는 많은 사용자의 불편함을 초래했습니다. C2C기반의 커머스 서비스를 지원하는 번개장터의 특성상 푸쉬는 매우 중요한 역할을 하고 있었기에, 번개장터 버그리포트에는 푸쉬에 대한 불편사항이 하루가 멀다하고 쌓여만 갔습니다.

    버그리포트에 쌓여만 가는 유저분들의 불만

  • 간헐적으로 나타나는 문제에 대한 해답을 찾기가 난해했기에 더욱 미궁으로 빠져들었습니다. 번개장터 엔지니어들은 다양한 가설을 바탕으로 문제에 대한 원인을 파악해보려 노력했지만, 쉽지않았습니다. 다음은 우리 번개장터가 해당문제 대해 세운 가설들과 그에 대에 대한 행동입니다.

3. 원인분석

  • 언어문제에서 파생되는 것으로 보이는 오류
    • Go를 활용하는데 있어서 중요한 역할을 하는 Go루틴은 함수를 동시에 효과적으로 동작시켜 줄 수 있는 기능입니다. 이는 가벼운 리소스(메모리, 스케쥴링, 선점효과)를 바탕으로 동시성 프로그래밍을 실현할 수 있는 핵심기능이기도 합니다.
    • AWS Cloud Watch를 통해서 Go에 대한 전반적인 모니터링을 진행한 결과, Go루틴이 주기적으로 해소되지 못하는 흔적이 있었습니다.
  • 애플(APNS)에서 지원하는 푸쉬 라이브러리의 버전문제
    • 푸쉬오류에 대한 통계를 확인했을 때, 아이폰에서 대부분의 오류가 발생하고 있었습니다. 통계치를 바탕으로 애플에서 제공하는 Go언어용 APNS(Apple Push Notification Service) 라이브러리의 문제점을 제기하기 시작하였습니다.

4. 문제점을 해결하기 위한 행동

  • 결론부터 말씀드리면 앞서 설명드린 가설들을 구성하고 실행에 옮겼지만, 제대로된 솔루션을 제공해주진 못했습니다. 번개장터 엔지니어들은 Go루틴이 쌓이는 부분을 해소시키기위해서 EC2를 주기적으로 재가동을 시켜보았으며, APNS 라이브러리를 상위버전으로 교체하기도 하였습니다. 또한, 기존 한자릿수로 구동되던 EC2의 수를 대폭 늘려보기도 하였습니다. 단기적으로는 해소되는듯 보였으나, 근본적으로 나아지질 기미가 보이지 않았습니다.

  • 결국 새로운 푸쉬시스템을 개발하자는 결론이 나왔습니다. 기존 푸쉬시스템을 보수하여 사용하는 것이 모두에게 행복한 방법이겠지만, 하루하루 쌓여만 가는 버그리포트의 수를 보면 새롭게 개발하는 것이 앞으로의 번개장터를 위해서라도 가장 최적의 방법이라고 생각했습니다.

  • 새롭게 진행한 푸쉬시스템 구성에 대한 이야기는 다음 글에서 진행하도록 하겠습니다.




글쓴이 - 이명휘 : 번개장터 주식회사 엔지니어(컴퓨터공학 학사 / 건축공학 석사)
머신러닝에 기반한 최적화 및 신재생에너지에 대한 연구를 했습니다.
흥미로운 논문에 대한 리뷰를 취미로 합니다.
Web : developeco.com
ResearchGate : bit.ly/2HF9M9x
Github : /Myeonghwi