Skip to content

KUROOM-75: Google Analytics 연동 기능 추가#205

Open
ljh130334 wants to merge 1 commit intomainfrom
KUROOM-75
Open

KUROOM-75: Google Analytics 연동 기능 추가#205
ljh130334 wants to merge 1 commit intomainfrom
KUROOM-75

Conversation

@ljh130334
Copy link
Member

@ljh130334 ljh130334 commented Feb 2, 2026

✨ 무엇을 변경했나요?

Google Analytics 4(GA4)를 연동하여 사용자 페이지 방문 데이터를 수집할 수 있도록 구현했습니다.

주요 변경 사항

1. react-ga4 라이브러리 설치

  • Google Analytics 4를 React 환경에서 쉽게 사용할 수 있도록 react-ga4 패키지를 추가했습니다.

2. 신규 파일 생성

  • src/shared/utils/analytics.ts: GA 초기화 및 이벤트 추적을 위한 유틸리티 함수
  • src/shared/hooks/usePageTracking.ts: 페이지 이동 시 자동으로 페이지 뷰를 기록하는 커스텀 훅
  • src/shared/components/RootLayout.tsx: 모든 라우트를 감싸는 루트 레이아웃 컴포넌트

3. 기존 파일 수정

  • src/main.tsx: 앱 시작 시 GA 초기화 함수 호출
  • src/App.tsx: RootLayout을 라우터 최상위에 적용
  • .env.local: GA 측정 ID 환경변수 추가

작동 원리

Google Analytics 연동은 앱이 시작될 때 main.tsx에서 initGA() 함수를 호출하여 GA를 초기화하는 것으로 시작됩니다. 이 함수는 환경변수에 설정된 측정 ID를 사용하여 ReactGA 라이브러리를 초기화합니다.

페이지 추적의 핵심은 RootLayout 컴포넌트입니다. 이 컴포넌트는 App.tsx의 라우터 구조에서 "/" 경로의 element로 설정되어 있으며, 모든 하위 라우트(Home, Notice, Login, Map 등)는 이 RootLayout의 children으로 구성되어 있습니다. RootLayout 내부에서는 usePageTracking 훅을 호출하고, <Outlet />을 통해 자식 라우트들을 렌더링합니다.

usePageTracking 훅은 react-router-dom의 useLocation 훅을 사용하여 현재 URL 경로를 감지합니다. useEffect 내에서 location 객체를 의존성으로 설정했기 때문에, 사용자가 다른 페이지로 이동할 때마다 location이 변경되고, 이 변경을 감지하여 trackPageView 함수가 호출됩니다. 이 함수는 현재 경로(pathname)와 쿼리스트링(search)을 조합하여 Google Analytics에 페이지 뷰 이벤트를 전송합니다.

결과적으로, 사용자가 앱 내 어떤 페이지로 이동하든 RootLayout이 항상 렌더링되어 있으므로, 모든 페이지 이동이 자동으로 GA에 기록됩니다. 추가로 특정 버튼 클릭이나 기능 사용을 추적하고 싶다면 trackEvent 함수를 사용하여 커스텀 이벤트를 전송할 수 있습니다.


💬 하고 싶은 말

  • .env.localVITE_GA_MEASUREMENT_ID 환경변수가 설정되어 있어야 GA가 작동합니다.
  • 프로덕션 배포 시 해당 환경변수를 배포 환경에도 설정해주세요.
  • 추후 특정 이벤트(버튼 클릭, 기능 사용 등)를 추적하려면 trackEvent 함수를 활용할 수 있습니다.

Summary by CodeRabbit

릴리스 노트

  • New Features
    • Google Analytics 4를 통한 분석 추적 기능이 추가되었습니다. 앱 시작 시 자동으로 초기화되며, 사용자의 페이지 방문과 이벤트가 실시간으로 추적됩니다.

@ljh130334 ljh130334 requested a review from holdn2 February 2, 2026 07:46
@ljh130334 ljh130334 self-assigned this Feb 2, 2026
@ljh130334 ljh130334 added the enhancement New feature or request label Feb 2, 2026
@coderabbitai
Copy link

