피드로 돌아가기
랭킹 시스템 개편기
올리브영 테크블로그올리브영 테크블로그
Backend

랭킹 시스템 개편기

올리브영이 Oracle 프로시저 기반 랭킹 시스템을 AWS Glue + Athena + Step Function 기반 Serverless 아키텍처로 전환해 데이터 집계 중복 제거 및 확장성 확보

2023년 11월 7일12intermediate

Context

기존 Oracle 프로시저 방식의 랭킹 시스템은 카테고리별 랭킹을 각각 산출 후 Merge하는 구조로, 19개 카테고리 이상으로 세분화할 경우 동일한 타겟 데이터 집계가 반복 발생했다. 랭킹 종류 추가마다 DB 자원 소비 비효율이 증가하고, 여러 테이블 조인으로 인해 산출 근거 파악이 어려웠으며, 배치 수행 시간 지연 문제가 예상되었다.

Technical Solution

  • 데이터 수집 및 변환 파이프라인을 AWS Glue로 구성: 온라인몰 RDB에서 판매 데이터를 추출하여 Parquet 형식으로 변환 후 S3에 적재
  • 랭킹 집계 엔진을 Amazon Athena로 변경: S3의 Parquet 파일에 대해 다양한 기준(카테고리, 시간 범위 등)의 랭킹 쿼리를 실행하고 결과를 CSV로 저장
  • 워크플로우 오케스트레이션을 AWS Step Function으로 구현: Glue ETL 작업 → Athena 쿼리 실행의 순차적 파이프라인을 상태 기계로 정의하고 EventBridge 또는 수동 트리거로 실행
  • Glue Crawler를 활용한 데이터 카탈로그 자동화: S3 Raw 데이터의 스키마를 자동 스캔하여 메타데이터 관리
  • 보안 강화를 위해 DB 접속 정보를 AWS Secrets Manager로 관리: 스크립트에서 Boto3로 동적 조회하여 하드코딩 제거
  • 동적 경로 설정으로 S3 저장 구조 자동화: ETL 수행 시간 기준(년/월/일/시)으로 폴더 자동 생성하여 이력 관리 용이

Key Takeaway

데이터 집계와 연산 자원을 분리하고 Serverless 아키텍처로 전환함으로써 온프레미스/클라우드 애플리케이션 서버 유지의 오버헤드를 제거하면서도 준실시간 랭킹 업데이트를 구현할 수 있다. 이는 스토리지(S3 + Parquet)와 컴퓨팅(Athena)의 커플링을 최소화하여 향후 Open Search 연동, 실시간 Queuing 도입, 분석 서비스 연동 등의 확장이 용이한 구조를 제공한다.


대규모 이커머스 서비스에서 다양한 기준의 랭킹을 빈번히 산출해야 하는 경우, AWS Glue + Athena 조합을 사용하면 동일 데이터에 대한 반복 집계를 피하면서 여러 랭킹을 병렬 처리할 수 있다. 특히 Step Function의 JSON Path 파라미터화를 활용하면 동적 필터 조건(시간 범위, 카테고리 등)을 런타임에 주입하여 단일 쿼리 템플릿으로 다양한 랭킹 조합을 지원할 수 있다.

원문 읽기