그누보드5 g5_uniqid 테이블 데이터 자동 정리 및 관리 방법
페이지 정보

본문
그누보드5 g5_uniqid 테이블 데이터 누적 문제
그누보드 영카트 쇼핑몰을 운영하면서 장바구니와 주문하기 등의 과정에서 생성되는 데이터가 삭제되지 않고 g5_uniqid 테이블에 계속 쌓이면 데이터베이스 용량이 불필요하게 커질 수 있습니다. 이로 인해 DB 조회 성능이 저하되는 현상을 예방할 수 있습니다.
적용 전 백업 및 주의사항
데이터베이스와 파일 수정 작업을 진행하기 전에는 반드시 웹서버 파일과 데이터베이스를 백업해야 합니다. 문제가 발생했을 때 원상 복구할 수 있는 안전장치를 마련한 뒤 적용을 진행하세요.
extend 폴더를 활용한 자동 정리 스크립트 구성
이 문제를 해결하기 위해 extend 폴더에 자동 삭제 스크립트를 추가하여 매일 한 번씩 조건에 따라 오래된 데이터를 자동으로 정리하도록 설정할 수 있습니다.
extend/uniqid_cleanup.extend.php 파일을 생성하여 아래의 코드를 업로드합니다.
<?php
if (!defined('_GNUBOARD_')) exit;
define('UNIQID_CLEANUP_DAYS_NOITEM', 2);
define('UNIQID_CLEANUP_DAYS_HASITEM', 30);
define('UNIQID_CLEANUP_LOG_MAXSIZE', 1048576);
@mkdir(G5_DATA_PATH . '/cache', G5_DIR_PERMISSION, true);
@mkdir(G5_DATA_PATH . '/log', G5_DIR_PERMISSION, true);
$uniqid_cleanup_flag_file = G5_DATA_PATH . '/cache/uniqid_cleanup.flag';
$uniqid_cleanup_today = date('Y-m-d');
if (!file_exists($uniqid_cleanup_flag_file) || trim(@file_get_contents($uniqid_cleanup_flag_file)) !== $uniqid_cleanup_today) {
@file_put_contents($uniqid_cleanup_flag_file, $uniqid_cleanup_today);
$uniqid_cleanup_table = isset($g5['uniqid_table']) ? $g5['uniqid_table'] : G5_TABLE_PREFIX.'uniqid';
$uniqid_cleanup_shop_item_table = isset($g5['g5_shop_item_table']) ? $g5['g5_shop_item_table'] : G5_TABLE_PREFIX.'shop_item';
$uniqid_cleanup_item_count = (int)sql_fetch_value("SELECT COUNT(*) FROM `{$uniqid_cleanup_shop_item_table}`");
$uniqid_cleanup_days = ($uniqid_cleanup_item_count > 0) ? UNIQID_CLEANUP_DAYS_HASITEM : UNIQID_CLEANUP_DAYS_NOITEM;
$uniqid_cleanup_expire_id = (int)date('Ymd00000000', strtotime("-{$uniqid_cleanup_days} days"));
$uniqid_cleanup_del_sql = "DELETE FROM `{$uniqid_cleanup_table}` WHERE `uq_id` < {$uniqid_cleanup_expire_id}";
sql_query($uniqid_cleanup_del_sql, false);
$uniqid_cleanup_opt_sql = "OPTIMIZE TABLE `{$uniqid_cleanup_table}`";
sql_query($uniqid_cleanup_opt_sql, false);
$uniqid_cleanup_log_path = G5_DATA_PATH . '/log/uniqid_cleanup.log';
if (file_exists($uniqid_cleanup_log_path) && filesize($uniqid_cleanup_log_path) > UNIQID_CLEANUP_LOG_MAXSIZE) {
@unlink($uniqid_cleanup_log_path);
@file_put_contents($uniqid_cleanup_log_path, "[".date('Y-m-d H:i:s")."] log reset (size > 1MB)\n");
}
$uniqid_cleanup_msg = sprintf("[%s] cleanup done — deleted uq_id < %s (%d days old), optimized table: %s, shop items: %d\n", date('Y-m-d H:i:s'), $uniqid_cleanup_expire_id, $uniqid_cleanup_days, $uniqid_cleanup_table, $uniqid_cleanup_item_count);
@file_put_contents($uniqid_cleanup_log_path, $uniqid_cleanup_msg, FILE_APPEND);
}
코드 상세 설명 및 동작 방식
- 실행 주기 제어: 캐시 폴더에 오늘 날짜의 플래그 파일을 기록하여 하루에 한 번만 로직이 실행되도록 제한합니다.
- 상품 유무에 따른 기간 설정: 쇼핑몰 상품 존재 여부를 확인하여 상품이 없으면 2일 이전 데이터를, 상품이 있으면 30일 이전 데이터를 삭제 대상으로 지정합니다.
- 테이블 최적화 및 로그: 삭제 작업 후
OPTIMIZE TABLE을 실행하여 공간을 회수하며, 로그 파일 크기가 1MB를 초과하면 초기화 후 새로운 로그를 기록합니다.
적용 시 주의사항 및 확인 방법
스크립트는 PHP 5.4부터 8.x 환경에서 호환되도록 작성되었습니다. 다만 대량의 데이터가 한 번에 삭제되거나 최적화될 때의 구체적인 서버 부하 영향도는 운영 중인 서버 환경에 따라 다를 수 있으므로 적용 후 로그 파일(data/log/uniqid_cleanup.log)을 통해 정상 실행 여부를 점검하는 것이 좋습니다.
- 다음글Stylebot을 활용한 그누스터디 대문 및 최신글 디자인 커스텀 방법 26.09.12
댓글목록
등록된 댓글이 없습니다.