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

· 2개월 전 · 613 · 3

영카트 상품 상세페이지는 옵션을 불러올 때마다
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가 없다면 파일 캐시로도 가능

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

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

 

 

|

댓글 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);
    }
}
?>

좋은 팁 감사합니다!

댓글을 작성하시려면 로그인이 필요합니다.

영카트5 팁자료실

+
제목 글쓴이 날짜 조회
어제 조회 31
1개월 전 조회 421
1개월 전 조회 367
2개월 전 조회 444
2개월 전 조회 614
3개월 전 조회 818
3개월 전 조회 418
3개월 전 조회 551
3개월 전 조회 707
3개월 전 조회 530
3개월 전 조회 482
4개월 전 조회 625
4개월 전 조회 673
4개월 전 조회 515
4개월 전 조회 509
4개월 전 조회 663
4개월 전 조회 674
4개월 전 조회 513
5개월 전 조회 798
5개월 전 조회 811
5개월 전 조회 649
5개월 전 조회 750
6개월 전 조회 663
6개월 전 조회 768
6개월 전 조회 697
6개월 전 조회 774
6개월 전 조회 605
6개월 전 조회 736
7개월 전 조회 727
7개월 전 조회 833
🐛 버그신고