문서/고급/분석 및 수익 추적
AI: $0.01사람: 무료

분석 및 수익 추적

AI 에이전트의 사용 패턴을 분석하고 수익 지표를 추적하여 콘텐츠 전략을 최적화하세요.

참고: 아래 코드 예제들은 개념적 구현을 보여줍니다. 실제 구현은 사용하는 데이터베이스와 분석 도구에 따라 달라질 수 있습니다.

핵심 지표

x402를 통해 추적할 수 있는 핵심 비즈니스 지표입니다.

총 수익

AI 에이전트로부터 발생한 전체 USDC 수익을 추적합니다.

고유 에이전트 수

콘텐츠에 접근한 고유한 AI 에이전트의 수를 파악합니다.

요청 빈도

시간대별, 일별, 주별 요청 패턴을 분석합니다.

인기 콘텐츠

가장 많이 요청되는 문서와 경로를 식별합니다.

데이터 수집

미들웨어에서 결제 이벤트를 캡처하여 분석 데이터를 수집합니다.

// analytics.ts
// 결제 이벤트를 수집하고 저장하는 분석 모듈

import { PaymentEvent } from "x402-middleware";

// 결제 이벤트 타입 정의
interface AnalyticsEvent {
  timestamp: Date;
  path: string;           // 요청된 문서 경로
  agentId: string;        // AI 에이전트 식별자
  amount: number;         // 결제 금액 (USDC)
  txHash: string;         // 블록체인 트랜잭션 해시
  network: string;        // 사용된 네트워크 (예: "base")
  userAgent: string;      // 에이전트 User-Agent 헤더
}

// 결제 완료 시 호출되는 콜백 함수
export async function trackPayment(event: PaymentEvent): Promise<void> {
  const analyticsEvent: AnalyticsEvent = {
    timestamp: new Date(),
    path: event.request.path,
    agentId: event.payment.from,      // 결제자 지갑 주소
    amount: event.payment.amount,
    txHash: event.payment.txHash,
    network: event.payment.network,
    userAgent: event.request.headers["user-agent"] || "unknown",
  };

  // 데이터베이스에 저장
  // 사용하는 DB에 맞게 구현 (PostgreSQL, MongoDB 등)
  await db.collection("x402_payments").insertOne(analyticsEvent);

  // 실시간 대시보드 업데이트 (선택사항)
  await updateRealtimeDashboard(analyticsEvent);
}

수익 대시보드

수집된 데이터를 기반으로 수익 지표를 계산합니다.

예제

수익 집계 쿼리

// revenue-queries.ts
// 수익 지표를 계산하는 쿼리 함수들

// 기간별 총 수익 계산
export async function getTotalRevenue(
  startDate: Date,
  endDate: Date
): Promise<number> {
  const result = await db.collection("x402_payments").aggregate([
    {
      $match: {
        timestamp: { $gte: startDate, $lte: endDate }
      }
    },
    {
      $group: {
        _id: null,
        total: { $sum: "$amount" }
      }
    }
  ]).toArray();

  return result[0]?.total || 0;
}

// 일별 수익 추이
export async function getDailyRevenue(days: number = 30) {
  const startDate = new Date();
  startDate.setDate(startDate.getDate() - days);

  return db.collection("x402_payments").aggregate([
    {
      $match: { timestamp: { $gte: startDate } }
    },
    {
      $group: {
        _id: {
          $dateToString: { format: "%Y-%m-%d", date: "$timestamp" }
        },
        revenue: { $sum: "$amount" },
        requests: { $sum: 1 }
      }
    },
    { $sort: { _id: 1 } }
  ]).toArray();
}

// 인기 콘텐츠 TOP 10
export async function getTopContent(limit: number = 10) {
  return db.collection("x402_payments").aggregate([
    {
      $group: {
        _id: "$path",
        revenue: { $sum: "$amount" },
        requests: { $sum: 1 },
        uniqueAgents: { $addToSet: "$agentId" }
      }
    },
    {
      $project: {
        path: "$_id",
        revenue: 1,
        requests: 1,
        uniqueAgents: { $size: "$uniqueAgents" }
      }
    },
    { $sort: { revenue: -1 } },
    { $limit: limit }
  ]).toArray();
}

