SQL과 dry-struct를 활용한 확장 가능한 Rails 대시보드

Rails Dashboards that scale – with SQL and dry-struct - Philippe Creux

작성자
발행일
2025년 07월 09일

핵심 요약

  • 1 복잡한 Rails 대시보드 구축 시 ActiveRecord 대신 SQL CTE를 활용하는 것이 효율적입니다.
  • 2 SQL 쿼리 결과를 dry-struct로 매핑하여 강력한 타입 안정성과 객체 지향적인 접근을 제공합니다.
  • 3 이 방식은 데이터 소스에 구애받지 않는 유연한 대시보드 설계 및 테스트를 가능하게 합니다.

도입

본 아티클은 Ruby on Rails 환경에서 확장 가능하고 성능이 뛰어난 대시보드를 구축하기 위한 효과적인 접근 방식을 제시합니다. 특히, 복잡한 보고서 및 대시보드 쿼리에 ActiveRecord 대신 원시 SQL과 Common Table Expressions(CTEs)를 활용하고, `dry-struct` 젬을 통해 쿼리 결과를 강력한 타입의 Ruby 객체로 변환하는 방법론을 강조합니다. 이는 데이터 변환 및 조작의 효율성을 극대화하며, 코드의 가독성, 유지보수성, 그리고 테스트 용이성을 향상시키는 데 기여합니다.

아티클은 복잡한 보고서 생성 시 원시 SQL(특히 CTE)이 ActiveRecord보다 우월한 이유를 설명합니다. CTE는 임시 뷰와 유사하게 작동하여 다단계 데이터 변환을 가능하게 하며, 운영 데이터를 보고서에 적합한 형식으로 효과적으로 전환하는 데 필수적입니다. ‘팀별 독자 수’ 보고서 예시를 통해 message_readership, message_team_metrics, team_readership과 같은 여러 CTE를 사용하여 데이터를 점진적으로 정제하는 과정을 시연합니다. 최종 SQL 쿼리 결과는 dry-struct 객체(TeamReadership)로 매핑되어 타입 안정성을 제공하고, 뷰 레이어에서 일반 해시를 다루는 것보다 훨씬 쉽게 데이터를 조작할 수 있도록 합니다.

더 나아가, 아티클은 전체, 메시지별, 팀별 지표를 포함하는 더 복잡한 대시보드 예시를 제시합니다. 이 대시보드는 ‘Staging CTEs’와 ‘Dashboard CTEs’라는 두 단계의 CTE 접근 방식을 사용하여 구현되며, Postgres의 JSON 함수를 활용하여 모든 집계된 지표를 단일 JSON 문서로 반환합니다. 이 JSON 출력은 중첩된 dry-struct 객체(MessageMetric, TeamMetric, OverallMetric, Dashboard)로 변환되어 Ruby에서 완전히 구조화되고 타입이 검증된 대시보드 객체를 생성합니다.

또한, 기존 ActiveRecord 스코프를 SQL 쿼리에 통합하여 비즈니스 로직 중복을 방지하는 방법과, 복잡한 SQL 쿼리의 성능을 최적화하기 위한 전략(초기 필터링, CTE 간 필터 중복, CTE를 임시 테이블 및 인덱스로 변환)을 제공합니다.

dry-struct의 가장 큰 장점 중 하나는 데이터 소스로부터 데이터 형태를 분리하는 능력입니다. dry-struct 객체는 실시간 SQL 쿼리, 데이터 웨어하우스(Redshift, BigQuery, SnowFlake), 수동으로 작성된 YAML/JSON 테스트 데이터, 또는 Faker 기반의 데모 환경 생성기 등 다양한 소스에서 채워질 수 있습니다. 이러한 유연성은 실제 데이터 없이 대시보드를 설계하고 테스트하며, 작동하는 데모를 쉽게 제공하고, 단위 테스트 시 데이터베이스 목업 없이 테스트 값을 사용하여 구조체를 인스턴스화할 수 있게 합니다.

결론

결론적으로, 이 아티클은 Rails에서 고성능의 구조화된 대시보드를 구축하는 데 있어 SQL CTE의 강력한 데이터 변환 능력, ActiveRecord 스코프를 통한 비즈니스 로직 재사용, 그리고 `dry-struct`를 통한 견고한 타입 안전성 및 중첩 객체 매핑의 중요성을 강조합니다. JSON blob을 사용하여 중첩된 지표를 전송하는 기능은 이 접근 방식을 더욱 강화합니다. 이 방법론은 확장성과 효율성을 보장할 뿐만 아니라, 데이터 소싱에 있어 놀라운 유연성을 제공하여 복잡한 대시보드의 개발 및 테스트 과정을 현저히 간소화하고 신뢰성을 높여줍니다. 이는 데이터가 프로덕션 데이터베이스, 데이터 웨어하우스 또는 시뮬레이션된 테스트 데이터에서 오든 관계없이 동일하게 적용됩니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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