티스토리 뷰

실험 플랫폼 이란?: 실험은 대조군(A)과 실험군(B)을 나누어 유입되는 사용자들의 반응을 통해 어떤 방법이 가장 효과적인지를 검증하는 과정, 실험 플랫폼을 이 과정을 자동화하는 플랫폼

크게 실험 metadata를 설정하는 admin, 집계 및 적재 component, group 배정 component 로 나뉨

 

서버 파트 아키텍처

 

실험 플랫폼 어드민

서비스별로 실험이나 기능 플래그를 생성하고 관리

제공하는 기능은 아래와 같음

  • 상태 정보와 기본 정보 관리
    • 각 실험은 준비, 일시정지, 진행 중, 종료, 보관 이라는 상태를 가짐
      • 준비 상태 : 기본 그룹 반환
      • 진행 중: 설정된 실험 조건에 따른 그룹 분배 결과 반환
      • 종료: 설정된 위너를 반환 (A, B 중 효과적이라고 판별된 그룹)
      • 보관: 보관 상태의 실험은 수정 불가, 그룹 분배 요청 시 기본 그룹 반환
  • QA를 위한 실험 강제 할당
  • 실험 조건: 실험에 존재하는 그룹의 비율 및 실험에 참여할 대상과 실험의 슬롯 범위를 지정
    • 사용자를 어떤 그룹에 분배할지 결정, 그룹 분배 결과는 실험 조건이 변경되지 않는 한 같은 그룹 분배 결과를 보장
    • 일관된 그룹분배 결과를 보장하기 위해 슬롯 할당 알고리즘 사용 - 슬롯 할당에는 사용자의 식별자 값(회원번호, 디바이스 아이디)을 사용하여 해시값을 추출한 뒤 modular 연산을 적용한 뒤 결과값에 1을 더해 슬롯값 할당
  • 실험 대상 범위와 실험 간 충돌: 동시에 여러 실험을 진행하는 경우 실험 대상 범위 slot을 다르게 설정하면 실험 간 충돌로 인해 결과가 오염되는 것을 방지 가능
    • A사 사례: 실험을 sequential 하게 진행한다 ..?
    • 오염 방지를 위해 어떤 방법론이 있는지?
  • 실험 이벤트 조회: 실험에서 발생한 모든 이벤트 유형을 조회하거나 등록, 수집된 이벤트 데이터를 통해 사용자의 클릭률, 전환율을 계산. 다음에 소개될 데이터 수집 및 집계 pipeline에서 일정 시간마다 실험 내에서 발생한 이벤트 유형을 추출하고 중복을 제거해 실험 플랫폼 DB에 저장함
  • 실험 목표 설정: 분자를 측정 지표, 분모를 기준 지표로 하여 목표를 설정할 수 있음. 분자 이벤트: 주문 이벤트(OrderEvent), 분모 이벤트: 장바구니 진입 이벤트(CartAccessEvent) 로 설정하면 장바구니 진입 이후 주문 이벤트 발생 비율을 구할 수 있음
  • 실험 결과: 그룹별 전환율과 A 그룹 대비 증감률 등을 확인

그룹 분배 서버

그룹 분배 서버는 사용자 정보(식별자 및 태그 정보 등)와 실험 키를 넘겨주면 사용자가 어떤 그룹에 분배되었는지 결과를 내려주는 역할을 수행

 

각 마름모꼴 요소는 각 정책을 의미

그룹 분배 결과를 얻기 위해서는 실험이나 기능 플래그 데이터(그룹 비율, 강제 할당 정보) 가 필요한데 이 정보는 Redis 에 저장되어 있음. 매번 Redis 에 요청을 보내는 대신 Local caching 을 적용하여 성능 향상 가능

 

이벤트 적재 서버

로그 수집하고 있지 않은 서비스도 API 를 통해 이벤트 데이터를 적재할 수 있도록 서비스 제공

이벤트 적재 데이터를 받아 로그로 남기고 airflow의 dag를 통해 실험 플랫폼 이벤트 테이블로 추출됨

데이터 추출/집계 아키텍쳐

다양한 서비스들의 로그 데이터를 실험 플랫폼 이벤트 테이블(Glue Data Catalog Table)로 추출하거나 필요한 데이터를 실험 플랫폼 데이터베이스(RDS)로 전달하는 작업

airflow dag 의 task로 다음과 같은 추출/집계 작업을 진행하게 됨

 

  • Hive 테이블이란?
    • 데이터는 파일로 저장되지만, 테이블처럼 쿼리 가능
    • 실험 로그, 사용자 행동 데이터, 이벤트 등 배치 분석용으로 적합
    • PARTITION, Parquet, Metastore 등으로 성능 최적화 가능
  • Hive 테이블은 HDFS에 저장된 대용량 로그 데이터를 SQL처럼 쉽게 다루기 위한 추상 구조

실험 플랫폼 이벤트 데이터 추출

서비스와 이벤트 적재 API를 통해 쌓인 로그 정보 기반으로 실험에 필요한 이벤트 데이터를 추출하고 이벤트 테이블에 적재(Hive Table)

실험 플랫폼 이벤트 테이블을 통해 실험에서 발생한 이벤트 유형을 추출하거나 결과를 집계할 수 있음

실험 이벤트 유형 추출

실험 플랫폼 이벤트 테이블에 적재된 데이터를 기반으로 중복이 제거된 실험 별 이벤트 유형(장바구니 진입, 주문 전환 등)을 실험 플랫폼 데이터베이스(실험 플랫폼 RDB)에 적재

실험 이벤트 테이블 → 중복 제거 → RDB 저장.

RDB에 적재하여 어드민에서 실험에서 발생한 이벤트 유형 목록 확인 가능

실험 결과 데이터 집계와 적재

  • 실험 플랫폼 RDB에 저장된 실험 데이터를 Hive 테이블로 적재
  • 실험 플랫폼 RDB에 저장된 실험 목표 데이터를 Hive 테이블로 적재
  • 실험 플랫폼 이벤트테이블에 실험 테이블 + 실험 목표 테이블을 결과 집계시 활용하여 RDB에 결과 데이터 적재

 

 

넷플릭스 예시:

  • AB Server: 클라이언트(App)가 사용자 할당 요청을 보내면 사용자에게 어떤 실험 그룹을 할당할지 응답
  • 저장소: Cassandra + EVCache
    • Cassandar: 실험 메타데이터 및 유저 할당 정보 저장
    • EVCache: 캐시 기능, Cassandra 직접 쿼리 막아서 성능 향상
  • 데이터 집계:
    • Kafka → Hive: 데이터 적재 및 분석
    • Spark Streaming은 Kafka로부터 데이터를 실시간 ingest
    • 변환 후 Elasticsearch에 저장 → 실시간 시각화 플랫폼 ABlaze에서 사용

 

 

[참고]

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함