선

조회수·댓글수 실시간 업데이트 대신 지연 카운트 적용

· 2025-11-15 (토) 19:06:29 · 3920 · 3

조회수(wr_hit), 댓글 수(wr_comment)는 페이지가 열릴 때마다 증가하는데, 이 값들을 매 요청마다 즉시 DB에 업데이트하면 서버 부하가 매우 큼. 특히 방문자가 많은 게시판일수록 병목이 발생함.
이를 해결하는 방법이 Lazy Count(지연 업데이트) 방식임. 즉, 조회수 증가를 즉시 DB 반영하지 않고 세션·캐시에 모았다가 일정 주기마다 일괄 반영하는 방법.

 

1) 조회수 증가를 APCu 캐시에 쌓기 (view.php 수정)

$post_id = $wr_id;
$cache_key = "hit_{$post_id}";

// 1회만 증가하도록 세션 체크
if(!isset($_SESSION["hit_{$post_id}"])) {
    $_SESSION["hit_{$post_id}"] = true;

    // APCu에 누적 저장
    if(function_exists('apcu_inc')) {
        apcu_inc($cache_key, 1);
    }
}
 

2) 크론에서 일정 간격으로 DB에 반영 (hit_flush.php)

include_once('./_common.php');

$keys = new APCUIterator('/^hit_/');
foreach($keys as $key => $val) {
    $wr_id = str_replace('hit_', '', $key);
    $hit = apcu_fetch($key);

    // DB 반영
    sql_query("UPDATE g5_write SET wr_hit = wr_hit + '{$hit}' WHERE wr_id = '{$wr_id}'");

    // 캐시 삭제
    apcu_delete($key);
}


크론탭 설정 예시 (5분마다 반영)

*/5 * * * * php /home/site/public_html/hit_flush.php
 

효과

고트래픽 게시판에서 DB write 횟수를 80~95% 감소

트래픽 폭주 상황에서도 사이트 안정성 향상

캐시가 없는 환경에서는 파일 기반으로도 구현 가능

|

댓글 3개

2025-11-16 (일) 17:42:11

감사합니다 ^^

좋은 정보입니다.

감사합니다 

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

그누보드5 팁자료실

2,788건
+
제목 글쓴이 날짜 조회
25-12-06 조회 4,054
25-12-02 조회 3,967
25-11-30 조회 3,900
25-11-30 조회 3,581
25-11-27 조회 3,912
25-11-23 조회 3,407
25-11-23 조회 3,321
25-11-19 조회 3,328
25-11-15 조회 3,921
25-11-09 조회 3,336
25-11-06 조회 3,210
25-11-06 조회 3,653
25-11-05 조회 3,277
25-11-03 조회 3,026
25-11-01 조회 3,216
25-10-28 조회 3,100
25-10-28 조회 3,385
25-10-28 조회 3,045
25-10-27 조회 3,156
25-10-22 조회 3,138
25-10-22 조회 3,400
25-10-21 조회 2,881
25-10-17 조회 2,932
25-10-17 조회 2,882
25-10-17 조회 2,808
25-10-17 조회 2,890
25-10-15 조회 2,851
25-10-14 조회 2,892
25-10-14 조회 2,843
25-10-14 조회 3,625