사용자 요구사항을 고려해 웹 사이트를 개발했지만 사용자의 Needs를 충족시키지 못하면 운영 및 유지/보수의 필요성을 느끼지 못할 것이다. 필자는 위에서 언급한 Needs를 충족시키기 위해서 사용자 수, 웹 사이트에 머무르는 시간, 이탈률과 같은 데이터가 필요하다고 판단했다. 해당 데이터 측정할 수 있는 방법을 찾아보다 Google Analytics라는 좋은 도구가 있어 선택 후 도입하게 되었다.
환경변수
로 사용, G-
로 시작)gtag type 설치
yarn add -D @types/gtag.js
🔎 @types/gtag.js
- TypeScript에서 Google Analytics의 gtag.js 라이브러리를 사용하기 위한 타입 정의 파일
- gtag.js 라이브러리의 타입 정보를 제공하여 TypeScript 환경에서 Google Analytics의 함수와 객체를 정확하게 타입 지정할 수 있도록 함
환경 변수 설정
lib 폴더 및 gtag.ts 파일 생성
gtag.ts 파일에 코드 작성
export const GA_TRACKING_ID = process.env.NEXT_PUBLIC_GA_ID;
// https://developers.google.com/analytics/devguides/collection/gtagjs/pages
export const pageview = (url: URL) => {
if (typeof window.gtag == 'undefined') return;
window.gtag('config', GA_TRACKING_ID as string, {
page_path: url,
});
};
interface GTagEventProps {
action: string;
category: string;
label: string;
value: number;
}
// https://developers.google.com/analytics/devguides/collection/gtagjs/events
export const event = ({ action, category, label, value }: GTagEventProps) => {
window.gtag('event', action, {
event_category: category,
event_label: label,
value,
});
};
_app.tsx 파일에 코드 작성
(소스코드 참조)import Head from 'next/head'
import { useRouter } from 'next/router'
import Script from 'next/script'
import { useEffect } from 'react'
import * as gtag from '../lib/gtag'
const App = ({ Component, pageProps }) => {
const router = useRouter()
useEffect(() => {
const handleRouteChange = (url: URL) => {
gtag.pageview(url)
}
router.events.on('routeChangeComplete', handleRouteChange)
return () => {
router.events.off('routeChangeComplete', handleRouteChange)
}
}, [router.events])
return (
<>
<Head>
<script
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${gtag.GA_TRACKING_ID}', {
page_path: window.location.pathname,
});
`,
}}
/>
</Head>
{/* Global Site Tag (gtag.js) - Google Analytics */}
<Script
strategy="afterInteractive"
src={`https://www.googletagmanager.com/gtag/js?id=${gtag.GA_TRACKING_ID}`}
/>
<Component {...pageProps} />
</>
)
}
export default App
🔎 routeChangeComplete 이벤트
- 페이지 라우팅이 완료되면 실행되는 이벤트로, 라우팅 후에 추가 작업을 처리하는 데 사용됩니다.
App 디렉토리 사용시
라이브러리 사용
민형님 잘보고가요~~