Files
sori.studio/docs/homepage-widget.md

5.1 KiB

Homepage Custom API 위젯 가이드

엔드포인트

  • 공개 URL: GET /api/homepage-widget
  • 운영 예시: https://sori.studio/api/homepage-widget
  • NAS 호스트 포트 예시: http://NAS_LAN_IP:43080/api/homepage-widget
  • 같은 Docker 네트워크 예시: http://sori-studio:3000/api/homepage-widget

Homepage가 Docker 컨테이너에서 실행 중이면 localhost는 Homepage 컨테이너 자신을 가리킨다. 같은 서버의 sori.studio에 연결할 때는 공개 도메인, NAS 내부 IP 또는 같은 Docker 네트워크의 서비스 이름을 사용한다.

제공 필드

필드 형식 설명
title text 사이트 제목
updatedAt date API 응답 생성 시각
todayVisitors number 오늘 순방문자 수
totalVisitors number 일별 순방문자 수의 누적 합계
todayPageViews number 오늘 페이지뷰
totalPageViews number 전체 누적 페이지뷰
visitorsLast7Days number 최근 7일 방문자 합계
visitorsLast30Days number 최근 30일 방문자 합계
visitorsLast180Days number 최근 180일(약 6개월) 방문자 합계
visitorsLast365Days number 최근 365일(1년) 방문자 합계
pageViewsLast30Days number 최근 30일 페이지뷰
onlineNow number 최근 90초 안에 활동한 접속자
loggedInNow number 현재 접속자 중 로그인 회원
avgEngagedSeconds duration 오늘 평균 체류시간(오늘 값이 없으면 조회 범위 평균)
totalPosts number 현재 공개된 발행 게시글 수
totalComments number 공개 게시글에 달린 공개 댓글 수
totalPages number 공개 고정 페이지 수
totalTags number 전체 태그 수
totalMembers number 전체 가입 계정 수
items array 이름·표시 문자열·원본 값을 포함한 기본 통계 목록

totalVisitors는 사이트 전체에서 동일인을 영구 식별한 값이 아니다. 날짜별 중복을 제거한 방문자 수를 누적하므로 같은 사람이 다른 날짜에 방문하면 다시 집계된다.

추천 기본 설정

services.yaml에서 필요한 항목만 골라 mappings에 넣는다.

- sori.studio:
    href: https://sori.studio
    description: 블로그 통계
    widget:
      type: customapi
      url: https://sori.studio/api/homepage-widget
      refreshInterval: 300000 # 5분
      mappings:
        - field: todayVisitors
          label: 오늘 방문자
          format: number
          suffix: 명
        - field: totalVisitors
          label: 누적 방문자
          format: number
          suffix: 명
        - field: totalPosts
          label: 전체 게시글
          format: number
          suffix: 개
        - field: totalComments
          label: 전체 댓글
          format: number
          suffix: 개

선택 가능한 설정 예시

방문·조회 통계

mappings:
  - field: todayVisitors
    label: 오늘 방문자
    format: number
    suffix: 명
  - field: totalVisitors
    label: 누적 방문자
    format: number
    suffix: 명
  - field: todayPageViews
    label: 오늘 조회
    format: number
    suffix: 회
  - field: totalPageViews
    label: 누적 조회
    format: number
    suffix: 회

콘텐츠 통계

mappings:
  - field: totalPosts
    label: 게시글
    format: number
    suffix: 개
  - field: totalComments
    label: 댓글
    format: number
    suffix: 개
  - field: totalPages
    label: 페이지
    format: number
    suffix: 개
  - field: totalTags
    label: 태그
    format: number
    suffix: 개

기간·실시간 통계

mappings:
  - field: visitorsLast7Days
    label: 최근 7일 방문
    format: number
    suffix: 명
  - field: visitorsLast30Days
    label: 최근 30일 방문
    format: number
    suffix: 명
  - field: visitorsLast180Days
    label: 최근 6개월 방문
    format: number
    suffix: 명
  - field: visitorsLast365Days
    label: 최근 1년 방문
    format: number
    suffix: 명
  - field: pageViewsLast30Days
    label: 최근 30일 조회
    format: number
    suffix: 회
  - field: onlineNow
    label: 현재 접속
    format: number
    suffix: 명
  - field: avgEngagedSeconds
    label: 평균 체류
    format: duration

회원·갱신 정보

mappings:
  - field: totalMembers
    label: 전체 회원
    format: number
    suffix: 명
  - field: loggedInNow
    label: 로그인 접속
    format: number
    suffix: 명
  - field: updatedAt
    label: 갱신
    format: relativeDate
    locale: ko
    numeric: auto

확인 방법

curl https://sori.studio/api/homepage-widget

응답이 정상인데 Homepage에 값이 나오지 않으면 Homepage 컨테이너 내부에서 해당 URL에 접근할 수 있는지 먼저 확인한다.

방문 기간 통계는 일별 집계 테이블에서 최근 7·30·180·365일을 한 번에 합산한다. Homepage를 개인용으로 간헐적으로 확인한다면 refreshInterval: 300000(5분) 또는 600000(10분)으로 두면 충분하다.