Communitygithub.com

Microck/ordinary-claude-skills

이 스킬은 사용자가 @dotcms/analytics, sdk-analytics, analytics SDK를 설치, 구성 또는 설정하거나, Next.js 또는 React 프로젝트에 분석 추적을 추가하거나 설치를 요청할 때 사용하세요.

ordinary-claude-skills란 무엇인가요?

이 스킬은 Next.js 또는 React 프로젝트에서 `@dotcms/analytics` SDK를 설치하고 구성하는 방법을 단계별로 제공합니다. `@dotcms/analytics` SDK는 dotCMS의 공식 JavaScript 라이브러리로, 자동 페이지 조회 추적, 전환 추적, 맞춤 이벤트 추적, 세션 관리, 익명 사용자 식별, UTM 캠페인 매개변수 추적, 성능 최적화를 위한 이벤트 배치/대기열 기능을 제공합니다. 핵심 구성 요소로는 자동 페이지 조회 추적을 위한 `<DotContentAnalytics />` 컴포넌트와 수동 이벤트 추적을 위한 `useContentAnalytics(config)` 훅이 있습니다. 이 훅은 항상 설정 매개변수를 필요로 하며, React 컨텍스트를 사용하지 않으므로 각 컴포넌트에 설정 파일을 가져와야 합니다. 스킬은 환경 변수 설정, 중앙 집중식 구성 파일 생성, `DotContentAnalytics`를 레이아웃에 추가하는 방법, 그리고 다양한 사용 사례(예: 전자상거래 구매, 리드 생성, 비디오 상호작용)에 대한 코드 예제를 포함한 완전한 설치 가이드를 제공합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Microck/ordinary-claude-skills/tree/HEAD/skills_all/sdk-analytics-installer

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

DotCMS SDK Analytics 설치 가이드

이 스킬은 /core/examples/nextjs에 있는 Next.js 예제 프로젝트에서 @dotcms/analytics SDK를 설치하고 구성하는 단계별 지침을 제공합니다.

개요

@dotcms/analytics SDK는 콘텐츠 인식 이벤트 및 분석을 추적하기 위한 dotCMS의 공식 JavaScript 라이브러리입니다. 다음을 제공합니다:

  • 자동 페이지 조회 추적
  • 전환 추적(구매, 다운로드, 가입 등)
  • 맞춤 이벤트 추적
  • 세션 관리(30분 타임아웃)
  • 익명 사용자 식별 추적
  • UTM 캠페인 매개변수 추적
  • 성능 최적화를 위한 이벤트 배치/대기열 처리

🚨 중요: 분석 구성 요소 이해

중요: useContentAnalytics()는 항상 config를 매개변수로 필요로 합니다. 이 훅은 React Context를 사용하지 않습니다.

구성 요소 역할

  1. <DotContentAnalytics /> - 자동 페이지 조회 추적기

    • 유일한 목적: 경로 변경 시 페이지 조회를 자동으로 추적
    • React Context Provider가 아님
    • 하위 컴포넌트에 config를 제공하지 않음
    • 자동 페이지 조회 추적을 위해 루트 레이아웃에 배치
  2. useContentAnalytics(config) - 수동 추적 훅

    • 맞춤 이벤트 추적에 사용
    • 항상 config 매개변수 필요
    • 사용하는 각 컴포넌트에 중앙 집중식 config를 가져오기

올바른 사용 패턴

// 1. 중앙 집중식 설정 파일 생성 (한 번)
// /src/config/analytics.config.js
export const analyticsConfig = {
  siteAuth: process.env.NEXT_PUBLIC_DOTCMS_ANALYTICS_SITE_KEY,
  server: process.env.NEXT_PUBLIC_DOTCMS_ANALYTICS_HOST,
  autoPageView: true,
  debug: process.env.NEXT_PUBLIC_DOTCMS_ANALYTICS_DEBUG === "true",
};

