WP Popular Posts 최적화 가이드: 트래픽 규모별 설정 및 장단점 분석

워드프레스 사이트의 사이드바에 최근 인기 급상승 중인 글들을 나열하고 싶은 경우 WP Popular Posts(WPP)와 같은 플러그인을 사용할 수 있습니다. 이 플러그인은 방문자들이 가장 많이 조회하거나 댓글을 남긴 게시글을 추출하여 위젯, 블록 또는 숏코드로 보여주는 플러그인입니다. 단순한 조회수 순위뿐만 아니라 특정 기간(예: 최근 24시간, 7일, 30일)을 기준으로 데이터를 정렬할 수 있어 사이트의 최신 트렌드를 독자에게 보여주기에 최적화되어 있습니다.

하지만 강력한 기능을 제공하는 WPP 플러그인을 사이트 규모에 맞기 않게 설정하면 방문자의 조회 데이터를 실시간으로 기록하는 과정에서 데이터베이스(DB)에 상당한 쓰기 작업이 발생하여 사이트 성능에 악영향을 줄 수 있습니다. 초기 설정 그대로 사용할 경우, 트래픽이 늘어남에 따라 무거운 쿼리로 인해 사이트의 초기 응답 속도(TTFB)가 급격히 느려지는 원인이 되기도 합니다. 이 글에서는 내 웹사이트의 일일 방문자 수(트래픽) 규모에 맞춰 서버 성능 저하를 최소화하여 플러그인을 100% 쾌적하게 활용할 수 있는 최적화 설정 방법에 대해 알아보겠습니다.

WP Popular Posts (WPP) 플러그인

WP Popular Posts는 조회수나 댓글 개수를 기준으로 인기 글을 나열하는 무료 워드프레스 플러그인입니다. 이 플러그인은 현재 10만 개가 넘는 사이트에 설치되어 사용되고 있고 활발히 업데이트되고 있습니다.

WP Popular Posts (WPP) 플러그인

장점

  • 강력한 맞춤 설정 기능: 포스트뿐만 아니라 페이지나 사용자 정의 포스트 타입(Custom Post Type)도 지원하며, 썸네일 표시 여부, 글자 수 제한 등 시각적인 커스텀이 매우 자유롭습니다. (사용자 정의 HTML 마크업도 지원합니다.)
  • 캐시 플러그인 호환: AJAX를 통한 로드 기능을 지원하여, 페이지 캐시(Breeze, WP Rocket 등)가 적용된 환경에서도 목록이 과거 시점에 멈추지 않고 실시간으로 갱신됩니다.
  • 다양한 삽입 방식: 최신 워드프레스의 블록 에디터 위젯은 물론, 구형 테마를 위한 [wpp] 숏코드와 PHP 템플릿 태그까지 모두 지원합니다.
  • 세밀한 성능 제어 옵션: 데이터베이스 부하를 줄이기 위한 데이터 샘플링(Data Sampling) 및 데이터 캐싱(Data Caching) 기능을 자체적으로 내장하고 있습니다.

단점

  • 초기 설정의 진입 장벽: 성능 최적화를 위한 도구(Tools) 설정이 초보자에게는 다소 복잡하게 느껴질 수 있으며, 캐시 플러그인의 JS Minify 설정과 충돌하는 경우가 종종 발생합니다(캐시 플러그인에서 예외 처리 필요).
  • 데이터베이스 비대화 가능성: 기본 설정 그대로 사용할 경우, 방문자의 모든 조회 기록이 DB에 쌓여 테이블 용량이 과도하게 늘어나고 쿼리 속도(TTFB)가 느려질 수 있습니다.

WP Popular Posts 플러그인 설치 및 사용 방법

WPP 플러그인은 설치하고 활성화한 후에 사이드바 위젯이나 페이지 등에 블록으로 추가하거나 숏코드로 표시할 수 있습니다.

1 워드프레스 관리자 페이지의 플러그인 » 플러그인 추가로 이동하여 wp popular posts로 검색해서 플러그인을 설치하고 활성화합니다.

WP Popular Posts (WPP) 플러그인 설치

