안녕하세요. 오랜만에 블로그 포스팅을 작성하게 되었습니다. 자, 여기서는 제가 겪었던 가장 어려운 문제 중 하나와 이를 해결한 방법에 대한 개요를 작성하겠습니다.
백엔드 개발자로서 특히 힘들게 하는 과제는 피할 수 없습니다. 최근 PHP와 MySQL을 사용하여 광고 네트워크에서 작업하는 동안 특정 기준에 따라 게시자를 위한 CPM(Cost Per Mille)을 최적화하는 것과 관련된 복잡한 문제에 직면했습니다. 이 문제는 내 기술 능력을 테스트했고 귀중한 학습 경험을 제공했습니다. 이 게시물에서는 제가 이 문제를 어떻게 해결했는지 단계별로 설명하고 직면한 과제와 구현된 솔루션을 강조하겠습니다. 효율적으로 구현하는 방법이나 더 나은 방법에 대해 제가 얻을 수 있는 제안이 있으면 기쁠 것입니다.
이 작업은 다음 기준에 따라 게시자의 CPM을 조정하는 것이었습니다.
구현을 시작하기 전에 요구사항을 명확히 이해해야 했습니다. CPM 조정을 위한 기준과 원하는 동작을 확인하기 위해 이해관계자들과 논의했습니다. 이 초기 단계는 솔루션을 효과적으로 계획하는 데 매우 중요했습니다.
이미 데이터베이스와 테이블을 만들었고 프로젝트도 이미 진행 중이었기 때문에 기준만 추가하면 되었습니다. 클릭 추적에 필요한 정보를 저장하고 수용할 수 있도록 데이터베이스와 테이블이 설정되었는지 확인했습니다. 테이블 스키마에는 클릭 타임스탬프, IP 주소 및 국가 코드를 저장하기 위한 필드가 포함되어 있습니다(이 게시물의 목적에 그다지 중요하지 않기 때문에 포함하지 않을 다른 필드/열이 있습니다).
다음으로 사용자가 광고를 클릭할 때마다 IP 주소와 국가 코드를 가져와 저장하는 기능을 구현했습니다. 이 데이터는 클릭수 테이블에 저장되었습니다.
데이터가 수집되면 다음 단계는 기준을 확인하고 이에 따라 CPM을 조정하는 로직을 구현하는 것이었습니다.
/** * Get the count of unique IP addresses in the last 10 minutes */ $stmt = $pdo->prepare(" SELECT COUNT(DISTINCT ip_address) AS unique_ips FROM clicks WHERE date_time >= NOW() - INTERVAL 10 MINUTE "); $stmt->execute(); $unique_ips = $stmt->fetchColumn(); if ($unique_ips >= 10) { $cpm *= 1.05; } else { /** * Here, I check for clicks from the same IP address * This is in the second condition * ... **/ }
/** * Checking non-unique (repeated) IP addresses in the last 10 minutes * If the condition is true, decrease the CPM by 8% */ $stmt = $pdo->prepare(" SELECT ip_address, COUNT(*) AS click_count FROM clicks WHERE timestamp >= NOW() - INTERVAL 10 MINUTE GROUP BY ip_address HAVING click_count >= 5 "); $stmt->execute(); $repeated_ips = $stmt->fetchAll(); if (count($repeated_ips) > 0) { $cpm *= 0.92; } else { /** * Here, I check for consecutive clicks from the same country * This is in the third condition * ... **/ }
/** * Checking clicks from the same country consecutively * If the condition is true, increase the CPM by 2% */ $stmt = $pdo->prepare(" SELECT country_code FROM clicks ORDER BY timestamp DESC LIMIT 10 "); $stmt->execute(); $last_ten_clicks = $stmt->fetchAll(PDO::FETCH_COLUMN); if (count(array_unique($last_ten_clicks)) === 1) { $cpm *= 1.02; }
이 부분에서는 게시자의 CPM을 업데이트하고 이를 사용하여 특정 클릭에 대한 수익을 계산합니다.
이 솔루션을 구현함으로써 이제 광고 네트워크는 사용자의 클릭 데이터를 기반으로 CPM을 동적으로 조정합니다. 이는 게시자에게 공정하고 최적화된 수익 모델을 보장하여 광고 네트워크의 전반적인 효율성을 향상시킵니다.
저는 확장 가능하고 효율적인 시스템 구축에 열정을 갖고 있는 백엔드 개발자 Kingsley Gbutemu Kefas입니다. 나는 문제 해결자이고, 새로운 일과 일을 하는 방법을 배우는 것을 좋아합니다. 개발자로서 저는 문제, 특히 비판적으로 생각하게 만드는 복잡한 문제를 해결함으로써 동기를 부여받습니다. 나는 HNG 인턴십이 실제 프로젝트에 참여하고 업계 전문가로부터 배우면서 개발자로서 성장할 수 있는 기회라는 것을 알고 있습니다. HNG 인턴십으로 여정을 시작하고 기술 커뮤니티에 기여하게 되어 기쁩니다. 저는 이 여정이 제 기술을 연마하고 영향력 있는 프로젝트에 기여할 것이라고 믿으며 HNG Premium의 혜택을 통해 더 많은 혜택을 누릴 것이라고 확신합니다.
위 내용은 PHP 및 MySQL의 까다로운 백엔드 문제를 해결한 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!