coderabbitai bot commented Feb 2, 2026

📝 Walkthrough

📋 Walkthrough

Google Analytics 4 분석 기능을 애플리케이션에 통합하는 변경사항입니다. react-ga4 의존성을 추가하고, 측정 ID 환경변수를 통해 GA 초기화(initGA), 페이지뷰 추적(trackPageView), 커스텀 이벤트 전송(trackEvent)을 지원하는 유틸리티 모듈을 구현했습니다. 앱 시작 시 분석을 초기화하고, usePageTracking 훅을 통해 라우팅 변경을 감지하여 자동으로 페이지뷰를 추적합니다.

🎯 Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

일관된 패턴의 분석 통합 구현으로, 각 파일의 변경이 논리적이고 반복적입니다. 새로운 파일들(훅, 컴포넌트, 유틸)은 독립적이며 표준 패턴을 따릅니다. 단, 환경변수 설정 및 GA 초기화 순서 검증 시점에 주목이 필요합니다.

우선순위: P2 (중요하지만 즉시 필수는 아님)

📖 관련 문서 추천

  • VITE_GA_MEASUREMENT_ID 환경변수 문서 확인
  • React Router 라이프사이클과 useEffect 의존성 배열 재검토 가능

🔍 숫자들이 춤을 추기 시작했네요,

GA4가 조용히 등장하며

페이지마다 발자국을 남기니,

사용자 여정이 이제 보여요! ✨📊

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 PR의 핵심 변경 사항(Google Analytics 4 연동)을 명확하게 요약하고 있으며, 이슈 번호(KUROOM-75)도 포함되어 있습니다.
Description check ✅ Passed 제공된 템플릿의 필수 섹션이 대부분 충실하게 작성되었으나, '관련 이슈' 섹션에 이슈 번호가 명시되지 않았습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch KUROOM-75

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In `@package.json`:
- Line 22: 패키지 의존성 "react-ga4": "^2.1.0"가 마지막 업데이트가 2023년이라 React 19 호환성을 확실히 하기
위해 해당 의존성에 대해 리포지토(react-ga/react-ga4) 릴리스 노트와 React 19 마이그레이션 가이드를 확인하고, 실제 앱
레벨에서 초기화(init)와 이벤트 전송(sendEvent/gtag 호출) 흐름을 React 19 환경에서 수동/자동 테스트(유닛/통합 또는
E2E)를 통해 검증한 뒤 문제가 없으면 ^2.1.0을 유지하거나 호환성 이슈가 발견되면 적절한 버전으로 고정하거나 패치 적용하도록
package.json의 "react-ga4": "^2.1.0" 의존성 항목을 업데이트하세요.

In `@src/shared/hooks/usePageTracking.ts`:
- Around line 1-10: 현재 usePageTracking 훅의 useEffect가 전체 location 객체를 의존성으로 사용해
location.state 변경만으로도 trackPageView를 중복 호출할 수 있습니다; useLocation과 useEffect를 유지하되
의존성 배열을 location.pathname + location.search 문자열로 변경해 pathname/search가 실제로 바뀔 때만
trackPageView(location.pathname + location.search)를 호출하도록 수정하세요 (참조:
usePageTracking, useLocation, useEffect, trackPageView, location.pathname,
location.search).

In `@src/shared/utils/analytics.ts`:
- Around line 1-27: Add a guard that prevents GA calls when no measurement ID is
configured: create an internal boolean (e.g., isGAEnabled) derived from
MEASUREMENT_ID and use it in initGA, trackPageView, and trackEvent to
early-return when false; update initGA to set isGAEnabled true only after
successful ReactGA.initialize(MEASUREMENT_ID), and make both trackPageView(path:
string) and trackEvent(category, action, label?) check isGAEnabled before
calling ReactGA.send or ReactGA.event to avoid unnecessary calls when GA is not
configured.

