Ruby on Rails 환경에서의 실시간 분석 시스템 구축 여정

[EN] Real-time Analytics in Rails - Mission Impossible? - Miron Marczuk

작성자
Visuality.pl
발행일
2025년 04월 07일

핵심 요약

  • 1 본 발표는 Ruby on Rails 기반의 애플리케이션에서 실시간 분석 시스템을 구축하고 운영하며 겪은 경험과 주요 도전 과제를 다룹니다.
  • 2 OLTP와 OLAP 데이터베이스의 근본적인 차이점과 롤업, 슬라이싱, 다이싱 등 핵심 분석 연산 개념을 상세히 설명합니다.
  • 3 기존 PostgreSQL 기반의 맞춤형 롤업 시스템이 가진 확장성 및 유연성 한계를 인지하고, Apache Pinot, ClickHouse와 같은 전문 분석 데이터베이스로의 전환을 모색하는 과정을 제시합니다.

도입

본 발표는 Salesloft의 엔지니어링 매니저 Miran이 Ruby on Rails 환경에서 실시간 분석 시스템을 구축하며 겪은 흥미로운 여정을 공유합니다. 본래 SQL에 대한 거부감이 있었음에도 불구하고, 회사 내의 필요성으로 인해 대규모 판매 데이터를 다루는 실시간 분석 팀에 합류하게 된 배경을 설명합니다. 그는 고객 대면형 실시간 분석, 비즈니스 인텔리전스, 리포팅 기능을 제공하는 시스템의 중요성을 강조하며, 본 발표가 단순한 기술 설명이 아닌, 함께 배우고 성장하는 과정이 되기를 바란다고 서두를 엽니다. 특히, 수백만 건의 통화 기록과 같은 방대한 데이터를 실시간으로 처리해야 하는 Salesloft의 특성상, 효율적인 분석 시스템의 필요성이 더욱 부각됩니다.

Miran은 분석 시스템의 근간을 이해하기 위해 OLTP(Online Transactional Processing)와 OLAP(Online Analytical Processing)의 차이를 명확히 설명합니다. Ruby 개발자들이 익숙한 OLTP는 개별 레코드의 읽기/쓰기 및 트랜잭션 처리에 최적화되어 있는 반면, OLAP는 대량의 레코드를 읽어 특정 컬럼의 값을 요약하고 집계하는 데 중점을 둡니다. 이는 데이터 접근 방식에서 ‘행(row)’ 중심에서 ‘열(column)’ 중심으로의 전환을 의미하며, 분석적 사고방식의 핵심이라고 강조합니다. 이어서 롤업(Rollup), 슬라이싱(Slicing), 다이싱(Dicing), 피벗(Pivot), 드릴다운(Drill-down)과 같은 주요 분석 연산들을 분석 큐브(Analytical Cube) 개념과 함께 구체적인 예시를 통해 설명하며, 이러한 연산들이 대규모 데이터 처리에서 성능을 보장하는 데 얼마나 중요한지 설명합니다.

Salesloft의 기존 시스템은 Kafka를 통해 유입되는 실시간 통화 이벤트를 처리하며, 이를 PostgreSQL 데이터베이스 내의 시간별, 일별, 월별 롤업 테이블로 집계합니다. Ruby on Rails의 after_create 콜백과 Sidekiq, Clockwork와 같은 도구를 활용하여 이벤트 발생 시 큐에 데이터를 추가하고, 주기적으로 롤업 작업을 수행합니다. 특히, 롤업되지 않은 최신 데이터와 이미 롤업된 데이터를 통합하여 사용자에게 제공하기 위해 데이터베이스 뷰(DB View)를 활용하는 복잡한 로직을 구현했습니다. 이는 PostgreSQL이 OLTP에 최적화된 관계형 데이터베이스임에도 불구하고, OLAP 기능을 모방하려 했던 시스템의 특징입니다. 그러나 이러한 맞춤형 솔루션은 수천만 건의 이벤트와 수십억 건의 통화 기록을 처리하는 규모에서 한계에 부딪혔습니다. 특정 차원(dimension)에 고정된 롤업 방식은 유연한 맞춤형 분석을 어렵게 만들었으며, PostgreSQL의 성능 문제 또한 대두되었습니다. 데이터 변경 시 롤업된 데이터를 재계산하는 복잡성과 그로 인한 고객 불만 또한 중요한 문제점으로 지적되었습니다.

결론

결론적으로, Miran은 Ruby on Rails와 PostgreSQL 기반의 맞춤형 실시간 분석 시스템이 초기 규모에서는 성공적이었으나, 확장성과 유연성 측면에서 명확한 한계에 도달했음을 인정합니다. 특히 PostgreSQL이 OLAP 워크로드에 적합하지 않다는 점이 가장 큰 문제였습니다. 이에 대한 '해피 엔딩'으로, Salesloft 팀은 Apache Pinot 또는 ClickHouse와 같은 전문적인 OLAP 데이터베이스로의 전환을 결정했습니다. 이러한 전환을 통해 개발자들은 성능 및 맞춤형 솔루션 구현의 부담에서 벗어나, 더욱 강력하고 유연한 분석 기능을 제공할 수 있을 것으로 기대합니다. 이는 Ruby on Rails가 아닌, 데이터 분석에 특화된 새로운 기술 스택으로의 전환을 의미하며, 향후 더 큰 규모의 분석 요구사항에 대응하기 위한 필수적인 단계임을 시사합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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