classABTestingService{constructor(config){this.experiments=newMap();this.initialize(config);}initialize(config){config.experiments.forEach(exp=>{this.experiments.set(exp.name,{variants:exp.variants,traffic_allocation:exp.traffic_allocation,metrics:exp.metrics,start_date:newDate(exp.start_date),end_date:newDate(exp.end_date)});});}assignVariant(userId,experimentName){constexperiment=this.experiments.get(experimentName);if(!experiment)returnnull;// 해시 기반 사용자 할당
consthash=this.hashString(userId+experimentName);constnormalizedHash=hash%100;letaccumulator=0;for(const[variant,allocation]ofObject.entries(experiment.traffic_allocation)){accumulator+=allocation;if(normalizedHash<accumulator){returnvariant;}}}trackMetric(experimentName,userId,metricName,value){// 지표 추적 및 저장
constvariant=this.assignVariant(userId,experimentName);if(!variant)return;this.storeMetric({experiment:experimentName,variant:variant,user:userId,metric:metricName,value:value,timestamp:newDate()});}}