피드로 돌아가기
컬리 기술블로그Backend
원문 읽기
Dataflow로 컬리의 준실시간 수요 예측모델 파이프라인 구축하기 - 1편
컬리가 Apache Beam 기반 Google Dataflow로 준실시간 수요 예측 파이프라인을 구축해 BigQuery 1년치 데이터와 스트리밍 주문 데이터를 통합 처리
AI 요약
Context
컬리의 시계열 통계 모델은 1년 과거 데이터를 기반으로 수요를 예측하는데, 시시각각 변하는 고객 주문 데이터가 예측에 상당한 영향을 주므로 실시간 데이터를 모델에 빠르게 반영해야 했다. AWS MSK(Kafka)의 최신 스트리밍 데이터와 BigQuery의 모든 과거 데이터를 동시에 처리하는 준실시간 서빙 파이프라인이 필요했다.
Technical Solution
- Apache Beam 프로그래밍 모델 기반 파이프라인 설계: Batch와 Streaming 처리를 모두 지원하는 Beam으로 파이프라인 구현
- Google Dataflow 완전관리형 서비스 도입: Auto-scaling, Rebalancing을 자동화해 클라우드 리소스 최적화
- Flex 템플릿 활용: 파이프라인을 Docker 이미지로 패키징하고 GCS 버킷의 스펙 파일을 통해 재사용 가능하도록 구성
- Worker Service Account 권한 설정: roles/dataflow.admin, roles/dataflow.worker 부여 및 Dataflow Service Agent 역할 지정
- Streaming Engine 활용: 실행 단계를 Worker VM 대신 Dataflow 서비스 백엔드로 이전해 Worker 스펙 절감
- save_main_session=True 설정: Python 파이프라인의 global imports, variables, functions를 serialize 과정에서 보존
Key Takeaway
Unbounded 데이터 소스(Kafka, Pub/Sub)는 스트리밍 파이프라인, Bounded 데이터(BigQuery)는 배치 파이프라인으로 처리하되, 준실시간 요구사항에서는 배치 주기를 launcher 인스턴스 생성 시간(5분 이상) 이상으로 설정해야 실질적 효과를 얻을 수 있다. Dataflow 작업 실패 시 Worker Service Account와 Dataflow Service Agent 두 계정의 권한을 모두 확인해야 근본 원인을 파악할 수 있다.
실천 포인트
BigQuery 데이터 웨어하우스 기반 ML 모델을 준실시간으로 서빙해야 하는 팀에서는 Bounded 데이터와 Unbounded 스트리밍 데이터를 분리해 처리하되, Flex 템플릿으로 파이프라인을 패키징하면 개발 환경 설정 없이 GCS URI만으로 반복 배포할 수 있다.