"classnames": "^2.5.1",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-ga4": "^2.1.0",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

react-ga4 latest version React 19 compatibility

💡 Result:

  • Latest react-ga4 version: 2.1.0 (released Mar 6, 2023). [1][2][3]
  • React 19 compatibility: react-ga4 does not appear to declare React as a dependency/peerDependency (it’s essentially a JS wrapper around gtag.js), so it typically won’t be blocked by React 19 peer-dep checks and should work in a React 19 app in principle—but there’s no explicit React 19 support statement and the package hasn’t been updated since 2023, so you should validate in your app (basic initialize/send/event flows) before relying on it. [1][2][4]

Sources:
[1] npm.io package page (shows v2.1.0, publish age)
[2] GitHub repo releases (v2.1.0 “Latest”, Mar 6, 2023)
[3] Yarn package page (tag latest = 2.1.0)
[4] UNPKG package.json (shows no React peerDependencies in package metadata)


🌐 Web query:

react-ga4 2.1.0 npm release notes changelog

💡 Result:

No official release notes / changelog entry for react-ga4 v2.1.0 appears to be published (npm page for 2.1.0 shows the README content, not a changelog). [1]

What is publicly visible:

  • Version: 2.1.0 (tag latest) [2]
  • Published date: March 6, 2023 [2]
  • Previous release: 2.0.0 published January 19, 2023 [2]
  • npm version history exists, but it does not include per-version change descriptions. [3]

If you need “what changed” between 2.0.0 and 2.1.0, you’ll likely need to diff the GitHub tags/commits in the repo referenced by the package metadata (since no standalone changelog/release notes are provided). [1]

Sources:
[1] https://www.npmjs.com/package/react-ga4/v/2.1.0
[2] https://classic.yarnpkg.com/en/package/react-ga4
[3] https://www.npmjs.com/package/react-ga4/v/1.0.2?activeTab=versions


🌐 Web query:

react-ga4 npm package current stable version

💡 Result:

The current stable (latest) version of the react-ga4 npm package is 2.1.0. [1][2]

Install: npm i react-ga4@2.1.0 [1]

Sources:
[1] npm package page (react-ga4) (npmjs.com)
[2] Snyk package page (react-ga4) (security.snyk.io)

Citations:


react-ga4 버전/호환성 검증 권장 — 우선순위 P3

  • 현황: 2.1.0은 최신 안정 버전(2023년 3월 릴리스) 입니다.
  • 주의: React 19 공식 지원 선언 없음 — react-ga4는 peerDependency로 React를 명시하지 않으므로 설치는 차단되지 않지만, 마지막 업데이트가 2023년이므로 앱 레벨에서 기본 흐름(초기화/이벤트 전송) 검증 권장.
  • 장점: ^ 유지 시 패치/마이너 개선 자동 수용하면서도 gtag.js 래퍼 특성상 안정적.
  • 권장: 문서 확인은 GitHub 릴리스 페이지와 React 19 마이그레이션 가이드 참고.

차분한 의존성 선택, 잘했습니다 🙂

🤖 Prompt for AI Agents
In `@package.json` at line 22, 패키지 의존성 "react-ga4": "^2.1.0"가 마지막 업데이트가 2023년이라
React 19 호환성을 확실히 하기 위해 해당 의존성에 대해 리포지토(react-ga/react-ga4) 릴리스 노트와 React 19
마이그레이션 가이드를 확인하고, 실제 앱 레벨에서 초기화(init)와 이벤트 전송(sendEvent/gtag 호출) 흐름을 React 19
환경에서 수동/자동 테스트(유닛/통합 또는 E2E)를 통해 검증한 뒤 문제가 없으면 ^2.1.0을 유지하거나 호환성 이슈가 발견되면 적절한
버전으로 고정하거나 패치 적용하도록 package.json의 "react-ga4": "^2.1.0" 의존성 항목을 업데이트하세요.

Comment on lines +1 to +10
import { useEffect } from "react";
import { useLocation } from "react-router-dom";
import { trackPageView } from "@/shared/utils/analytics";

