Ruby를 활용한 수십억 데이터베이스 레코드 처리: 7일에서 20시간으로 단축

Celso Fernandez - Ruby in the Billions

작성자
Friendly rb
발행일
2025년 07월 01일

핵심 요약

  • 1 Ruby 언어와 그 강력한 생태계를 활용하여 수십억 건의 데이터베이스 레코드 동기화 시간을 7일에서 20시간으로 획기적으로 단축했습니다.
  • 2 Kafka를 핵심 아키텍처로 도입하고 Ruby의 Racecar 및 Delivery Boy Gem을 사용하여 대규모 데이터 처리 및 Elasticsearch 동기화 문제를 성공적으로 해결했습니다.
  • 3 분산 시스템 환경에서 Ruby의 뛰어난 테스트 용이성, Active Record의 데이터 평탄화 기능, 그리고 강력한 계측(instrumentation) 지원이 프로젝트 성공에 결정적인 역할을 했습니다.

도입

본 강연은 수십억 건의 데이터베이스 레코드 동기화 과정에서 발생한 심각한 성능 문제를 Ruby 언어와 분산 시스템 아키텍처를 통해 해결한 실제 사례를 다룹니다. 기존에는 데이터베이스와 Elasticsearch 클러스터 간 동기화에 7일이 소요되어 비즈니스에 큰 지장을 초래했습니다. 강연자는 Ruby에 대한 신뢰를 바탕으로, 더 빠른 언어 전환 대신 Ruby의 강점을 활용하여 이 복잡한 문제를 극복하는 과정을 상세히 설명합니다.

1. 문제점 및 기존 방식의 한계

수십억 건의 데이터 동기화에 기존 Model.reindex 및 Sidekiq 방식은 7일이 소요되며 Redis/Sidekiq에 과부하를 주고 Elasticsearch 활용률이 낮았습니다.

2. Kafka 기반 솔루션 아키텍처 및 Ruby 활용

MySQL, Redis, Elasticsearch와 함께 Kafka를 핵심으로 하는 아키텍처를 설계했습니다. Kafka는 쓰기 최적화, 메시지 재처리, 유연한 스케일링, 순차 처리 보장 등의 이점을 제공합니다. Ruby 환경에서는 racecardelivery_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 등 다양한 서비스와의 쉬운 통합이 프로젝트 성공에 결정적이었습니다.

결론

본 사례는 Ruby가 웹 개발을 넘어 대규모 분산 시스템 및 데이터 처리 문제 해결에 매우 강력하고 효율적인 도구임을 입증합니다. Ruby의 풍부한 Gem 생태계와 안정적인 개발 환경은 복잡한 통합 및 계측 작업을 간소화하여 개발 시간과 비용을 절감했습니다. 이 프로젝트는 Ruby를 통해 안정적이고 고성능 솔루션을 구축할 수 있음을 보여주며, 개발자들에게 중요한 시사점을 제공합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!