PHP 실무

반복 SQL 자동화 팁

프리터코더 2026. 10. 23. 14:59

"매일 아침 어제 주문 현황 엑셀로 뽑아주세요."

매일 똑같은 작업 반복 중입니다. 작은 자동화로 큰 차이를 만듭니다.

레거시 시스템에는 "자동 리포트" 기능이 없는 경우가 많습니다. 담당자가 매일 phpMyAdmin에 들어가서 쿼리 복사 => 실행 => 결과 복사 => 엑셀에 붙여넣기를 반복합니다. 하루 10분씩 소모, 1년이면 60시간입니다.

간단 PHP 스크립트로 자동화

예제 1: 매일 주문 현황 CSV 생성

daily_report.php

<?php
$conn = mysqli_connect('localhost', 'user', 'pass', 'dbname');
mysqli_set_charset($conn, 'utf8mb4');

$yesterday = date('Y-m-d', strtotime('-1 day'));
$query = "SELECT order_id, customer_name, product, price, order_date 
            FROM orders 
            WHERE DATE(order_date) = '$yesterday'";

$result = mysqli_query($conn, $query);

$filename = "orders_" . $yesterday . ".csv";
$fp = fopen($filename, 'w');

// CSV 헤더
fputcsv($fp, ['주문번호', '고객명', '상품', '금액', '주문일시']);

while ($row = mysqli_fetch_assoc($result)) {
    fputcsv($fp, $row);
}

fclose($fp);
echo "CSV 생성 완료: $filename\n";
?>

cron으로 매일 실행

0 9 * * * /usr/bin/php /path/to/daily_report.php

매일 오전 9시에 자동 실행되며 CSV 파일 생성

예제 2: 이메일로 자동 발송

<?php
// 위 스크립트에 이메일 발송 추가
mail('manager@company.com', 
        '어제 주문 현황', 
        '첨부 파일 확인하세요.',
        'From: system@company.com',
        ['-f첨부파일' => $filename]);
?>

예제 3: 엑셀 파일 생성 (PHPExcel)

require 'PHPExcel.php';
$excel = new PHPExcel();
$sheet = $excel->getActiveSheet();

$row = 1;
$sheet->setCellValue('A'.$row, '주문번호');
$sheet->setCellValue('B'.$row, '고객명');

while ($data = mysqli_fetch_assoc($result)) {
    $row++;
    $sheet->setCellValue('A'.$row, $data['order_id']);
    $sheet->setCellValue('B'.$row, $data['customer_name']);
}

$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$writer->save('report.xlsx');

Windows 작업 스케줄러 (cron 없을 때)

제어판 => 작업 스케줄러 => 작업 만들기:

프로그램: C:\php\php.exe
인수: C:\www\daily_report.php
트리거: 매일 오전 9시

웹 기반 간단 대시보드

dashboard.php

<h1>오늘 통계</h1>
<?php
$conn = mysqli_connect(...);
$today_orders = mysqli_fetch_assoc(mysqli_query($conn, "SELECT COUNT(*) as cnt FROM orders WHERE DATE(order_date) = CURDATE()"))['cnt'];
$today_revenue = mysqli_fetch_assoc(mysqli_query($conn, "SELECT SUM(price) as sum FROM orders WHERE DATE(order_date) = CURDATE()"))['sum'];
?>
<p>오늘 주문: <?= $today_orders ?>건</p>
<p>오늘 매출: <?= number_format($today_revenue) ?>원</p>

담당자가 브라우저에서 dashboard.php 접속하면 바로 확인

Google Sheets 연동

Google Sheets API로 자동으로 스프레드시트 업데이트도 가능. 담당자는 구글 시트만 열면 최신 데이터 확인.

실전 팁

  • 스크립트 실행 결과를 로그로 남기기
  • 에러 발생 시 알림 (메일, 슬랙)
  • 민감 정보(DB 비밀번호)는 별도 config 파일로 분리

작은 자동화로 큰 차이를 만듭니다. 매일 10분 아끼면 1년에 60시간, 한 달 치 인건비입니다. 자동화는 곧 시간 절약입니다.

'PHP 실무' 카테고리의 다른 글

Auto increment 꼬임 해결  (0) 2026.10.30
DB 직접 수정 전 필수 백업 팁  (0) 2026.10.16
사소한 수정이 시스템 전체에 미친 파장  (0) 2026.10.09
MySQL → MariaDB 전환 이슈  (0) 2026.10.02
.htaccess 접근 제한 팁  (0) 2026.09.25