// 2. 레이아웃에 DotContentAnalytics 추가 (선택 사항)
// /src/app/layout.js
import { DotContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";

<DotContentAnalytics config={analyticsConfig} />;

// 3. 훅을 사용하는 모든 컴포넌트에서 config 가져오기
// /src/components/MyComponent.js
import { useContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";

const { track } = useContentAnalytics(analyticsConfig); // ✅ Config 필수!

왜 config를 중앙 집중화하나요? 각 컴포넌트에 가져와야 하지만, 중앙 집중화하면 중복을 방지하고 업데이트가 쉬워집니다.

빠른 설정 요약

전체 설정 흐름은 다음과 같습니다:

1. 패키지 설치
   └─> npm install @dotcms/analytics

2. 중앙 집중식 설정 파일 생성
   └─> /src/config/analytics.config.js
       └─> export const analyticsConfig = { siteAuth, server, debug, ... }

3. (선택 사항) DotContentAnalytics 추가
   └─> /src/app/layout.js
       └─> import { analyticsConfig } from "@/config/analytics.config"
       └─> <DotContentAnalytics config={analyticsConfig} />

4. 훅을 사용하는 모든 컴포넌트에 config 가져오기
   └─> /src/components/MyComponent.js
       └─> import { analyticsConfig } from "@/config/analytics.config"
       └─> const { track } = useContentAnalytics(analyticsConfig) // ✅ Config 필수!

중앙 집중식 설정의 주요 이점:

  • ✅ 구성 값의 단일 진실 공급원
  • ✅ 한 곳에서 환경 변수 업데이트가 용이
  • ✅ 모든 컴포넌트에서 일관된 설정
  • ✅ 모든 파일에서 설정을 중복하는 것보다 낫습니다

설치 단계

1. 패키지 설치

Next.js 예제 디렉토리로 이동하여 패키지를 설치합니다:

cd /core/examples/nextjs
npm install @dotcms/analytics

2. 설치 확인

package.json에 패키지가 추가되었는지 확인합니다:

grep "@dotcms/analytics" package.json

예상 출력: "@dotcms/analytics": "latest" 또는 유사한 버전.

3. 중앙 집중식 분석 설정 생성

분석 설정을 중앙 집중화하기 위해 전용 설정 파일을 만듭니다. 이렇게 하면 애플리케이션 전체에서 유지 관리 및 재사용이 쉬워집니다.

파일: /core/examples/nextjs/src/config/analytics.config.js

/**
 * dotCMS 콘텐츠 분석을 위한 중앙 집중식 설정
 *
 * 이 설정은 다음에서 사용됩니다:
 * - layout.js의 DotContentAnalytics provider
 * - 단독으로 사용될 때 useContentAnalytics() 훅 (선택 사항)
 *
 * 필요한 환경 변수:
 * - NEXT_PUBLIC_DOTCMS_ANALYTICS_SITE_KEY
 * - NEXT_PUBLIC_DOTCMS_ANALYTICS_HOST
 * - NEXT_PUBLIC_DOTCMS_ANALYTICS_DEBUG (선택 사항)
 */
export const analyticsConfig = {
  siteAuth: process.env.NEXT_PUBLIC_DOTCMS_ANALYTICS_SITE_KEY,
  server: process.env.NEXT_PUBLIC_DOTCMS_ANALYTICS_HOST,
  autoPageView: true, // 경로 변경 시 페이지 조회 자동 추적
  debug: process.env.NEXT_PUBLIC_DOTCMS_ANALYTICS_DEBUG === "true",
  queue: {
    eventBatchSize: 15, // 15개 이벤트가 대기 중일 때 전송
    flushInterval: 5000, // 또는 5초마다 전송 (ms)
  },
};

이 접근 방식의 이점:

  • ✅ 분석 설정의 단일 진실 공급원
  • ✅ 컴포넌트 전체에서 쉽게 가져와서 재사용
  • ✅ 중앙 집중식 환경 변수 관리
  • ✅ 타입 안전 및 IDE 자동 완성 친화적
  • ✅ 단위 테스트에서 쉽게 테스트 및 모킹 가능

4. Next.js 레이아웃에서 분석 설정

중앙 집중식 config를 사용하여 분석 provider를 포함하도록 루트 레이아웃 파일을 업데이트합니다.

파일: /core/examples/nextjs/src/app/layout.js

import { Inter } from "next/font/google";
import "./globals.css";

const inter = Inter({ subsets: ["latin"] });

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body className={inter.className}>{children}</body>
    </html>
  );
}

분석이 추가된 업데이트 버전 (중앙 집중식 config 사용):

import { Inter } from "next/font/google";
import { DotContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";
import "./globals.css";

const inter = Inter({ subsets: ["latin"] });

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body className={inter.className}>
        <DotContentAnalytics config={analyticsConfig} />
        {children}
      </body>
    </html>
  );
}

4. 환경 변수 추가

Next.js 프로젝트 루트에 .env.local 파일을 생성하거나 업데이트합니다:

파일: /core/examples/nextjs/.env.local

# dotCMS 분석 설정
NEXT_PUBLIC_DOTCMS_SITE_AUTH=your_site_auth_key_here
NEXT_PUBLIC_DOTCMS_SERVER=https://your-dotcms-server.com

중요: your_site_auth_key_here를 실제 dotCMS Analytics 사이트 인증 키로 바꾸세요. 이 키는 dotCMS 인스턴스의 Analytics 앱에서 얻을 수 있습니다.

5. .env.local을 .gitignore에 추가

환경 파일이 버전 관리에 커밋되지 않도록 합니다:

# 이미 무시되고 있는지 확인
grep ".env.local" /core/examples/nextjs/.gitignore

# 존재하지 않으면 추가
echo ".env.local" >> /core/examples/nextjs/.gitignore

사용 예제

기본 설정 (자동 페이지 조회)

위 설정을 사용하면 경로가 변경될 때마다 페이지 조회가 자동으로 추적됩니다. 추가 코드가 필요 없습니다!

추가 데이터가 포함된 수동 페이지 조회

추가 컨텍스트와 함께 페이지 조회를 추적합니다:

"use client";