export const usePageTracking = () => {
const location = useLocation();

useEffect(() => {
trackPageView(location.pathname + location.search);
}, [location]);
Copy link

@coderabbitai coderabbitai bot Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

find . -name "usePageTracking.ts" -o -name "usePageTracking.tsx" | head -20

Repository: KU-rum/KU-ROOM-Web

Length of output: 99


🏁 Script executed:

git ls-files | grep -i "usePageTracking"

Repository: KU-rum/KU-ROOM-Web

Length of output: 97


🏁 Script executed:

git ls-files | grep -E "src/shared/hooks" | head -20

Repository: KU-rum/KU-ROOM-Web

Length of output: 199


🏁 Script executed:

cat -n src/shared/hooks/usePageTracking.ts

Repository: KU-rum/KU-ROOM-Web

Length of output: 451


🏁 Script executed:

find . -name "*.test.ts" -o -name "*.test.tsx" -o -name "*.spec.ts" -o -name "*.spec.tsx" | grep -i "pagetracking"

Repository: KU-rum/KU-ROOM-Web

Length of output: 44


🏁 Script executed:

find . -path "*/hooks/*" -name "*.test.*" -o -path "*/hooks/*" -name "*.spec.*" | head -20

Repository: KU-rum/KU-ROOM-Web

Length of output: 44


🏁 Script executed:

find . -type f \( -name "analytics.ts" -o -name "analytics.tsx" -o -name "analytics.js" \) | grep shared/utils

Repository: KU-rum/KU-ROOM-Web

Length of output: 93


🏁 Script executed:

cat -n src/shared/utils/analytics.ts 2>/dev/null || cat -n src/shared/utils/analytics.tsx 2>/dev/null || echo "File not found, searching..."

Repository: KU-rum/KU-ROOM-Web

Length of output: 763


🏁 Script executed:

rg "trackPageView" -A 5 -B 2 --type ts --type tsx

Repository: KU-rum/KU-ROOM-Web

Length of output: 89


🏁 Script executed:

find . -name "*.test.*" -o -name "*.spec.*" | head -5

Repository: KU-rum/KU-ROOM-Web

Length of output: 44


🏁 Script executed:

rg "location\.state" --type ts --type js | head -20

Repository: KU-rum/KU-ROOM-Web

Length of output: 569


🏁 Script executed:

find . -name "*.test.ts" -o -name "*.spec.ts" | head -10

Repository: KU-rum/KU-ROOM-Web

Length of output: 44


🏁 Script executed:

ls -la src/**/__tests__ 2>/dev/null || echo "No __tests__ directory found"

Repository: KU-rum/KU-ROOM-Web

Length of output: 90


🏁 Script executed:

find . -type d -name "__tests__" -o -type d -name "tests" -o -type d -name "test" | grep -v node_modules | head -10

Repository: KU-rum/KU-ROOM-Web

Length of output: 44


페이지뷰 중복 전송 가능성 — 우선순위 P4

문제: useEffect 의존성이 location 객체 전체이기 때문에, 동일한 경로에서 location.state만 변경되어도 pageview가 추가 전송됩니다. (실제로 코드베이스 곳곳에서 라우트 네비게이션 시 state로 데이터를 전달하고 있습니다)

대안: pathname + search 문자열을 의존성 배열로 사용하세요.

 useEffect(() => {
-    trackPageView(location.pathname + location.search);
-  }, [location]);
+    const path = location.pathname + location.search;
+    trackPageView(path);
+  }, [location.pathname, location.search]);

장점: 불필요한 GA 이벤트 중복 제거로 지표 정확도가 개선됩니다.

단점: state 기반 네비게이션만 의도적으로 집계하던 경우 누락될 수 있습니다. (다만 현재 구현상 이러한 의도는 없는 것으로 보입니다)

참고 문서: React Router useLocation, React useEffect 의존성 배열