2 인기 글을 사이드바에 표시하려는 경우 모양 » 위젯을 클릭하여 원하는 위젯 영역(예: 우측 사이드바)에 블록으로 추가할 수 있습니다. 블록 추가(+ 기호) 아이콘을 누르고 popular로 검색해서 WP Popular Posts 블록을 선택합니다.

인기 글 블록 추가하기

3 WPP 블록이 추가되면 옵션을 설정합니다. 제목, 표시할 글 개수 제한, 포스트 정렬 방식, 시간 범위, 썸네일 표시 여부 및 썸네일 크기, 조회수 표시 여부 등등 다양한 옵션이 제공됩니다.

WP Popular Posts (WPP) 플러그인 옵션 설정하기

정렬 방식은 총 조회수(Total views), 일일 평균 조회수(Avg. daily views), 댓글 수(Comments) 중에서 선택할 수 있습니다.

WP Popular Posts (WPP) 정렬 방식 설정

Posts settingsStat Tag settings에서 표시할 항목을 지정할 수 있습니다.

WP Popular Posts (WPP) 포스트 설정

썸네일의 경우 크기를 수동으로 설정하거나 미리 정의된 썸네일 크기에서 선택할 수 있습니다. 수동으로 설정한다면 선명하게 썸네일을 표시하기 위해 2배수 크기로 지정하고 CSS로 조정하는 것도 고려할 수 있습니다. 그러면 더 선명한 썸네일이 표시되지만 그만큼 이미지 크기는 증가하게 됩니다.

사용자 정의 HTML 마크업 사용을 활성화하여 HTML 마크업을 입력하는 것도 가능합니다. 날짜를 표시할 때 "posted on" 문구가 표시될 수 있습니다. 이 기능을 사용하면 "posted on"과 같은 텍스트를 제거하거나 다른 문구로 표시되도록 할 수 있습니다.

워드프레스 인기 글 플러그인 사용자 정의 HTML 마크업

4 설정 » WP Popular Posts로 이동하여 플러그인 설정할 수 있습니다. 상단의 Tools(도구) 탭에서 썸네일과 데이터에 대해 세부적으로 세팅할 수 있습니다.

세팅을 완료했다면 방문 조회수가 기록되고 조회수에 따라 인기 글 리스트가 사이드바 등에 표시될 것입니다. 인기 글 목록 디자인은 CSS로 커스터마이징할 수 있습니다.

트래픽 규모별 최적의 세팅 전략

WPP를 사용할 때 서버 부하를 방지하도록 데이터베이스를 관리하는 것이 중요합니다. 사이트의 일일 페이지 조회수(Pageviews)를 기준으로 설정 » WP Popular Posts » Tools 탭에서 아래의 설정 전략을 적용해 볼 수 있습니다.

1. 소규모 블로그 (일일 조회수 1,000 ~ 5,000회 미만)

방문자 수가 별로 없고 트래픽이 적은 초기 단계에서는 DB 부하보다 정확한 통계 수집에 초점을 둘 수 있습니다.

  • Data Sampling: Disabled (비활성화)
    • 조회수가 적을 때 샘플링을 켜면 통계가 누락되어 인기글 순위가 며칠째 변하지 않거나 왜곡될 수 있습니다. 모든 방문을 기록하도록 설정합니다.
  • Data Caching: Enable caching (캐싱 주기는 60분 권장)
    • 서버 연산을 줄이기 위해 플러그인 자체 캐싱을 켜고, 갱신 주기를 넉넉하게 잡습니다.
  • Log Limit: 30 days
    • 데이터가 한 달 이상 무한정 쌓이지 않도록 30일 보존 후 자동 삭제되게 합니다.

캐싱 주기를 길게 하면 인기 글들의 순위가 설정된 시간 동안 바뀌지 않습니다. 실시간으로 순위를 보여주어야 하는 경우가 아니라면 길게 설정하는 것이 사이트 속도면에서 유리합니다.

참고로 위의 그림에서 Display views column for these post types에 대하여 postpage를 체크하면 해당 포스트와 페이지의 조회수가 글/페이지 목록 페이지에 표시됩니다.

글 조회수 표시

2. 중간 규모의 블로그 (일일 조회수 10,000 ~ 50,000회)

