#Backend

광고 성과 데이터 StarRocks 도입기

광고 성과 데이터 StarRocks 도입기
01

Summary

실시간 광고 성과 데이터, MySQL 배치에서 StarRocks로 갈아탄 진짜 이유

퀸잇이 대규모 트래픽 속에서 DB 부하를 차단하고 S3 비용을 95%나 절감한 StarRocks 아키텍처 튜닝 여정

이 글은 퀸잇의 광고 성과 데이터 시스템이 겪은 확장성 한계를 극복하기 위해 OLAP DB인 StarRocks를 도입한 과정을 소개합니다. 데이터 유실과 비용 폭증 등의 실전 문제를 external table 전략, shared-nothing 구조 전환, 정교한 Materialized View 설계를 통해 해결한 시니어 엔지니어들의 생생한 노하우를 담고 있습니다.

  • 01BigQuery, ClickHouse와의 비교분석을 거쳐 Glue/Iceberg 연동 및 MySQL 호환성이 우수한 StarRocks 최종 채택
  • 02운영 안정성과 엔진 비종속성을 확보하기 위해 원천 데이터를 S3(Apache Iceberg)에 유지하는 External Table 전략 구현
  • 03실시간 갱신으로 인한 S3 API 비용 폭증을 해결하기 위해 shared-data에서 shared-nothing 클러스터로 신속하게 구조 전환
  • 04Materialized View 설계 시 이벤트 발생 시각 컬럼을 파티션 키로 삼아 변경된 파티션만 갱신하는 Incremental Refresh 최적화 달성
  • 05동일한 Colocation Group 설정을 통한 Colocate Join으로 분산 노드 간 네트워크 전송(Shuffle)을 완벽히 차단하여 조회 성능 극대화

RECOMMENDATION

대규모 실시간 집계 연산이 필요하거나 RDBMS 기반 배치로 인해 시스템 부하 및 정합성 이슈를 겪고 있는 백엔드 및 데이터 엔지니어에게 분산 OLAP 설계 지침서로 적극 추천합니다.

The Problem

기존 퀸잇의 광고 성과 제공 시스템은 MySQL 배치 집계 및 Kafka consumer 구조로 동작하여 트래픽 증가 시 확장성이 부족했고, 지속적인 DB 쓰기 부하 증가, 간헐적인 집계 누락 및 장애 복구의 어려움을 겪고 있었습니다.

The Solution

대용량 데이터 집계와 분석에 특화된 OLAP DB인 StarRocks를 도입하고 원천 데이터를 S3와 AWS Glue 기반의 external table로 조회하게 설계했으며, 비용 효율을 위해 클러스터 아키텍처를 shared-nothing으로 구성하고 파티셔닝/버켓팅 기반의 Materialized View를 구축했습니다.

The Result

광고 서버의 DB 부하가 크게 감소하고 집계 누락이 차단되었으며 장애 복구가 매우 쉬워졌습니다. 특히 shared-data에서 shared-nothing 아키텍처로 전환하여 빈번한 S3 API 호출을 줄임으로써 S3 관련 비용을 기존 대비 약 95% 절감했습니다.

Trade-off

원천 데이터를 엔진 내부에 적재하지 않고 외부에 두는 external table 전략을 취했기 때문에 내부 로컬 스토리지를 조회하는 방식에 비해 원격 조회 성능 면에서 불리할 수 있으며, shared-nothing 전환으로 인해 로컬 디스크 및 인프라를 직접 관리해야 하는 운영 부담이 따릅니다.

03

Key Concepts

Concept · 01

StarRocks

대규모 데이터 분석 및 실시간 조회를 처리하기 위해 설계된 고성능 분산 OLAP 데이터베이스로, 강력한 비용 기반 옵티마이저(CBO)와 뛰어난 조인 연산 성능을 제공합니다.

  • 기존 백엔드의 드라이버나 의존성 교체를 최소화하기 위해 MySQL wire protocol 호환성을 활용해 연동하였습니다.
  • 운영 환경에 맞춰 연산 노드가 로컬 스토리지를 갖는 shared-nothing 아키텍처로 구성하였습니다.
Concept · 02

External Table 전략

데이터를 데이터베이스 내부 스토리지에 직접 적재하지 않고, S3나 Glue와 같은 외부 데이터 레이크의 메타데이터를 활용하여 실시간으로 원격 조회하는 방식입니다.

  • S3에 Apache Iceberg 포맷으로 적재된 광고 원천 데이터를 StarRocks에서 external table로 바라보도록 설계했습니다.
  • StarRocks 엔진에 장애가 생기거나 클러스터를 새로 세우는 과정에서도 원천 데이터 유실 우려 없이 안정적인 인프라 전환을 도왔습니다.
Concept · 03

Colocate Join

분산 데이터베이스 환경에서 조인 키가 동일한 테이블의 데이터 블록(태블릿)들을 물리적으로 동일한 노드에 강제 배치하여, 네트워크 전송 비용 없이 노드 내부에서 고속 조인을 수행하는 기술입니다.

  • ad_interaction과 ad_purchase 관련 MV 정의 시 캠페인 ID를 버켓팅 키로 잡고 동일한 Colocation Group으로 지정했습니다.
  • 네트워크 셔플(Shuffle)이나 브로드캐스트 오버헤드를 근본적으로 차단하여 조회 성능을 극대화했습니다.