리디는 국내 최초 전자책 서비스 '리디북스'를 선보이며 전자책 시장 점유율 1위 기업으로 성장하고 있다. 리디에서는 웹툰, 웹소설, 전자책 등을 다루고 있으며 그 중에서도 '실시간 랭킹' 섹션이 사용자들이 콘텐츠를 감상할 때 호출되는 감상 데이터 API를 통해 만들어진다. 아무래도 실시간 데이터를 안정적으로 처리해야 하기 때문에 kafka를 도입하게 된 거 같다. 그러면 리디에서는 이 kafka를 어떻게 사용하는지 자세히 알아보자.
기술 블로그 출처
https://ridicorp.com/story/how-to-use-kafka-in-ridi/
kafka 파이프라인 요약
예전에는 감상 데이터 API를 담당하는 서비스에서 실시간 랭킹을 담당하는 서비스의 실시간 랭킹 API를 호출하는 방식을 사용했다. 하지만 이러한 방식은 응답속도나 장애 전파 등 비효율적이다. 따라서 이를 해결하고자 kafka를 활용하여 콘텐츠 감상에 대한 이벤트를 수집하여 스트리밍하는 토픽을 통해 해결하고 있다.
감상 데이터 서비스는 이 토픽에 콘텐츠 감상 메시지를 게시하고, 실시간 랭킹 서비스는 해당 토픽을 구독하는 방식을 사용한다.
이를 통해 도서 감상 서비스는 응답속도를 향상시키고 실시간 랭킹 서비스에 대한 의존성을 없애면서 안정성을 높였다. 또한, 실시간 랭킹 서비스는 과거에는 개별적으로 처리되던 데이터를 묶어서 효율적으로 처리할 수 있게 되어 더욱 높은 효율성을 확보할 수 있었다.
kafka를 이벤트 버스로 활용함으로써 콘텐츠 감상 이벤트를 포함한 다양한 이벤트를 처리할 수 있게 되었다. 이를 통해 R-Bus 팀은 출범하였고, 고객의 행동 로그부터 내부 콘텐츠 상태변화까지 다양한 이벤트를 kafka를 통해 처리하고 있다.
애널리틱스
리디에서는 다양한 분석을 위해 여러 종류의 분석 플랫폼들이 있는데 리디 서비스와 이러한 플랫폼들 간의 데이터 통로로도 kafka를 활용하고 있다.
앱 푸시 클릭, 구매 기록 등의 정보는 Kafka를 통해 여러 플랫폼으로 전달되며, 이를 통해 분석된 정보는 실시간으로 CRM 등에 활용된다. 또한, 페이지뷰, 매출 등의 KPI 성 매트릭스는 Kafka를 통해 수집되어 시계열 데이터베이스로 저장되고, 콘텐츠 부서에서는 InfluxDB로부터 실시간 대시보드를 통해 KPI를 트래킹하고 대응한다.
작업 큐
리디에서는 kafka를 비동기 작업 큐로도 활용하여 알림 서비스를 운영하고 있다. 이 서비스는 다양한 혜택 및 신간 알림 등의 정보를 앱 푸시, 메일 등을 통해 고객에게 전달한다. 매일 수천만 건의 알림 및 수십만에서 수백만 건의 앱 푸시와 메일이 발송되는데, 이러한 대규모 작업은 기존의 REST API 방식으로 처리하기에는 적합하지 않다. 따라서 좀더 적합한 Kafka를 사용하여 작업들을 병렬로 처리함으로써 고객에게 빠르게 유용한 정보를 전달할 수 있게 되었다.
다양한 이벤트 활용
리디에서는 Kafka를 활용하여 다양한 이벤트를 실시간으로 처리하고 있다. 이 중에서도 고객이 실제로 느낄 수 있는 변화 중 하나는 포인트 지급 이벤트이다. 이벤트 기간 동안 특정 콘텐츠를 열람하거나 댓글을 남기면 포인트를 받는데, 이전에는 이벤트 종료 후 배치 작업을 통해 일괄적으로 포인트를 지급했다. 그러나 지금은 Kafka를 활용하여 감상 및 댓글 이벤트를 실시간으로 처리하고 있어, 고객들은 이벤트 참여 후 즉시 포인트를 받을 수 있게 되었다.