2026, 새로운 도약을 시작합니다.

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

· 1개월 전 · 458 · 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 팁자료실

번호 제목 글쓴이 날짜 조회
441 3주 전 조회 239
440 1개월 전 조회 189
439 1개월 전 조회 290
438 1개월 전 조회 459
437 2개월 전 조회 657
436 2개월 전 조회 269
435 2개월 전 조회 381
434 3개월 전 조회 536
433 3개월 전 조회 368
432 3개월 전 조회 338
431 3개월 전 조회 443
430 3개월 전 조회 406
429 3개월 전 조회 359
428 3개월 전 조회 367
427 4개월 전 조회 509
426 4개월 전 조회 535
425 4개월 전 조회 353
424 4개월 전 조회 628
423 4개월 전 조회 599
422 4개월 전 조회 520
421 5개월 전 조회 571
420 5개월 전 조회 489
419 5개월 전 조회 570
418 5개월 전 조회 513
417 5개월 전 조회 622
416 5개월 전 조회 428
415 6개월 전 조회 564
414 6개월 전 조회 566
413 6개월 전 조회 661
412 7개월 전 조회 551
🐛 버그신고