트래픽이 상승하면서 DB 쓰기(Write) 작업이 빈번해지는 시기입니다. 성능과 정확도의 타협이 필요합니다.

  • Data Sampling: Enabled / Sample Rate: 10 ~ 50
    • 10~50번 조회당 1번만 DB에 기록하고 나머지는 추산하여 표시합니다. 서버 부하를 크게 줄이면서도 오차를 최소화할 수 있는 균형 잡힌 설정입니다.
  • Data Caching: Enable caching (캐싱 주기는 10 ~ 30분 권장)
  • Log Limit: 14 days ~ 30 days
    • 트렌드 변화 속도에 맞춰 보존 기간을 조금 줄이는 것도 좋은 선택일 수 있습니다.

3. 대형 블로그 / 커뮤니티 (일일 조회수 100,000회 이상)

조회수가 폭발적으로 발생하는 대형 사이트에서는 데이터베이스 경량화와 서버 방어가 1순위입니다.

  • Data Sampling: Enabled/ Sample Rate: 100 이상
    • 100으로 설정하면 100회 조회당 1번만 기록합니다. 엄청난 트래픽이 쏟아져도 DB 테이블이 비대해지거나 쿼리 지연이 발생하는 것을 막아줍니다. 전체 모수가 크기 때문에 100단위로 샘플링해도 통계의 정확도는 꽤 높게 유지됩니다.
  • Data Caching: Enable caching (캐싱 주기는 10분 권장). 실시간으로 빠르게 인기 글 트렌드를 표시할 필요가 없다면 캐싱 주기를 높이는 것을 고려할 수 있습니다.
  • Log Limit: 7 days
    • 오래된 더미 데이터를 과감히 버리고, 철저하게 최근 1주일간의 핫이슈 위주로 가볍고 빠르게 목록을 생성합니다.

데이터 샘플링(Data Sampling, 데이터 표본 추출 )이란?

데이터 샘플링은 방문자가 페이지를 열 때마다 발생하는 모든 조회수를 데이터베이스(DB)에 일일이 기록하는 대신, 설정한 비율(표본)만큼만 추출하여 기록한 뒤 전체 통계를 추산하는 기능입니다.

예를 들어, 샘플링 값을 '10'으로 설정하면, 10번의 방문 중 9번은 건너뛰고 단 1번만 DB에 접근하여 기록하게 됩니다. 대신 화면에 조회수를 출력할 때는 기록된 값에 10을 곱하여 실제 조회수와 거의 비슷하게 보정해 줍니다. 결과적으로 조회수 오차는 최소화하면서 서버의 데이터베이스 쓰기(Write) 부하를 10분의 1로 줄여주는 매우 지능적인 최적화 기술입니다.

이는 통계학적 원리에 기반한 것으로, 통계청에서 전 국민의 여론을 알기 위해 5천만 명을 모두 조사(전수조사)하는 대신, 일부(예: 1천 명)만 무작위로 뽑아(표본 추출) 전체의 의견(모집단)을 추정하는 것과 완전히 동일한 원리라 할 수 있습니다.

트래픽 규모에 따른 최적의 설정 전략

이 기능은 웹사이트의 하루 트래픽 규모에 따라 유연하게 설정하는 것을 고려할 수 있습니다.

  • 소규모 블로그 (일일 조회수 수천 건 미만): 표본 추출 기능을 비활성화(Disabled)하는 것이 좋습니다. 전체 방문자 수가 적을 때 표본 추출을 하면, 운에 따라 조회수가 누락되거나 과대 계상되는 등 통계의 오차가 눈에 띄게 커집니다. 이 구간에서는 서버 부하가 미미하므로 100% 기록하여 정확도를 높이는 것이 유리할 수 있습니다. 하지만 서버 부하를 조금이라도 줄이고 싶다면 활성화하고 적절한 값(예: 2~10 사이)을 설정하는 것도 하나의 방법일 수 있습니다.
  • 중간 규모 블로그 (일일 조회수 1만 ~ 5만 건): 샘플링 값을 10 ~ 50 사이로 설정하여 성능과 정확도의 균형을 맞추는 것이 좋습니다. 통계의 오차를 줄이면서도 DB에 가해지는 부담을 눈에 띄게 덜어낼 수 있습니다.
  • 대형 블로그 (일일 조회수 10만 건 이상): 무조건 샘플링 값을 100 이상으로 과감하게 높여야 합니다. 엄청난 트래픽이 쏟아지는 환경에서는 조회수의 미세한 정확도보다 서버가 다운되지 않도록 방어하는 것이 최우선입니다. 모수 자체가 크기 때문에 100단위로 샘플링을 해도 통계적 오차가 크지 않으며, 데이터베이스 비대화와 속도 저하를 차단할 수 있습니다.