테스트 제안: 라우트 변경 시 trackPageView 호출 횟수를 훅 단위 테스트(메모리 라우터 활용)로 검증해 주세요. state 변경만 발생한 경우와 pathname 변경 시를 구분하여 테스트하면 좋습니다.

훅이 간결해서 이해하기 쉬워요. 분석력이 돋보입니다! 👍

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import { useEffect } from "react";
import { useLocation } from "react-router-dom";
import { trackPageView } from "@/shared/utils/analytics";
export const usePageTracking = () => {
const location = useLocation();
useEffect(() => {
trackPageView(location.pathname + location.search);
}, [location]);
import { useEffect } from "react";
import { useLocation } from "react-router-dom";
import { trackPageView } from "@/shared/utils/analytics";
export const usePageTracking = () => {
const location = useLocation();
useEffect(() => {
const path = location.pathname + location.search;
trackPageView(path);
}, [location.pathname, location.search]);
};
🤖 Prompt for AI Agents
In `@src/shared/hooks/usePageTracking.ts` around lines 1 - 10, 현재 usePageTracking
훅의 useEffect가 전체 location 객체를 의존성으로 사용해 location.state 변경만으로도 trackPageView를 중복
호출할 수 있습니다; useLocation과 useEffect를 유지하되 의존성 배열을 location.pathname +
location.search 문자열로 변경해 pathname/search가 실제로 바뀔 때만
trackPageView(location.pathname + location.search)를 호출하도록 수정하세요 (참조:
usePageTracking, useLocation, useEffect, trackPageView, location.pathname,
location.search).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ljh130334 이부분 확인 부탁드려요~

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Comment on lines +1 to +27
import ReactGA from "react-ga4";

const MEASUREMENT_ID = import.meta.env.VITE_GA_MEASUREMENT_ID;

// Google Analytics 초기화
export const initGA = () => {
if (MEASUREMENT_ID) {
ReactGA.initialize(MEASUREMENT_ID);
}
};

// 페이지 뷰 추적
export const trackPageView = (path: string) => {
ReactGA.send({ hitType: "pageview", page: path });
};

// 이벤트 추적
export const trackEvent = (
category: string,
action: string,
label?: string
) => {
ReactGA.event({
category,
action,
label,
});
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

react-ga4 initialize method behavior when called before tracking methods

💡 Result:

In react-ga4, calling ReactGA.initialize(...) before any tracking calls means:

  • initialize() sets up dataLayer/gtag, loads gtag.js, sends the initial config for your measurement ID(s), then marks the instance isInitialized = true. After that, any queued calls are flushed. [1]
  • Once initialization has completed, subsequent tracking calls (event, send, gtag, etc.) are sent immediately (not queued) because the library switches out of “queuing mode”. [2]
  • The queuing behavior mainly matters when tracking is called before initialization finishes / before gtag.js is available—those calls are stored and then replayed in order during initialize()’s queue-processing step. [2]

Also, the library tracks an isInitialized flag (and exposes reset()), so repeated initialization is treated as a stateful operation rather than something you normally do on every event. [3]

Sources:
[1] (deepwiki.com)
[2] (deepwiki.com)
[3] (deepwiki.com)

Citations:


🏁 Script executed:

# Search for all usages of trackPageView and trackEvent in the codebase
rg "trackPageView|trackEvent" --type ts --type tsx -B 2 -A 2

Repository: KU-rum/KU-ROOM-Web

Length of output: 89


🏁 Script executed:

# Check for any error handling or GA initialization checks elsewhere in the codebase
rg "initGA|MEASUREMENT_ID|react-ga4" --type ts --type tsx -B 2 -A 2 | head -100

Repository: KU-rum/KU-ROOM-Web

Length of output: 89


🏁 Script executed:

# Look for test files related to analytics
fd "analytics|ga" --type f -e test.ts -e test.tsx -e spec.ts -e spec.tsx

Repository: KU-rum/KU-ROOM-Web

Length of output: 44


🏁 Script executed:

# Try searching without type filtering, more specific to analytics.ts location
rg "trackPageView|trackEvent|initGA" --max-count 20 -B 1 -A 1

Repository: KU-rum/KU-ROOM-Web

Length of output: 1238


🏁 Script executed:

# Check the actual file structure and see if there are other similar utility patterns
fd "utils" --type d

Repository: KU-rum/KU-ROOM-Web

Length of output: 666


🏁 Script executed:

# Look for how MEASUREMENT_ID is used and checked elsewhere
rg "MEASUREMENT_ID|VITE_GA|import\.meta\.env\." --max-count 30

Repository: KU-rum/KU-ROOM-Web

Length of output: 841


🏁 Script executed:

# Check for error boundaries or initialization checks in main app setup
rg "initGA|analytics|initialize" --max-count 30 -B 1 -A 1

Repository: KU-rum/KU-ROOM-Web

Length of output: 2807


🏁 Script executed:

# Check for analytics test files
fd "analytics" --type f -e test -e spec

Repository: KU-rum/KU-ROOM-Web

Length of output: 44


🏁 Script executed:

# Look for similar patterns of optional feature guards in the codebase
rg "if.*env|if.*config|isEnabled" --max-count 20 -B 1 -A 1 | head -50

Repository: KU-rum/KU-ROOM-Web

Length of output: 50375


🏁 Script executed:

# Check the complete usePageTracking hook to understand timing
cat src/shared/hooks/usePageTracking.ts

Repository: KU-rum/KU-ROOM-Web

Length of output: 374


MEASUREMENT_ID 미설정 시 불필요한 호출 방지 — P3

initGA는 ID 없으면 초기화를 건너뛰지만, trackPageView/trackEvent는 항상 실행되어 GA 초기화되지 않은 상태에서 불필요한 라이브러리 호출이 발생할 수 있습니다. react-ga4는 호출을 큐에 저장했다가 재생하므로 에러는 아니지만, 불필요한 처리를 피하는 것이 좋습니다.

  • 대안: isGAEnabled 플래그로 가드절 추가
  • 장점: 불필요한 호출 방지, 설정 누락 시 명확한 의도 표현
  • 단점: 설정 누락이 조용히 지나갈 수 있음
🛡️ 수정 제안
 const MEASUREMENT_ID = import.meta.env.VITE_GA_MEASUREMENT_ID;
+const isGAEnabled = Boolean(MEASUREMENT_ID);

 export const initGA = () => {
-  if (MEASUREMENT_ID) {
+  if (isGAEnabled) {
     ReactGA.initialize(MEASUREMENT_ID);
   }
 };

 export const trackPageView = (path: string) => {
+  if (!isGAEnabled) return;
   ReactGA.send({ hitType: "pageview", page: path });
 };

 export const trackEvent = (
   category: string,
   action: string,
   label?: string
 ) => {
+  if (!isGAEnabled) return;
   ReactGA.event({
     category,
     action,
     label,
   });
 };
🤖 Prompt for AI Agents
In `@src/shared/utils/analytics.ts` around lines 1 - 27, Add a guard that prevents
GA calls when no measurement ID is configured: create an internal boolean (e.g.,
isGAEnabled) derived from MEASUREMENT_ID and use it in initGA, trackPageView,
and trackEvent to early-return when false; update initGA to set isGAEnabled true
only after successful ReactGA.initialize(MEASUREMENT_ID), and make both
trackPageView(path: string) and trackEvent(category, action, label?) check
isGAEnabled before calling ReactGA.send or ReactGA.event to avoid unnecessary
calls when GA is not configured.

Copy link
Contributor

@holdn2 holdn2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다~ 코드래빗 리뷰만 적용하면 좋을 것 같아요!

Comment on lines +1 to +10
import { useEffect } from "react";
import { useLocation } from "react-router-dom";
import { trackPageView } from "@/shared/utils/analytics";

export const usePageTracking = () => {
const location = useLocation();

useEffect(() => {
trackPageView(location.pathname + location.search);
}, [location]);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ljh130334 이부분 확인 부탁드려요~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants