1. 문제점 및 기존 방식의 한계
수십억 건의 데이터 동기화에 기존 Model.reindex
및 Sidekiq 방식은 7일이 소요되며 Redis/Sidekiq에 과부하를 주고 Elasticsearch 활용률이 낮았습니다.
2. Kafka 기반 솔루션 아키텍처 및 Ruby 활용
MySQL, Redis, Elasticsearch와 함께 Kafka를 핵심으로 하는 아키텍처를 설계했습니다. Kafka는 쓰기 최적화, 메시지 재처리, 유연한 스케일링, 순차 처리 보장 등의 이점을 제공합니다. Ruby 환경에서는 racecar
와 delivery_boy
Gem을 활용하여 안정적이고 성능 좋은 Kafka 연동을 구현했습니다.
3. 개선된 데이터 처리 흐름
Rails Active Record로 DB 데이터를 읽어 경량화된 Ruby Kafka 컨슈머를 통해 Kafka에 발행합니다. 이후 별도 컨슈머 그룹이 메시지를 받아 Elasticsearch 페이로드를 구성하고, 최종적으로 Elasticsearch 클러스터에 데이터를 전송합니다. 실시간 변경도 Active Record 콜백을 통해 즉각 동기화됩니다. 이 흐름은 여러 Elasticsearch 클러스터로 데이터를 유연하게 보낼 수 있습니다.
4. 성공적인 결과 및 Ruby의 강점
이 솔루션으로 동기화 시간을 7일에서 20시간으로 단축했습니다. Ruby의 뛰어난 테스트 용이성, Active Record의 데이터 평탄화, 강력한 계측(Instrumentation) 지원, 그리고 MySQL, Kafka, Redis, Elasticsearch 등 다양한 서비스와의 쉬운 통합이 프로젝트 성공에 결정적이었습니다.