Google Cloud로 확장 가능한 데이터 기반 소셜 미디어를 구축한 ShareChat
Bhanu Singh
Co-founder and CTO at ShareChat
* 본 아티클의 원문은 2021년 4월 20일 Google Cloud 블로그(영문)에 게재되었습니다.
편집자 주: 이번 게시글은 인도의 소셜 미디어 플랫폼인 ShareChat에 관한 내용입니다. ShareChat이 Google Cloud를 사용하여 성능과 앱 개발, 분석을 개선하고 수백만 명의 사용자에게 지역 콘텐츠를 제공한 사례를 소개합니다.
주요 공식 언어가 22가지이고 통용되는 지역 방언은 셀 수 없을 만큼 많은 국가에서 소셜 네트워크를 만들려면 어떻게 해야 할까요? ShareChat에서는 1억 6,000만 명이 넘는 월간 활성 사용자가 15가지 인도 언어로 동영상, 이미지, GIF, 노래 등을 공유하고 조회합니다. 2020년에 출시한 짧은 동영상 플랫폼인 Moj도 지원하는 월간 활성 사용자 수가 8,000만 명을 이미 넘어섰습니다.
익숙한 언어로 사람들과 소통
인도에서 모바일 데이터와 스마트폰의 가격이 저렴해지면서 인터넷 사용자층이 주로 농촌 지역에 거주하는 새로운 사용자층으로 크게 확대되고 있습니다. 하지만 이들 대부분은 영어를 사용하지 않기 때문에 콘텐츠와 정보 액세스 측면에서 언어의 역할이 매우 중요합니다. 인터넷을 처음 접하는 이들 사용자는 영어가 주 사용 언어인 다른 소셜 미디어 사이트에 가입하기보다는 더 익숙한 특정 언어 또는 방언으로 된 WhatsApp 그룹에 가입하는 쪽을 선택했습니다.
그에 따라 ShareChat은 사람들이 모국어로 의견을 공유하고, 일상을 기록하며, 새 친구를 사귈 수 있는 플랫폼을 구축하기 시작했습니다. 맞춤설정된 콘텐츠 뉴스피드를 사용하여 언어별 콘텐츠를 올바른 잠재고객에게 제공함으로써 콘텐츠와 사람 검색 과정을 간소화합니다.
폭발적으로 증가하는 데이터와 엄청난 양의 콘텐츠, 트래픽을 처리해야 하는 상황에서는 IT 인프라에 대한 의존도가 높을 수밖에 없습니다. 또한 대다수 사용자는 2G 네트워크를 사용해 게시, 조회하거나 좋아요 표시를 하고 서로 팔로우합니다. 당사의 플랫폼은 전국에 흩어져 각기 다른 네트워크를 사용하는 사람들에게 성능 저하 없이 최고의 경험을 제공해야 합니다.
미래 성장을 지원하는 최적의 클라우드 파트너
클라우드 환경을 기반으로 만들어진 ShareChat은 기존 클라우드 제공업체를 통해 대규모 고객층에 서비스를 제공할 수 있도록 시스템을 확장하는 방법을 이미 잘 알고 있었습니다. 하지만 다른 많은 기업처럼 예기치 않은 트래픽을 처리하고 저장용량 부족 사태를 방지하기 위해 컴퓨팅과 스토리지를 초과 프로비저닝하는 데는 어려움이 있었습니다. 현지 언어 콘텐츠에 대한 수요가 커지고 코로나19 위기 대응 방안으로 온라인 상호작용이 늘어나는 상황에서 동적으로 확장하고 필요에 따라 리소스를 할당하는 보다 효율적인 방법의 필요성을 깨달았습니다.
이러한 배경에서 Google Cloud는 당연한 선택이었습니다. 강력한 기술 포트폴리오를 비용 효율적으로 손쉽게 관리하게 해주는 기술을 우선시하는 기업과 파트너십을 통해 원하는 무엇이든 구축할 수 있는 역량을 갖추고 싶었습니다. 기술 혁신에 앞장서는 Google은 새 기능을 빠르게 수정 및 출시할 수 있는 효율적인 DevOps 파이프라인 구축을 비롯하여 애플리케이션을 빌드, 실행, 관리하는 데 필요한 모든 것을 제공했습니다.
Google Cloud팀과 논의를 시작할 때는 몇 가지 우려사항이 있었지만 시간이 지날수록 정보와 지원을 받으면서 가장 까다로운 문제를 처리하는 데 있어 도움이 되는 파트너는 바로 Google Cloud임을 알게 되었으며 결국 전체 인프라를 Google Cloud로 이전하기로 결정했습니다.
ShareChat에서는 수백만 명의 사용자를 지원하기 위해 Google Kubernetes Engine을 사용하여 배포 및 확장합니다. 반면 데이터 분석에는 관리형 데이터 클라우드 서비스를 조합하여 사용합니다. 예를 들어 데이터 파이프라인에는 Pub/Sub, 분석에는 BigQuery, 실시간 앱 제공 워크로드에는 Cloud Spanner, 색인 작성이 적은 데이터베이스에는 Cloud Bigtable 등을 사용합니다. 또한 신뢰할 수 있는 고품질 콘텐츠 전송을 짧은 지연 시간으로 사용자에게 배포하기 위해 Cloud CDN을 사용합니다.
ShareChat은 현재 기존 환경에서 사용했던 총 핵심 소비량의 절반 수준으로 기존 워크로드를 처리하고 있습니다.
모든 수준에서 더 나은 결과를 제공하는 Google Cloud
Google Cloud로 이전한 후 몇 가지 주요 부문에서 큰 성과가 나타났습니다.
사용자를 위한 다운타임 없는 마이그레이션
마이그레이션 당시 220개 테이블로 구성된 70테라바이트 이상의 데이터가 있었으며 이 중에는 약 500억 개 행으로 구성된 14테라바이트 크기의 데이터도 있었습니다. 데이터의 상호 종속성 때문에 서비스를 개별적으로 이전하는 것은 불가능한 옵션이었습니다.
마이그레이션하는 데이터가 이처럼 엄청난 양이었지만 당사 고객에게는 아무런 영향이 없기를 바랬습니다. 데이터가 동기화되지 않아 지연 시간이 늘어나면 메시지 전송에도 영향이 있을 수 있습니다. 예를 들어 메시지나 알림이 지연되어 사용자 경험에 대한 만족도가 떨어지고 ShareChat을 이탈하는 사람이 생기는 위험한 상황을 원하지 않았습니다.
이전을 위한 준비 작업으로 4개월이 넘는 기간 동안 개념 증명 클러스터를 실행하여 초당 백만 개 이상의 쿼리를 처리해야 하는 실제 시나리오에서 데이터베이스 성능을 테스트했습니다. 성능 테스트와 용량 분석을 위해 오픈소스 API 게이트웨이를 사용하여 기존 데이터 환경을 Google Cloud에 복제했습니다. Google Cloud를 통해 이전 클라우드 환경과 동일한 수준의 트래픽을 처리할 수 있을 것이라는 확신을 갖게 되자 바로 실행할 준비를 마쳤습니다.
래퍼를 사용하여 기존 애플리케이션 코드를 변경하지 않고 마이그레이션할 수 있었습니다. 5시간 만에 데이터 손실이나 다운타임 없이 6,000만 명의 사용자가 Google Cloud로 전부 마이그레이션되었습니다. 현재 ShareChat은 1억 6,000만 명의 사용자가 이용하는 플랫폼으로 성장했으며 Google Cloud가 계속해서 필요한 지원을 제공하고 있습니다.
예기치 않은 수요에 부응하기 위해 전 세계로 확장
ShareChat은 실시간 데이터를 토대로 메시지와 새로운 그룹, 사람들이 좋아하는 콘텐츠, 팔로우하는 사람 등 앱에서 일어나는 모든 일을 추적하여 ShareChat에서 모든 서비스가 원활하게 운영되도록 합니다. ShareChat 사용자가 하루에 작성하는 게시글이 수백만 개 이상이므로 대량의 데이터를 효율적으로 처리할 수 있는 시스템을 갖추는 것이 매우 중요합니다.
따라서 전역 일관성과 보조 색인에 적합한 Spanner로 마이그레이션하기로 결정했습니다. Spanner를 사용하면 레거시 NoSQL 데이터베이스와 달리 기존 테이블 또는 스키마 정의를 다시 생각할 필요 없이 확장하고 여러 장소에서 데이터 시스템을 동기화 상태로 유지할 수 있습니다. 또한 17개 색인이 있는 120개 이상의 테이블을 Cloud Spanner로 이전한 결과 비용이 30% 절감될 만큼 비용 효율적입니다.
Spanner는 데이터를 여러 위치에 실시간으로 원활하게 복제하므로 한 리전에서 장애가 발생해도 문서를 검색할 수 있습니다. 일례로 단 며칠 만에 트래픽이 갑자기 500% 증가한 경우가 있었는데 코드를 단 한 줄도 수정하지 않고 수평적으로 확장할 수 있었습니다. Moj 동영상 앱을 동시에 출시했을 때에도 단 한 건의 문제도 일으키지 않고 이 앱을 다른 리전으로 이전할 수 있었습니다.
개발 및 배포 간소화
ShareChat에서는 평균적으로 초당 80,000개의 요청(RPS)이 발생하며 이는 일일 70억 RPS에 이르는 엄청난 수치입니다. 따라서 일일 인기 주제에 관한 푸시 알림을 매일 전체 사용자층에 전송하는 동작으로 인해 단 몇 초 만에 130,000RPS로 급증하는 경우가 자주 있습니다.
Google Kubernetes Engine(GKE)을 사용하면 초과 프로비저닝하는 대신 수백만 인도인이 서로 인사를 주고받는 디왈리 같은 휴일을 비롯하여 예약된 일정 앞뒤로 트래픽 급증에 대비해 미리 확장할 수 있습니다.
또한 GKE로 마이그레이션한 덕분에 스크립트를 작성하여 배포를 자동화하고 시간을 절약하는 등 더욱 민첩한 업무 방식을 채택할 수 있었습니다. 컨테이너 기반 솔루션을 이미 사용하고 있었지만 전체 배포 유입경로에서 투명성과 노출 범위가 부족했습니다.
사이드카 프록시와 같은 Kubernetes 기능을 사용하면 코드를 변경하지 않고도 애플리케이션 로그인 등 주변 작업을 연결할 수 있습니다. Kubernetes 업그레이드가 기본적으로 관리되므로 유지보수에 대해 걱정할 필요 없이 더 중요한 업무에 집중할 수 있습니다. 클러스터와 노드가 최신 버전을 실행하도록 자동으로 업그레이드되고, 보안 위험을 최소화하며 언제든지 최신 기능에 액세스할 수 있습니다.
짧은 지연 시간 및 실시간 ML 예측
ShareChat 사용자의 대부분이 대도시 지역 외부에서 ShareChat에 액세스하고 있다고 해서 앱 로드 속도가 느리거나 메시지가 지연되는 것을 관대하게 기다려주는 것은 아닙니다. ShareChat은 사용자가 어디에 있든 우수한 성능의 경험을 제공하기 위해 노력합니다.
Cloud CDN을 사용하여 인도의 에지에 있는 다섯 곳의 Google Cloud PoP(Point of Presence) 위치에 데이터를 캐시하므로 최대한 가까이에서 사람들에게 콘텐츠를 제공하고 로드 속도를 높일 수 있습니다. Cloud CDN으로 이전한 이후 캐시 적중률이 90%에서 98.5%로 향상되어 캐시에서 콘텐츠 요청의 98.5%를 처리할 수 있게 되었습니다.
ShareChat은 전 세계를 무대로 확장해감에 따라 머신러닝을 이용해 다양한 언어의 콘텐츠로 새로운 사용자에게 도달하고자 합니다. 지역 언어로 된 실시간 데이터 세트를 처리하고 이 콘텐츠를 원하는 사람들을 정확하게 예측해 주는 새로운 알고리즘을 구축하려고 합니다. Google Cloud가 제공하는 인프라는 컴퓨팅 집약적인 워크로드를 처리하도록 최적화되어 있으므로 현재는 물론 앞으로도 유용할 것입니다.
신뢰할 수 있는 최고의 플랫폼 구축
ShareChat의 현재 시스템은 마이그레이션하기 전보다 더 우수한 성능을 갖추었지만 여기서 그치지 않고 지속적으로 새로운 기능을 구축하고 있습니다. Google의 데이터 클라우드는 원하는 것이 무엇이든 더욱 쉽고 빠르게 구축할 수 있는 유용한 서비스 생태계를 조성해 주었습니다.
Google Cloud와 파트너십을 통해 얻을 수 있었던 가장 큰 이점은 Google 엔지니어와의 소통할 수 있다는 점입니다. 문제가 되는 특정 명령문을 해결하거나 라이브러리 또는 코드 조각에서 특정 해결책을 찾으려는 경우 관련 담당팀에 바로 문의할 수 있습니다.
그 결과 확신을 가지고 진행할 수 있게 되었습니다. 문제 해결을 위한 효과적인 프로세스가 마련되어 있고 최적의 지원을 받을 수 있기 때문에 실제로 우수한 시스템을 구축할 수 있음을 확신할 수 있게 되었습니다.