Google Analytics 4에서 가져오기
GA4 수치를 가져오는 두 방법입니다. 일별 합계로 MousePlayer가 전체 중 얼마나 관측하는지 확인하고, BigQuery 내보내기의 개별 GA4 세션으로 녹화하지 못한 방문을 살펴봅니다.
1. 가져오는 내용과 제외하는 내용
두 경로 모두 자체 Google 계정에서 읽으며 각각 켭니다. 서로 다른 질문에 답하므로 둘 다 사용할 필요는 없습니다.
| 경로 | 가져오는 내용 | 용도 |
|---|---|---|
| Data API | 일별 합계: 세션, 사용자, 페이지 조회 및 참여 세션 | 관측 범위 확인. GA4는 3,000개 세션, MousePlayer는 40개를 녹화했다면 기준 수치가 없이는 차이도 알 수 없습니다. |
| BigQuery 가져오기 | 개별 GA4 세션 및 이벤트 | MousePlayer가 녹화하지 못한 방문에서 발생한 일. |
가져온 세션은 재생할 수 없습니다. GA4에는 페이지 스냅샷이나 마우스 움직임이 없어 재생을 만들 수 없습니다. 녹화 옆의 수치와 이벤트만 제공하며 그 이상의 기능으로 설명하지 않습니다.
가져온 데이터는 별도 테이블에 보관하며 녹화와 절대 섞지 않습니다. 섞으면 행동 프로필, 방문자 가치 및 마찰 분석 같은 모든 파생 수치의 의미가 조용히 바뀌어 어떤 행이 측정값이고 어떤 행이 가져온 값인지 알 수 없기 때문입니다.
2. 경로 1: Data API
속성 ID와 서비스 계정 키가 필요합니다.
속성 ID는 측정 ID가 아닙니다
가장 흔한 실패 원인이지만 Google 오류 메시지에는 명시되지 않습니다. 측정 ID 는 G-ABC123XYZ형식으로 추적 스니펫을 비롯한 여러 곳에 표시됩니다. 속성 ID 는 숫자로만 되어 있으며 관리의 속성 설정에만 표시됩니다. 필요한 것은 후자입니다. 전자를 입력하면 400 오류로 이어지지 않도록 안내와 함께 거부합니다.
서비스 계정 생성 및 권한 부여
- Google Cloud Console에서 서비스 계정을 만들고 JSON 키를 생성하세요.
- 같은 프로젝트에서 Google Analytics Data API를 활성화하세요.
- GA4의 관리, 속성 액세스 관리에서 서비스 계정 이메일을 뷰어로 추가하세요. 서비스 계정은 독립 사용자이므로 이 단계가 없으면 Google이 이유 설명 없이 403을 반환합니다.
JSON 파일 내용을 필드에 붙여 넣으세요. 암호화하여 저장하고 이후에는 축약해서만 표시합니다.
3. 경로 2: BigQuery 가져오기
GA4 원시 내보내기를 읽습니다. GA4의 관리, BigQuery 연결에서 한 번 설정해야 합니다. 테이블은 다음 날부터 생성됩니다 . 그전에는 가져올 데이터가 없는 것이 정상입니다.
입력할 내용
- 내보내기가 저장된 GCP 프로젝트 ID 입니다. MousePlayer 데이터를 내보내는 프로젝트와 같을 필요는 없습니다.
- 해당 데이터 세트 ID입니다. GA4의 이름 형식은
analytics_<propertyId>입니다. - 서비스 계정 키에 데이터 세트의 BigQuery Data Viewer 및 프로젝트의 BigQuery Job User 권한이 필요합니다. 읽기 권한이면 충분하므로 추가 권한은 부여하지 마세요.
비용 및 부담 주체
BigQuery는 읽은 바이트로 과금하며 비용은 사용자가 부담합니다. 따라서 실행마다 며칠만 읽고 쿼리를 한 번만 실행합니다. 두 번째 쿼리는 같은 테이블을 다시 읽기 때문입니다. 또한 엄격한 상한으로 비용이 커지기 전에 쿼리를 중단하며, 이 경우 전송 로그에 시간 범위가 너무 크다고 표시합니다.
실행 주기
기본 6시간마다 실행하며 최근 3일을 다시 가져옵니다. 임의의 설정이 아닙니다. GA4는 최대 48시간까지 보정하고 일별 내보내기는 다음 날 생성됩니다. 더 자주 요청해도 같은 수치만 받습니다.
4. 양쪽을 연결하는 식별자
또한 분석 브리지 를 GA4로 설정하면 MousePlayer가 매 세션에 _ga 쿠키의 클라이언트 ID를 기록합니다. 이는 BigQuery 내보내기의 user_pseudo_id와 정확히 같은 값입니다.
이 값으로 GA4 세션을 녹화에 매칭하고 같은 방문에서 GA4가 집계한 내용도 확인합니다. 브리지가 없으면 양쪽은 연결 없이 나란히 있을 뿐입니다.
이 필드는 setUserId()를 사용할 때 자체 고객 식별자도 담습니다. 둘 다 저장할 수는 없으며 Google 클라이언트 ID 또는 자체 번호 중 하나만 들어갑니다.
5. 동의, 보존 및 삭제
가져오는 데이터는 쿠키가 있었던 데이터
다음 값이 있는 행만 가져옵니다: user_pseudo_id . 방문자가 거부하면 GA4는 Consent Mode에서 쿠키 없는 히트를 보내며 해당 값이 없어 제외됩니다. 별도 확약은 필요하지 않습니다. 모델링한 추정 행도 같은 이유로 제외합니다. 추정치를 세션으로 저장하면 실제 없었던 방문을 저장하게 됩니다.
보존 기간
기본 180일이며 가져온 시점이 아닌 행이 나타내는 날짜부터 계산합니다. 매번 같은 날짜를 다시 가져오므로 그렇지 않으면 영원히 만료되지 않습니다.
삭제
방문자가 데이터 삭제를 요청하면 위 식별자로 귀속할 수 있는 범위에서 가져온 GA4 세션도 삭제합니다. 프로젝트를 삭제하면 어떤 녹화에도 속하지 않았던 행까지 모두 삭제합니다. 일별 녹화 보존 정리는 의도적으로 이 데이터를 처리하지 않습니다. GA4 데이터는 자체 보존 기간을 따르며 녹화는 먼저 만료됩니다.
6. 아무것도 도착하지 않을 때
매 실행은 실패를 포함한 결과를 연동 페이지의 전송 로그에 이해하기 쉬운 말로 기록합니다. 보통 부족한 내용이 이미 표시됩니다.
| 메시지 | 조치 |
|---|---|
| 속성 ID는 숫자만 허용 | 측정 ID를 입력했습니다. 올바른 번호는 GA4 속성 설정에 있습니다. |
| Data API에서 HTTP 403 반환 | 서비스 계정이 GA4 속성의 뷰어가 아니거나 GCP 프로젝트의 Data API가 활성화되지 않았습니다. |
| 데이터 세트 또는 내보내기 테이블 없음 | BigQuery 연결이 없거나 데이터 세트 이름이 다르거나 아직 하루가 지나지 않았습니다. |
| 액세스 거부(BigQuery) | 서비스 계정에 데이터 세트의 BigQuery Data Viewer 또는 프로젝트의 BigQuery Job User 권한이 없습니다. |
| 쿼리가 너무 많은 데이터를 읽을 예정 | 과금 전에 비용 상한으로 중단했습니다. 시간 범위를 줄이세요. |
| 시간 범위 내 세션 없음 | 오류가 아닙니다. 가져온 날짜에 동의한 세션이 없었습니다. |