logo hsb.horse

Architecture Decision Record

Partytown 및 Google Analytics(GA4) 도입 방침

GA4(G-WZ3RT34EZZ)를 Partytown 경유로 도입해 메인 스레드 부담을 줄이면서 페이지뷰 측정을 시작한다.

채택됨 #analytics #ga4 #partytown #performance #privacy

Partytown 및 Google Analytics(GA4) 도입 방침

결정

  • 트래픽 분석 도구로 Google Analytics 4(GA4)를 채택하고, 측정 ID는 G-WZ3RT34EZZ를 사용한다.
  • @astrojs/partytown을 도입해 type="text/partytown" 방식으로 GA 스크립트를 Web Worker로 오프로딩한다.
  • 측정 태그 출력 책임은 공통 레이어(Layout 하위 전용 컴포넌트)로 일원화한다.
  • 측정은 프로덕션 URL에서만 활성화하고, 로컬 개발/프리뷰 환경에서는 비활성화한다.
  • 초기 범위는 페이지뷰 측정으로 한정하고, 커스텀 이벤트 분류는 별도 ADR에서 정의한다.
  • 초기 도입에서는 gtag('config', ...)에 추가 프라이버시 파라미터를 오버라이드하지 않고 GA4 기본 설정으로 프로덕션 운영을 시작한다.

구현 규약

항목규약
스크립트 실행 방식gtag.jstype="text/partytown"으로 로드한다.
ID 관리측정 ID를 페이지에 하드코딩하지 않고 PUBLIC_GA_MEASUREMENT_ID로 주입한다(초기값 G-WZ3RT34EZZ).
출력 조건PROD가 true이고 측정 ID가 존재할 때만 태그를 출력한다.
배치페이지별 구현이 아니라 공통 Layout에서 중앙 관리한다.
이벤트 범위초기 범위는 page_view만 포함한다. 임의 커스텀 이벤트는 이번 단계에서 제외한다.

배경

현재는 분석 도구가 없어 유입/조회 추세나 주요 페이지 성과를 파악할 수 없다. 동시에 서드파티 스크립트를 메인 스레드에서 실행하면 TTI/FID/INP에 악영향을 줄 수 있다.

프로젝트는 이미 Astro 공통 Layout에서 head 책임을 관리하고 있으므로, 분석 태그도 같은 패턴으로 통합하는 것이 자연스럽다. 다국어 구조 특성상 페이지 단위 구현은 불일치 위험이 커서 피해야 한다.

옵션

  • 옵션 A: 일반 gtag.js를 메인 스레드에서 직접 로드한다
  • 옵션 B: @astrojs/partytown으로 gtag.js를 Worker에서 실행한다(채택)
  • 옵션 C: GA4를 도입하지 않고 다른 경량 분석 도구로 전환한다

근거

  • 성능: Partytown으로 서드파티 실행을 Worker로 이동해 메인 스레드 부담을 줄일 수 있다.
  • 운영 안정성: 공통 레이어 출력으로 신규 페이지 추가 시 태그 누락을 방지할 수 있다.
  • 단계적 도입: 우선 페이지뷰부터 시작하고 이벤트 설계는 후속 ADR로 분리할 수 있다.
  • 감사 가능성: 프로덕션 전용 게이팅과 “GA 기본 설정으로 시작” 전제를 명시할 수 있다.

영향

  • @astrojs/partytown 의존성을 추가하고 astro.config.mjs에 integration 설정이 필요하다.
  • Layout에서 참조하는 공통 Analytics 컴포넌트(또는 동등 책임)를 추가해야 한다.
  • PUBLIC_GA_MEASUREMENT_ID 환경변수 운영 규칙을 정의/유지해야 한다.
  • 개인정보 처리방침에 GA4 사용 및 측정 목적을 반영해야 한다.
  • 수용 기준은 아래와 같다.
    • GA 태그는 프로덕션에서만 출력된다
    • 모든 공개 페이지에서 페이지뷰가 측정된다
    • Lighthouse(또는 동등 지표) 기준 메인 스레드 성능 저하가 허용 범위 이내다