Google Analytics Data API 설정하기 - 프로그래밍으로 GA 데이터 조회

English (N/A)

Google Analytics 대시보드에서 데이터를 확인하는 것도 좋지만, 프로그래밍 방식으로 데이터를 조회하고 싶을 때가 있다. 자동화된 리포트를 만들거나, 슬랙 봇으로 실시간 방문자 수를 확인하거나, 블로그 인기 포스트를 자동으로 추천하는 등의 작업을 하려면 Google Analytics Data API가 필요하다.

이 글에서는 Google Analytics Data API를 설정하고 사용하는 방법을 처음부터 끝까지 정리한다.

Google Analytics Data API란

Google Analytics Data API는 GA4 (Google Analytics 4) 데이터를 프로그래밍 방식으로 조회할 수 있는 API다.

할 수 있는 것:

  • 페이지뷰, 방문자 수 등 기본 지표 조회
  • 트래픽 소스, 국가, 디바이스 등 차원 데이터 분석
  • 실시간 데이터 조회
  • 커스텀 리포트 생성

활용 사례:

  • 슬랙/디스코드 봇으로 일일 리포트 자동 전송
  • 블로그에 "인기 포스트" 위젯 자동 업데이트
  • 데이터 시각화 대시보드 구축
  • AI 봇이 블로그 통계 질문에 답변

사전 준비

  • Google Cloud 계정
  • Google Analytics GA4 속성 관리자 권한

1단계: Google Cloud 프로젝트 생성

Google Analytics Data API를 사용하려면 Google Cloud 프로젝트가 필요하다.

  1. https://console.cloud.google.com 접속
  2. 상단 프로젝트 선택 드롭다운 클릭
  3. 새 프로젝트 클릭
  4. 프로젝트 이름 입력 (예: blog-analytics)
  5. 만들기 클릭

프로젝트가 생성되면 자동으로 선택된다.

2단계: Analytics Data API 활성화

  1. 왼쪽 메뉴에서 API 및 서비스라이브러리 클릭
  2. 검색창에 "Google Analytics Data API" 입력
  3. Google Analytics Data API 선택
  4. 사용 설정 클릭

API가 활성화되면 이 프로젝트에서 GA 데이터를 조회할 수 있다.

3단계: 서비스 계정 생성

서비스 계정은 애플리케이션이 API를 호출할 때 사용하는 특수한 Google 계정이다.

  1. API 및 서비스사용자 인증 정보 클릭
  2. 상단 사용자 인증 정보 만들기서비스 계정 선택
  3. 서비스 계정 정보 입력:
    • 이름: blog-analytics-reader
    • 설명: "Google Analytics 데이터 읽기용"
  4. 만들고 계속하기 클릭
  5. 역할 선택은 건너뛰고 계속완료 클릭

서비스 계정이 생성되었다.

4단계: 서비스 계정 키 발급

애플리케이션이 서비스 계정으로 인증하려면 JSON 키 파일이 필요하다.

  1. 방금 만든 서비스 계정 클릭
  2. 탭으로 이동
  3. 키 추가새 키 만들기 클릭
  4. 키 유형: JSON 선택
  5. 만들기 클릭

JSON 파일이 자동으로 다운로드된다. 이 파일은 비밀번호와 같으므로 안전한 곳에 보관해야 한다.

JSON 파일 예시:

{
  "type": "service_account",
  "project_id": "blog-analytics-123456",
  "private_key_id": "abc123...",
  "private_key": "-----BEGIN PRIVATE KEY-----\n...",
  "client_email": "blog-analytics-reader@blog-analytics-123456.iam.gserviceaccount.com",
  "client_id": "123456789...",
  ...
}

client_email 값을 다음 단계에서 사용한다.

5단계: Google Analytics 권한 부여

서비스 계정에 Google Analytics 데이터를 읽을 수 있는 권한을 부여해야 한다.

  1. https://analytics.google.com 접속
  2. 왼쪽 하단 관리 (톱니바퀴 아이콘) 클릭
  3. 속성 열에서 속성 액세스 관리 클릭
  4. 오른쪽 상단 + 버튼 → 사용자 추가 클릭
  5. 이메일 주소에 서비스 계정 이메일 입력
    • JSON 파일의 client_email
    • 예: blog-analytics-reader@blog-analytics-123456.iam.gserviceaccount.com
  6. 역할: 뷰어 선택
  7. 추가 클릭

이제 서비스 계정이 이 Google Analytics 속성의 데이터를 읽을 수 있다.

6단계: Property ID 확인

API 호출 시 필요한 Property ID를 확인한다.

  1. Google Analytics → 관리 클릭
  2. 속성 선택
  3. 속성 설정 클릭
  4. 상단에 표시되는 속성 ID 복사
    • 예: 123456789

이 숫자를 기록해둔다.

7단계: API 테스트

Node.js로 간단한 테스트를 해보자.

패키지 설치

npm install @google-analytics/data

테스트 스크립트

test-ga.js 파일을 만든다:

const { BetaAnalyticsDataClient } = require('@google-analytics/data');

const analyticsDataClient = new BetaAnalyticsDataClient({
  keyFilename: './your-service-account-key.json',
});

const propertyId = 'YOUR_PROPERTY_ID'; // 6단계에서 확인한 ID

