🧩 BE

개별 기사 데이터 분석 조회수 오차 이슈 (1)

Assigned To
Date
2026/02/11
Status
Done
Type
Issue
Server
Infra
Table of contents

Issue Point

개별 기사 데이터 분석 기능에서 dimension GA4 data API 지연 이슈

SELECT id, title, published_at, view_count, category_1depth, category_2depth FROM donga_article WHERE published_at >= '2026-02-11' ORDER BY published_at desc LIMIT 70;
SQL
복사
위의 쿼리로 데이터 집계 결과, 다음의 결과 출력
약 2시간 이전의 데이터는 수집이 되지 않고 있음 (13:41:00 데이터 15:35:00 부터 수집)
→ 이 부분은 람다코드 수집기간 조정으로 해결이 가능할 것 같음.

RunRealtimeRequest

async def query_metrics( client: "GoogleAnalyticsClient", article_id: str, start_date: str, end_date: str ): """ 기사 지표 집계 쿼리 실행 (KPI Aggregation Query) 조회수, 세션 시간, 스크롤 깊이 등의 지표를 집계하기 위한 쿼리 Args: client: GoogleAnalyticsClient 인스턴스 article_id: 기사 ID start_date: 시작 날짜 (YYYY-MM-DD) end_date: 종료 날짜 (YYYY-MM-DD) Returns: GA API raw response """ request = RunReportRequest( property=f"properties/{client.property_id}", dimensions=[ Dimension(name=DIMENSION_CONTENT_ID), ], metrics=[ Metric(name=METRIC_SCREEN_PAGE_VIEWS), Metric(name=METRIC_USER_ENGAGEMENT_DURATION), Metric(name=METRIC_SCROLL_DEPTH_AMOUNT), Metric(name=METRIC_SESSIONS), Metric(name=METRIC_EVENT_COUNT), ], date_ranges=[DateRange(start_date=start_date, end_date=end_date)], dimension_filter=FilterExpression( filter=Filter( field_name=DIMENSION_CONTENT_ID, string_filter=Filter.StringFilter(value=article_id) ) ), limit=METRICS_QUERY_LIMIT ) return await client.beta_client.run_report(request)
Python
복사

GA4, donga.com 수집 조회수 차이

db상의 donga_article table과 ga4쪽 donga 조회수 가 많이 차이나는 문제
실제 데이터 까보니 category_1depth, category_2depth도 null인 데이터가 많았음.
그리고 조회수에서 크게는 10000개 가까이, 1000개 이상 조회수가 차이나는 데이터가 있었음.
유진 매니저님이 월간 데이터 집계해서 보여주셨는데, lambda 서비스 터졌던 시점 (24~27일) 전후로 누락 데이터가 많음 → 이건 그냥 그때 데이터 수집을 제대로 못해서 터진 것 같음.
SQS (local_workers) 로그 데이터 확인
로컬 WPS 수집 스케줄링 간격 확인, 수집 범위(기간) 확인
24~30일 사이 데이터 다시 수동 머지 시도 후 기사 개수 비교 (혹시 기사 수집 자체가 누락되었을까봐)
현재 조회수
lambda(get_donga_articles) 로그 데이터 확인
→ 기사 개수는 동일함. 따라서 기사 수집에는 문제가 없었으나 추후 조회수 업데이트가 되지 않아 조회수 차이가 발생한 것으로 보임.

Detail

파이프라인

1.
local-workers (WPS 스크래퍼)
WPS API 조회: 오늘 기준 7일 전 ~ 오늘 (기사 목록)
결과를 2개 SQS로 나눠서 전송:
전체 기사 → all-donga-article-today (전체 파이프라인용)
8~30일 전 기사 ID만 필터링 → donga-article-ids-for-view-update (조회수 업데이트용)
2.
get_donga_analytics Lambda
Trigger: SQS (all-donga-article-today)
GA4 조회 범위: date_range=60 (기본값, 60일치 GA 데이터)
수집 항목: view_count, duration, scroll_depth, category, click_events, thumbnail 등 전체
대상 기사: 최근 0~7일 전 기사
3.
get_donga_view_count Lambda
Trigger: SQS (donga-article-ids-for-view-update)
GA4 조회 범위: date_range=30
수집 항목: view_count, duration, scroll_depth
대상 기사: 8~30일 전 기사
문제점
WPS API가 7일치만 가져오는데, 조회수 업데이트 필터는 8~30일 전 기사를 찾고있음. 7일 안에는 8~30일 전 기사가 없으니까 filter_articles_for_view_update()가 항상 빈 리스트를 반환.

Solution

희래님 advice
오히려 7일간 데이터보다, 2달로 했을때 데이터가 더 적게 나온결과가 있었다. 그 부분 참고해서 로직적으로 어떤 문제가 있을지 찾아보는게 맞는 것 같다.
→ 현재 7일 ⇒ 30일로 데이터 수집 범위 늘리기. ga4 view count update 쿼리 용량 확인해.(유진님한테 ga4 토큰 개수(API quota) 확인해보기) 각각에 대한 조회수 비교.

변경점

get_donga_view_count/handler.py
line 53: date_range=7date_range=30으로 조정해서 한 번 돌려보기
local-workers
line 131: VIEW_DATE_RANGE=30VIEW_DATE_UPDATE=30
1/29 ~ 1/31 기간 코드 실행 결과 : 예상값 9,598 / 실제값 9,598