본문으로 건너뛰기

SiteStats

이용자에게 보여주는 공개 방문자 통계 플러그인입니다. 운영자 분석용 Analytics와 달리, 사이트 화면에 현재 방문자, 오늘 방문자, 전체 방문자, 인기페이지, 실시간 방문자 현황을 표시합니다.

상태​

항목값
Layercomposite
TierL1
Statuswip
Version0.1.0
가격Free
카테고리Social

Analytics와의 분리​

플러그인목적데이터 흐름
Analytics운영자 분석GA4, Naver Analytics 등 외부 provider로 전송
SiteStats이용자 공개 표시자체 Redis 집계 후 사이트 화면에 표시

SiteStats는 전환 이벤트 분석이나 광고 측정용이 아닙니다. 사이트 방문자에게 "지금 몇 명이 보고 있는지", "인기 페이지가 무엇인지"를 보여주는 소셜 프루프 영역입니다.

기능 토글​

feature내용
counters현재 / 오늘 / 전체 방문자
popular_pages인기페이지 Top N
live_feed실시간 방문자 현황
dwell_time평균 체류시간 보조 지표
content_top인기 글 adapter, 후속

설치 / 활성화​

프로젝트 composer.json에 SiteStats PSR-4 매핑이 있어야 합니다.

"App\\Plugins\\SiteStats\\": "app/Plugins/SiteStats/src/",
"App\\Plugins\\SiteStats\\Database\\": "app/Plugins/SiteStats/database/",
"App\\Plugins\\SiteStats\\Tests\\": "app/Plugins/SiteStats/tests/"

플러그인 provider가 활성화되면 route, view, lang, config, migration이 등록됩니다.

App\Plugins\SiteStats\Providers\SiteStatsServiceProvider::class

Blade 사용법​

레이아웃의 </body> 직전에 beacon을 한 번 넣습니다.

<x-sitestats::beacon />

표시할 위치에 필요한 위젯을 배치합니다.

<x-sitestats::current />
<x-sitestats::today />
<x-sitestats::total />
<x-sitestats::popular :limit="10" />
<x-sitestats::live />

방문자 국가/언어 표시​

Core가 요청 단위로 만든 visitor.context를 live feed에 함께 저장합니다.

필드의미
country_codeKR, JP 같은 국가 코드
country_source기본 cloudflare
locale_hint국가 기반 추정 locale
resolved_locale실제 적용된 locale
is_estimatedIP 기반 추정 여부

Cloudflare 프록시가 켜져 있으면 CF-IPCountry 헤더로 국가를 추정합니다. 헤더가 없거나 지원하지 않는 국가면 필드를 비운 채 기존 live feed만 표시합니다.

표시 예:

손님 🇯🇵 JP · ja /bible

이 값은 추정치입니다. VPN, 프록시, 해외 거주자 때문에 실제 언어 선호와 다를 수 있으므로 보안, 권한, 과금 판단에는 사용하지 않습니다.

관련 Core 설정​

CORE_VISITOR_COUNTRY_DETECTION=true
CORE_VISITOR_COUNTRY_HEADER=CF-IPCountry
CORE_VISITOR_COUNTRY_SOURCE=cloudflare

국가 기반 locale hint는 ?lang, 로그인 사용자 설정, 세션, 브라우저 Accept-Language보다 낮은 우선순위입니다.

저장 구조​

항목저장소
현재 접속자Redis ZSET
오늘/전체 uniqueRedis HyperLogLog
인기페이지Redis ZSET
live feedRedis HASH
누적 스냅샷DB snapshot table

Redis live payload에는 원본 IP를 저장하지 않습니다. 국가 코드는 Core visitor.context에서 정규화된 값만 저장합니다.

보안 / 개인정보​

  • beacon POST는 same-origin + CSRF 토큰을 사용합니다.
  • 봇은 JS beacon 미실행 + 서버측 UA 필터로 제외합니다.
  • 원본 IP는 공개 표시용으로 저장하지 않습니다.
  • Redis 키는 tenant key prefix로 분리합니다.

데모 / 문서 링크​

  • Platform plugin demo: https://template.codebase.how/platform/plugin-demo/site-stats
  • Plugin Store: https://store.codebase.how/plugins/site-stats
  • 운영 문서: https://docs.codebase.how/operations/visitor-context-site-stats