에이전트 분석

어떤 AI 에이전트가 콘텐츠를 가장 많이 소비하는지 파악합니다.

// agent-analytics.ts
// AI 에이전트별 사용 패턴 분석

// 에이전트별 사용량 및 지출 현황
export async function getAgentStats() {
  return db.collection("x402_payments").aggregate([
    {
      $group: {
        _id: "$agentId",
        totalSpent: { $sum: "$amount" },
        requestCount: { $sum: 1 },
        firstSeen: { $min: "$timestamp" },
        lastSeen: { $max: "$timestamp" },
        contentAccessed: { $addToSet: "$path" }
      }
    },
    {
      $project: {
        agentId: "$_id",
        totalSpent: 1,
        requestCount: 1,
        firstSeen: 1,
        lastSeen: 1,
        uniquePages: { $size: "$contentAccessed" },
        avgSpentPerRequest: {
          $divide: ["$totalSpent", "$requestCount"]
        }
      }
    },
    { $sort: { totalSpent: -1 } }
  ]).toArray();
}

// User-Agent 기반 에이전트 유형 분류
export function categorizeAgent(userAgent: string): string {
  const patterns = [
    { regex: /Claude/i, category: "Claude (Anthropic)" },
    { regex: /GPT|OpenAI/i, category: "GPT (OpenAI)" },
    { regex: /Cursor/i, category: "Cursor IDE" },
    { regex: /GitHub Copilot/i, category: "GitHub Copilot" },
    { regex: /Perplexity/i, category: "Perplexity AI" },
  ];

  for (const { regex, category } of patterns) {
    if (regex.test(userAgent)) return category;
  }
  return "Other AI Agent";
}

// 에이전트 유형별 통계
export async function getAgentTypeDistribution() {
  const payments = await db.collection("x402_payments")
    .find({})
    .toArray();

  const distribution: Record<string, { count: number; revenue: number }> = {};

  for (const payment of payments) {
    const category = categorizeAgent(payment.userAgent);
    if (!distribution[category]) {
      distribution[category] = { count: 0, revenue: 0 };
    }
    distribution[category].count++;
    distribution[category].revenue += payment.amount;
  }

  return distribution;
}

시각화 예시

수집된 데이터를 대시보드로 시각화하는 예시입니다.

이번 달 수익

$127.45

+23% vs 지난달

총 요청 수

12,745

+15% vs 지난달

고유 에이전트

234

+8% vs 지난달

인기 콘텐츠 TOP 5

1/docs/api/authentication
1234 요청$12.34
2/docs/guides/quickstart
987 요청$9.87
3/docs/advanced/custom-pricing
756 요청$15.12
4/docs/api/webhooks
543 요청$5.43
5/docs/enterprise/security
321 요청$16.05

베스트 프랙티스

1

실시간 모니터링

이상 패턴(갑작스러운 트래픽 증가, 실패율 상승 등)을 즉시 감지할 수 있도록 실시간 알림을 설정하세요.

2

데이터 보존 정책

상세 로그는 90일, 집계 데이터는 영구 보존하는 등 효율적인 데이터 관리 정책을 수립하세요.

3

A/B 테스트

다양한 가격 전략을 테스트하고 수익 최적화를 위한 데이터 기반 의사결정을 하세요.

4

프라이버시 고려

에이전트 ID는 지갑 주소로 익명화되어 있지만, 사용 패턴 데이터는 신중하게 다루세요.

프로 팁

인기 콘텐츠의 가격을 올리기보다는, 인기 콘텐츠와 관련된 심화 콘텐츠를 만들어 추가 수익을 창출하세요. 이 전략이 장기적으로 더 높은 수익을 가져옵니다.