async function runReport() {
  try {
    const [response] = await analyticsDataClient.runReport({
      property: `properties/${propertyId}`,
      dateRanges: [
        {
          startDate: '7daysAgo',
          endDate: 'today',
        },
      ],
      dimensions: [
        {
          name: 'pagePath',
        },
      ],
      metrics: [
        {
          name: 'screenPageViews',
        },
      ],
      limit: 10,
    });

    console.log('지난 7일간 페이지뷰 Top 10:');
    console.log('');
    response.rows.forEach((row) => {
      const pagePath = row.dimensionValues[0].value;
      const pageViews = row.metricValues[0].value;
      console.log(`${pagePath}: ${pageViews}회`);
    });
  } catch (error) {
    console.error('에러 발생:', error.message);
  }
}

runReport();

실행

node test-ga.js

결과:

지난 7일간 페이지뷰 Top 10:

/: 1523회
/posts/nextjs-guide: 342회
/posts/react-hooks: 287회
/about: 156회
...

성공적으로 데이터가 조회되면 설정 완료다!

실전 활용 예제

실시간 방문자 수 조회

async function getRealtimeUsers() {
  const [response] = await analyticsDataClient.runRealtimeReport({
    property: `properties/${propertyId}`,
    metrics: [
      {
        name: 'activeUsers',
      },
    ],
  });

  const activeUsers = response.rows?.[0]?.metricValues?.[0]?.value || 0;
  console.log(`현재 실시간 방문자: ${activeUsers}명`);
}

인기 포스트 Top 5

async function getTopPosts() {
  const [response] = await analyticsDataClient.runReport({
    property: `properties/${propertyId}`,
    dateRanges: [{ startDate: '30daysAgo', endDate: 'today' }],
    dimensions: [{ name: 'pagePath' }, { name: 'pageTitle' }],
    metrics: [{ name: 'screenPageViews' }],
    orderBys: [{ metric: { metricName: 'screenPageViews' }, desc: true }],
    limit: 5,
  });

  console.log('최근 30일 인기 포스트 Top 5:');
  response.rows.forEach((row, index) => {
    const title = row.dimensionValues[1].value;
    const views = row.metricValues[0].value;
    console.log(`${index + 1}. ${title}: ${views}회`);
  });
}

트래픽 소스 분석

async function getTrafficSources() {
  const [response] = await analyticsDataClient.runReport({
    property: `properties/${propertyId}`,
    dateRanges: [{ startDate: '7daysAgo', endDate: 'today' }],
    dimensions: [{ name: 'sessionSource' }],
    metrics: [{ name: 'sessions' }],
    orderBys: [{ metric: { metricName: 'sessions' }, desc: true }],
  });

  console.log('지난 7일 트래픽 소스:');
  response.rows.forEach((row) => {
    const source = row.dimensionValues[0].value;
    const sessions = row.metricValues[0].value;
    console.log(`${source}: ${sessions}세션`);
  });
}

보안 주의사항

JSON 키 파일 관리

서비스 계정 JSON 키는 절대 Git에 커밋하면 안 된다.

.gitignore에 추가:

# Google Cloud Service Account
*-service-account-key.json

환경 변수 사용

프로덕션에서는 환경 변수로 관리:

const analyticsDataClient = new BetaAnalyticsDataClient({
  credentials: {
    client_email: process.env.GA_CLIENT_EMAIL,
    private_key: process.env.GA_PRIVATE_KEY.replace(/\\n/g, '\n'),
  },
});

권한 최소화

서비스 계정에는 필요한 최소한의 권한만 부여한다. 데이터 조회만 필요하면 뷰어 역할로 충분하다.

할당량 및 제한사항

Google Analytics Data API에는 할당량이 있다.

무료 할당량 (일일):

  • Core Reporting API: 50,000 요청
  • Realtime Reporting API: 10,000 요청

일반적인 블로그 자동화 용도로는 충분하다. 할당량을 초과하면 RESOURCE_EXHAUSTED 에러가 발생한다.

트러블슈팅

"User does not have sufficient permissions" 에러

Google Analytics에서 서비스 계정 이메일에 권한을 제대로 부여했는지 확인한다. 뷰어 이상의 역할이 필요하다.

"Property not found" 에러

Property ID가 정확한지 확인한다. GA4 속성의 ID여야 하며, properties/ 접두사를 붙여야 한다.

property: `properties/123456789` // 올바름
property: `123456789` // 틀림

JSON 키 파일 경로 에러

키 파일 경로가 정확한지 확인한다. 상대 경로를 사용할 때는 현재 작업 디렉토리를 고려해야 한다.

정리

Google Analytics Data API를 설정하면 블로그 통계를 자유롭게 활용할 수 있다.

설정 단계 요약:

  1. Google Cloud 프로젝트 생성
  2. Analytics Data API 활성화
  3. 서비스 계정 생성 및 키 발급
  4. Google Analytics 권한 부여
  5. Property ID 확인
  6. API 테스트

한 번 설정해두면 슬랙 봇, 디스코드 봇, 자동화 리포트 등 다양하게 활용할 수 있다. 블로그 운영을 데이터 기반으로 할 수 있게 되는 셈이다.

참고