상품 옵션·재고 로딩 속도 2~5배 향상시키는 옵션 캐싱 기법 > 영카트5 팁자료실

영카트5 팁자료실

상품 옵션·재고 로딩 속도 2~5배 향상시키는 옵션 캐싱 기법 정보

상품 옵션·재고 로딩 속도 2~5배 향상시키는 옵션 캐싱 기법

본문

영카트 상품 상세페이지는 옵션을 불러올 때마다
g5_shop_item_option 테이블에 반복 쿼리를 날림.
상품 옵션이 많아지면 상세페이지 로딩 속도가 느려지고 서버 부하가 증가함.
이를 해결하기 위한 실무 기법이 옵션 캐싱(Option Caching).

 

1) 옵션 데이터를 캐시에 저장하기 (itemoption.php 수정)

$cache_key = 'item_option_' . $it_id;
$cache_time = 300; // 5분

if(function_exists('apcu_fetch') && $opt = apcu_fetch($cache_key)) {
    $item_option = $opt;
} else {
    $sql = "SELECT * FROM {$g5['g5_shop_item_option_table']} 
            WHERE it_id = '$it_id' ORDER BY io_no ASC";
    $item_option = sql_query($sql);

    if(function_exists('apcu_store')) {
        apcu_store($cache_key, $item_option, $cache_time);
    }
}
 

2) 구매 시 재고 감소 후 캐시 삭제하기 (orderupdate.php)

$cache_key = 'item_option_' . $it_id;
if(function_exists('apcu_delete')) {
    apcu_delete($cache_key); // 재고 변경되면 캐시 무효화
}
 

3) 효과

옵션이 많을수록 상세페이지 속도 최대 2~5배 향상

APCu가 없다면 파일 캐시로도 가능

데이터 변경 시 캐시 자동 삭제 → 데이터 불일치 방지

트래픽 많은 쇼핑몰에서 효과가 큼 (세트상품·대량옵션 쇼핑몰 등)

 

 

추천
4

댓글 3개

sql 인젝션 취약점이 있다고 합니다.
취약점 패치 버전입니다.

 

<?php
// 캐시 키와 시간 설정
$cache_key  = 'item_option_' . $it_id;
$cache_time = 300; // 5분

// 캐시에서 먼저 가져오기
if (function_exists('apcu_fetch') && ($opt = apcu_fetch($cache_key))) {
    $item_option = $opt;
} else {
    // it_id 값 안전하게 처리
    // g5 프레임워크에는 sql_escape() 함수가 제공됨
    $safe_it_id = sql_escape($it_id);

    // SQL 작성 (이스케이프된 값 사용)
    $sql = "SELECT * 
              FROM {$g5['g5_shop_item_option_table']} 
             WHERE it_id = '{$safe_it_id}' 
          ORDER BY io_no ASC";

    // 쿼리 실행
    $item_option = sql_query($sql);

    // 캐시에 저장
    if (function_exists('apcu_store')) {
        apcu_store($cache_key, $item_option, $cache_time);
    }
}
?>

전체 441
영카트5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT