피드로 돌아가기
토스 기술블로그Backend
원문 읽기
고객은 절대 기다려주지 않는다: 빠른 데이터 서빙으로 고객 만족도를 수직 상승 시키는 법
토스페이먼츠가 CQRS 아키텍처와 Apache Druid, StarRocks를 결합해 수십억 건 거래 데이터를 sub-second 응답으로 조회 가능하게 전환
AI 요약
Context
MSA 환경으로 전환하면서 도메인 간 데이터 결합이 필요했으나 기존 RDB 기반 조회 방식으로는 처리 불가능했다. 거래량이 2022년 대비 2024년 약 2배 증가하면서 대규모 범위 조회, 문자열 검색, 다중 조인과 집계 연산이 동시에 필요했다. 원장 테이블에서 직접 처리 시 대량 데이터 스캔으로 인한 성능 저하가 불가피했다.
Technical Solution
- 읽기와 쓰기 분리(CQRS): 명령(쓰기)은 Oracle/MySQL 원장에서, 조회(읽기)는 Druid를 통해 별도 처리
- Apache Druid 도입: 시계열 데이터 최적화 및 모든 컬럼 자동 Bitmap Index 생성으로 SQL 기반 OLAP 쿼리 지원
- 메시지 발행 방식 채택: CDC 대신 도메인 팀에서 완성된 데이터를 Kafka를 통해 직접 발행해 도메인 의존성 감소
- StarRocks로 마이그레이션: Druid 운영 복잡도와 멱등성 처리 한계를 극복하기 위해 Prefix Index 기반 테이블 최적화 적용
- 통합 데이터 서빙: Kafka + Flink를 통해 변경사항을 실시간으로 StarRocks에 반영, 검색 필요 데이터는 Elasticsearch로 별도 색인
Impact
- 응답 속도: 최적화된 StarRocks는 최적화 이전 대비 약 77.3% 향상
- CPU 사용률: 최적화 전 StarRocks 대비 약 81.2% 감소
- 데이터 스캔 범위: RawRowsRead 약 99.68% 감소
- 클라우드 비용: 월 약 5천만 원 이상 절감 (Computing과 Storage 분리, Spot Instance 활용)
- 실시간성: 페이지 새로고침 시마다 실시간 매출 확인 가능
Key Takeaway
대규모 데이터 서빙은 단일 엔진이 아닌 도메인 이해를 바탕으로 각 기술의 강점을 조합하는 문제다. "적게 읽도록 설계하면(스캔 최소화), 빠르고 효율적이며 정확해진다"는 원칙이 구체적인 성능 개선(Sort Key 기반 정렬, Prefix Index, Data Skipping)으로 실현된다.
실천 포인트
MSA 환경에서 다중 도메인 조회가 필요한 서비스에서 메시지 발행 방식으로 도메인별 완성된 데이터를 수집하고, 시계열 기반 집계는 Druid/StarRocks, 문자열 검색은 Elasticsearch로 역할을 분리하면 도메인 의존성을 최소화하면서 실시간 조회 성능을 확보할 수 있다.