캐싱 주기 설정

실시간으로 인기 글을 보여주어야 하는 경우에는 캐싱 주기 설정을 짧게 하는 것이 좋습니다. 하지만 실시간으로 보여줄 필요가 없다면 캐싱 주기를 늘리는 것이 바람직할 수 있습니다.

1. 무거운 연산(Query) 횟수의 극적인 감소 대규모 사이트는 WP Popular Posts가 조회수를 기록하는 DB 테이블의 크기가 어마어마하게 큽니다. 이 거대한 데이터 속에서 '어떤 글이 제일 인기가 많은지' 골라내는 작업(SELECT 및 정렬 쿼리)은 서버 입장에서 꽤 힘든 노동입니다.

  • 10분 주기일 때: 이 무거운 작업을 하루에 144번 수행해야 합니다.
  • 60분(1시간) 주기일 때: 하루에 단 24번만 수행하면 됩니다.
  • 결과: 데이터베이스의 숨통이 확 트이고, 사이트 전체의 렌더링 속도와 안정성이 크게 올라갑니다.

2. 콘텐츠 성격에 따른 유연한 타협 사이트에서 다루는 주제가 '실시간 속보'나 '오늘의 유머' 같은 가벼운 가십거리가 아니라, 전문 지식이나 IT 튜토리얼 등 수명이 긴 콘텐츠(Evergreen Content)라면 인기글 순위는 하루아침에 급변하지 않습니다. 이런 경우 방문자들은 1시간 전의 순위와 지금의 순위가 똑같다고 해서 불만을 가지지 않습니다.

추천하는 캐싱 주기 설정 값

대규모 사이트이면서 실시간성이 덜 중요하다면 다음과 같이 주기를 대폭 늘리는 것을 권장합니다.

  • 뉴스, 커뮤니티 성격이 약간 섞인 대형 블로그: 30분 ~ 60분
  • 일반적인 정보성, 전문성 중심의 대형 블로그: 2시간 ~ 6시간 (120 ~ 360분)
  • 조회수 변동이 거의 없는 아카이브형 사이트: 12시간 ~ 24시간

캐시 플러그인에서 캐시 예외 설정하기

저는 클라우드웨이즈(Cloudways)에서 호스팅되는 워드프레스에서 Breeze 플러그인 때문에 WWP 플러그인에서 출력하는 인기 글 리스트가 표시가 안 되는 문제가 나타났습니다.

캐시 플러그인 때문에 WWP 플러그인 기능이 제대로 작동하지 않는 경우 wpp.min.js 파일에 대하여 캐싱 예외 설정을 하면 문제가 해결될 것입니다.

다음 JS 파일에 대하여 캐시 제외 설정을 할 수 있습니다.

wpp.min.js

경로까지 지정해야 하는 경우 아래와 같이 설정하도록 합니다.

/wp-content/plugins/wordpress-popular-posts/assets/js/wpp.min.js

위와 같이 설정해도 해결이 안 된다면 사이트의 도메인 주소를 포함한 전체 URL을 입력합니다.

https//example.com/wp-content/plugins/wordpress-popular-posts/assets/js/wpp.min.js

Breeze 캐시 플러그인을 사용하는 경우 전체 URL을 입력하도록 합니다. 설정 » Breeze » File Optimization » Exclude JS 섹션에 상기 URL을 입력하면 됩니다. JS 파일의 캐시 예외 요청 방법은 캐시 플러그인에 따라 조금씩 다릅니다.

WWP 플러그인 JS 파일 캐시 예외 설정하기

참고

댓글 남기기

댓글 남기기