import { useEffect } from "react";
import { useContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";

function MyComponent() {
  // ✅ 항상 config 전달 - 중앙 집중식 설정 파일에서 가져오기
  const { pageView } = useContentAnalytics(analyticsConfig);

  useEffect(() => {
    // 사용자 정의 데이터로 페이지 조회 추적
    pageView({
      contentType: "blog",
      category: "technology",
      author: "john-doe",
      wordCount: 1500,
    });
  }, []);

  return <div>여기에 콘텐츠</div>;
}

맞춤 이벤트 추적

특정 사용자 상호작용 추적:

"use client";

import { useContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";

function CallToActionButton() {
  // ✅ 항상 config 전달 - 중앙 집중식 설정 파일에서 가져오기
  const { track } = useContentAnalytics(analyticsConfig);

  const handleClick = () => {
    // 맞춤 이벤트 추적
    track("cta-click", {
      button: "지금 구매",
      location: "hero-section",
      price: 299.99,
    });
  };

  return <button onClick={handleClick}>지금 구매</button>;
}

양식 제출 추적

"use client";

import { useContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";

function ContactForm() {
  const { track } = useContentAnalytics(analyticsConfig);

  const handleSubmit = async (e) => {
    e.preventDefault();

    // 양식 제출 추적
    track("form-submit", {
      formName: "contact-form",
      formType: "lead-gen",
      source: "homepage",
    });

    // 양식 제출 처리...
  };

  return <form onSubmit={handleSubmit}>{/* 양식 필드 */}</form>;
}

비디오/미디어 상호작용 추적

"use client";

import { useContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";

function VideoPlayer({ videoId }) {
  const { track } = useContentAnalytics(analyticsConfig);

  const handlePlay = () => {
    track("video-play", {
      videoId,
      duration: 120,
      autoplay: false,
    });
  };

  const handleComplete = () => {
    track("video-complete", {
      videoId,
      watchPercentage: 100,
    });
  };

  return (
    <video onPlay={handlePlay} onEnded={handleComplete}>
      {/* 비디오 소스 */}
    </video>
  );
}

전자상거래 제품 조회 추적

"use client";

import { useEffect } from "react";
import { useContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";

function ProductPage({ product }) {
  const { track } = useContentAnalytics(analyticsConfig);

  useEffect(() => {
    // 제품 조회 추적
    track("product-view", {
      productId: product.sku,
      productName: product.title,
      category: product.category,
      price: product.price,
      inStock: product.inventory > 0,
    });
  }, [product]);

  return <div>{/* 제품 세부 정보 */}</div>;
}

전환 추적 (전자상거래 구매)

"use client";

import { useContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";

function CheckoutButton({ product, quantity }) {
  const { conversion } = useContentAnalytics(analyticsConfig);

  const handlePurchase = () => {
    // 체크아웃 로직 처리...
    // 결제 확인 후:

    // 성공적인 구매 후에만 전환 추적
    conversion("purchase", {
      value: product.price * quantity,
      currency: "USD",
      productId: product.sku,
      productName: product.title,
      quantity: quantity,
      category: product.category,
    });
  };

  return <button onClick={handlePurchase}>구매 완료</button>;
}

전환 추적 (리드 생성)

"use client";

import { useContentAnalytics } from "@dotcms/analytics/react";
import { analyticsConfig } from "@/config/analytics.config";

function DownloadWhitepaper() {
  const { conversion } = useContentAnalytics(analyticsConfig);

  const handleDownload = () => {
    // 다운로드 로직 실행...
    // 다운로드가 성공적으로 완료된 후:

    // 성공적인 다운로드 후에만 전환 추적
    conversion("download", {
      fileType: "pdf",
      fileName: "whitepaper-2024.pdf",
      category: "lead-magnet",
    });
  };

  return (
    <button id="download-btn" onClick={handleDownload}>
      백서 다운로드
    </button>
  );
}

설정 옵션

분석 설정 객체

옵션유형필수기본값설명
siteAuthstring예-dotCMS Analytics의 사이트 인증 키
serverstring예-dotCMS 서버 URL
debugboolean아니오false디버깅을 위한 상세 로깅 활성화
autoPageViewboolean아니오true (React)경로 변경 시 페이지 조회 자동 추적
queueQueueConfig | false아니오기본 대기열 설정이벤트 배치 구성
impressionsImpressionConfig | boolean아니오false콘텐츠 노출 추적 (기본적으로 비활성화)
clicksboolean아니오false300ms 쓰로틀링이 있는 콘텐츠 클릭 추적 (기본적으로 비활성화)

대기열 설정

이벤트가 배치되고 전송되는 방식을 제어합니다:

옵션유형기본값설명
eventBatchSizenumber15배치당 최대 이벤트 수 - 도달 시 자동 전송
flushIntervalnumber5000플러시 사이의 시간 (ms)

대기열 비활성화 (즉시 전송):

const analyticsConfig = {
  siteAuth: "your_key",
  server: "https://your-server.com",
  queue: false, // 이벤트를 즉시 전송
};

노출 추적 설정

콘텐츠 가시성의 자동 추적을 제어합니다:

| 옵션 | 유형 | 기본값 | 설명

…

[요약됨]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