[태그:] Umami

  • 별고래 분석실 — Umami로 방문자 통계

    별고래 분석실 — Umami로 방문자 통계

    별고래 분석실 — Umami로 방문자 통계

    셀프호스팅 구축기 5편. 데이터 주권을 미니PC로 가져오기.


    TL;DR

    • Google Analytics 무료 = 사장님 방문자 데이터를 Google 서버에 줌 + 쿠키 동의 팝업 강제
    • Umami self-hosted = 미니PC에 자체 분석. 쿠키 0, 데이터 본인 소유, GDPR 자동 면제
    • Docker Compose 5분. WP에 트래커 한 줄 자동 주입 = 끝
    • 화면: 방문자 수·인기 글·유입 경로·기기·국가·체류 시간

    1. Google Analytics의 보이지 않는 비용

    항목 Google Analytics 4 Umami self-hosted
    비용 무료 (개인 사용) 무료 (오픈소스)
    데이터 소유 Google 본인 미니PC
    쿠키 동의 팝업 필수 (GDPR/CCPA) 불필요 (쿠키 0)
    페이지 로딩 부하 ~50KB JS ~2KB JS
    사용자 추적 크로스 사이트 (Google 광고 연계) 같은 사이트 내만
    한국 PIPA 대응 까다로움 자동 면제
    설정 복잡도 1시간+ 5분

    Google Analytics는 진짜 비용을 사용자(방문자)에게 외부화한다. 방문자가 사장님 사이트 들어왔다고 Google이 그 데이터 다 받아가는 게 정상인가? 1인 블로그라면 우리가 직접 운영하는 게 옳다.


    2. 구조

    

    방문자 브라우저가 별고래 페이지 받으면 head의 <script defer src="https://analytics.sticknstone.org/script.js" data-website-id="..."> 가 실행 → Umami에 비동기 요청 → Umami가 Postgres에 기록. 페이지 표시는 안 막힘.


    3. Docker Compose

    /home/user/umami/docker-compose.yml:

    services:
      umami:
        image: ghcr.io/umami-software/umami:postgresql-latest
        restart: unless-stopped
        depends_on:
          db:
            condition: service_healthy
        environment:
          DATABASE_URL: postgresql://umami:${DB_PASSWORD}@db:5432/umami
          DATABASE_TYPE: postgresql
          APP_SECRET: ${APP_SECRET}
        ports:
          - "3001:3000"
    
      db:
        image: postgres:16-alpine
        restart: unless-stopped
        environment:
          POSTGRES_DB: umami
          POSTGRES_USER: umami
          POSTGRES_PASSWORD: ${DB_PASSWORD}
        volumes:
          - umami_db:/var/lib/postgresql/data
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U umami"]
          interval: 5s
          timeout: 5s
          retries: 6
    
    volumes:
      umami_db:
    

    .env:

    APP_SECRET=$(openssl rand -hex 32)
    DB_PASSWORD=$(openssl rand -hex 24)
    

    가동:

    cd /home/user/umami
    docker compose up -d
    curl -I http://localhost:3001  # HTTP/1.1 200
    

    기본 로그인: admin / umami. 즉시 비밀번호 변경.


    4. 별고래 등록 + 트래커 받기

    Umami 대시보드 → Websites → Add Website:

    필드
    Name 별고래 항해일지
    Domain sticknstone.org

    Save → 사이트 클릭 → Edit → Tracking Code:

    <script defer src="https://analytics.sticknstone.org/script.js" data-website-id="1892c870-dd4d-4ce7-9fd6-2635f8ef6220"></script>
    

    5. WP에 자동 주입 — mu-plugin

    매 글마다 사장님이 코드 박는 게 아니라 자동.

    /var/www/html/wp-content/mu-plugins/umami-tracker.php:

    <?php
    /**
     * Plugin Name: Umami Analytics Tracker
     * Description: Injects Umami tracker into front-end pages. Excludes logged-in users.
     */
    if (!defined('ABSPATH')) exit;
    
    add_action('wp_head', function () {
        if (is_admin()) return;
        if (is_user_logged_in()) return;  // 사장님 본인 방문은 제외
        ?>
        <script defer src="https://analytics.sticknstone.org/script.js" data-website-id="1892c870-dd4d-4ce7-9fd6-2635f8ef6220"></script>
        <?php
    }, 100);
    

    is_user_logged_in() 체크 = 사장님이 자기 글 미리보기 한 횟수가 통계에 안 잡힘. 의외로 중요.


    6. 대시보드에서 보이는 것

    화면 데이터
    Overview 일·주·월별 방문자·페이지뷰·세션·체류 시간
    Pages 인기 글 순위
    Referrers 유입 경로 (구글·트위터·다른 사이트)
    Browsers 크롬·사파리·파이어폭스 비율
    OS 윈도우·맥·iOS·안드로이드
    Devices 데스크탑·모바일·태블릿
    Countries 국가별 방문자
    Languages 브라우저 언어
    Events 사장님이 정의한 클릭·다운로드 추적

    5초마다 자동 갱신. Realtime 메뉴 = 지금 이 순간 누가 어느 페이지 보고 있나.


    7. 도메인 연결과 함께 처리해야 하는 이유

    처음 트래커 받으면 URL이 http://192.168.0.x:3001/script.js (LAN IP). 이건:
    – HTTP → 브라우저 Mixed Content 차단
    – LAN IP → 외부 방문자 PC에서 해석 불가

    Umami는 도메인 연결(9편) 후에 활성화. analytics.sticknstone.org로 외부 노출돼야 작동.


    FAQ

    Q. Umami 무료 클라우드 플랜은?
    Umami Cloud는 월 $9~. self-hosted는 무제한 무료. 미니PC 있으면 self-hosted가 답.

    Q. Google Analytics에서 마이그레이션 가능?
    과거 데이터 import 없음. 새 시작. 단 두 도구 동시 가동도 가능 (트래커 둘 다 박음).

    Q. 한국 PIPA(개인정보보호법) 신경 써야 하나?
    Umami는 IP 주소를 저장하지 않음 (해시만), 쿠키 없음. PIPA 면제 대상.

    Q. 모바일 앱은?
    공식 앱 없음. 모바일 웹은 반응형이라 폰에서도 잘 보임.

    Q. 데이터를 CSV로 추출 가능?
    대시보드에서 CSV·JSON export. API도 제공.


    다음 편 예고

    6편 — 도메인 사기: Cloudflare Registrar. 가비아·후이즈 두고 Cloudflare에서 산 이유 (가격·관리 통합·향후 Tunnel 연결).


    한 줄 정리

    Google Analytics의 진짜 비용은 사용자 데이터 외부화. Umami self-hosted = 미니PC에 5분 Docker + WP mu-plugin 자동 주입 = 데이터 주권 + 쿠키 없음 + 같은 정보.