"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP 및 MySQL의 까다로운 백엔드 문제를 해결한 방법

PHP 및 MySQL의 까다로운 백엔드 문제를 해결한 방법

2024-07-31에 게시됨
검색:163

How I Solved a Challenging Backend Problem with PHP & MySQL

안녕하세요. 오랜만에 블로그 게시물을 작성하게 되었습니다. 음, 여기서는 제가 직면한 가장 어려운 문제 중 하나와 이를 해결한 방법에 대한 개요에 대해 쓰고 있습니다.

백엔드 개발자로서 특히 힘들게 하는 과제는 피할 수 없습니다. 최근 PHP와 MySQL을 사용하여 광고 네트워크에서 작업하는 동안 특정 기준에 따라 게시자를 위한 CPM(Cost Per Mille)을 최적화하는 것과 관련된 복잡한 문제에 직면했습니다. 이 문제는 내 기술 능력을 테스트했고 귀중한 학습 경험을 제공했습니다. 이 게시물에서는 제가 이 문제를 어떻게 해결했는지 단계별로 설명하고 직면한 과제와 구현된 솔루션을 강조하겠습니다. 효율적으로 구현하는 방법이나 더 나은 방법에 대해 제가 얻을 수 있는 제안이 있으면 기쁠 것입니다.

문제

작업은 다음 기준에 따라 게시자의 CPM을 조정하는 것이었습니다.

  1. 지난 10분 동안 10개의 다른 IP 주소에서 클릭이 발생한 경우 5% 증가.
  2. 지난 10분 동안 동일한 IP 주소에서 클릭이 5번 발생한 경우 8% 감소합니다.
  3. 동일 국가에서 10회 연속 클릭이 발생하면 2% 증가합니다.

솔루션 여정

1단계: 요구 사항 이해

구현을 시작하기 전에 요구 사항을 명확하게 이해해야 했습니다. CPM 조정을 위한 기준과 원하는 동작을 확인하기 위해 이해관계자들과 논의했습니다. 이 초기 단계는 솔루션을 효과적으로 계획하는 데 매우 중요했습니다.

2단계: 데이터베이스 설정

이미 데이터베이스와 테이블을 만들었고 프로젝트도 이미 진행 중이었기 때문에 기준만 추가하면 되었습니다. 클릭 추적에 필요한 정보를 저장하고 수용할 수 있도록 데이터베이스와 테이블이 설정되었는지 확인했습니다. 테이블 스키마에는 클릭 타임스탬프, IP 주소 및 국가 코드를 저장하기 위한 필드가 포함되어 있습니다(이 게시물의 목적에 그다지 중요하지 않기 때문에 포함하지 않을 다른 필드/열이 있습니다).

3단계: 클릭 데이터 캡처

다음으로 사용자가 광고를 클릭할 때마다 IP 주소와 국가 코드를 가져와 저장하는 기능을 구현했습니다. 이 데이터는 클릭수 테이블에 저장되었습니다.

4단계: 기준 확인 구현

데이터가 캡처된 후 다음 단계는 기준을 확인하고 그에 따라 CPM을 조정하는 로직을 구현하는 것이었습니다.

  1. 고유 IP 주소 확인 중 그룹의 각 행에 대한 표현식을 평가하고 null이 아닌 고유한 값의 수를 반환하는 COUNT 함수와 DISTINCT 키워드를 사용하여 지난 10분 동안의 고유 IP 주소를 계산합니다. .
/** 
 * 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
     * ...
     **/
}
  1. 반복되는 IP 주소 확인 그런 다음 SQL COUNT 함수를 사용하여 지난 10분 동안 반복되거나 고유하지 않은 IP 주소를 확인합니다.
/** 
 * 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
     * ...
     **/
}
  1. 동일 국가의 연속 클릭 확인 여기서는 동일한 국가의 연속 클릭을 확인하는 세 번째 기준을 적용합니다.
/** 
 * 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;
}

5단계: CPM 업데이트

이 부분에서는 게시자의 CPM을 업데이트하고 이를 사용하여 특정 클릭에 대한 수익을 계산합니다.

결과

이 솔루션을 구현함으로써 이제 광고 네트워크는 사용자의 클릭 데이터를 기반으로 CPM을 동적으로 조정합니다. 이는 게시자를 위한 공정하고 최적화된 수익 모델을 보장하여 광고 네트워크의 전반적인 효율성을 향상시킵니다.

나 소개와 왜 HNG 인턴십인가요?

저는 확장 가능하고 효율적인 시스템 구축에 열정을 갖고 있는 백엔드 개발자 Kingsley Gbutemu Kefas입니다. 나는 문제 해결자이고, 새로운 일과 일을 하는 방법을 배우는 것을 좋아합니다. 개발자로서 저는 문제, 특히 비판적 사고를 하게 만드는 복잡한 문제를 해결함으로써 동기를 부여받습니다. 저는 HNG 인턴십이 실제 프로젝트에 참여하고 업계 전문가로부터 배우면서 개발자로서 성장할 수 있는 기회라는 것을 알고 있습니다. HNG 인턴십으로 여정을 시작하고 기술 커뮤니티에 기여하게 되어 기쁩니다. 저는 이 여정이 제 기술을 연마하고 영향력 있는 프로젝트에 기여할 것이라고 믿으며 HNG Premium의 혜택을 통해 더 많은 혜택을 누릴 것이라고 확신합니다.

릴리스 선언문 이 글은 https://dev.to/cyberking99/solving-a-challenging-backend-problem-with-php-h0l?1에서 복제됩니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3