๊ตฌ๊ธ ๋ถ์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ถ์ฒ์์ด๋๊ฐ ํฌํจ๋ ์คํฌ๋ฆฝํธ๋ฅผ index.html ํ์ด์ง์ ์ฝ์ ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์์ฃผ ๊ฐ๋จํ๊ฒ ์ฐ๋์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Angular์ ๊ฐ์ SPA๋ฐฉ์์ ๋จ์ผํ์ด์ง๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋จ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ๋ฐฉ์์ผ๋ก ๋ง์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ถ์๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ์๋ ์์ฌ์์ด ์์ต๋๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ?
Angular๋ ๋จ์ผํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ ๋๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ๋ ๊ธฐ์ ์ ์ผ๋ก ํ ํ์ด์ง๋ง ๋ก๋ํ๊ณ ํ์ด์ง๊ฐ ๋ณ๊ฒฝ๋๋ฉด DOM์ ํ๋ ์์ํฌ์ JavaScript ์ฝ๋์ ์ง์ ๋ ๋๋ก ํ์ด์ง์ ์ผ๋ถ๋ง ์ ๋ฐ์ดํธ ํฉ๋๋ค.
์ปดํฌ๋ํธ๋ ์๊ฐ์ ์ธ ํผ์ฆ์ ์ผ๋ถ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด๊ณ ํน์ ๋ณด๊ธฐ์์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋ํ ์ ์๊ณ ์ฃผ์ ํ์์ค์ ๋งํฌ๊ฐ ์ผ์นํ๋๋ก ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋์ง๋ง ์ฌ์ ํ ๋์ผํ ๋ฃจํธ ํ์ด์ง์ ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ์๋ํด๋ ์๋ก๊ณ ์นจ ์์ด ์ฌ์ ํ ๋์ผํ ํ์ด์ง ์ด๊ธฐ ๋๋ฌธ์ Google Analytics ํํฌ์ ๊ธฐ๋ณธ ๊ตฌํ์ ์ด๋ฅผ ์์ง ๋ชปํฉ๋๋ค.
๋ฐ๋ผ์ ๋ผ์ฐํฐ ์ด๋ฒคํธ๋ฅผ ํตํด ๋ณ๊ฒฝ๋ ํ์ด์ง ์ ๋ณด๋ฅผ ์ถ๊ฐ๋ก ์ ๋ฌํด ์ฃผ์ด์ผ ํฉ๋๋ค.
gtag.js
Google Analytics๋ฅผ ํตํ ์ถ์ ์๋ ga
๋ฐ gtag
์ ๋ ๊ฐ์ง ๋ฒ์ ์ด ์์ต๋๋ค. ga๋ ๋ ์ค๋๋ ๋ฒ์ ์ด๋ฉฐ Google์์๋ ๋์ gtag.js ๊ตฌํ์ ์ถ์งํ๊ณ ์์ต๋๋ค.
์์ํ๋ ค๋ฉด Google Analytics ํจ๋๋ก ์ด๋ํ์ฌ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ์ฝ๋๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค. ํธ๋ํนID๊ฐ ํฌํจ๋ ์ฝ๋๋ฅผ ๋ณต์ฌํ์ฌ <head>
์น์
์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
๋ฐ์ดํฐ ์คํธ๋ฆผ์์ ์คํธ๋ฆผ์ ์ถ๊ฐํ๋ฉด ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํธ๋ํนID ๋ฐ HTML์ ์ฝ์ ํ script๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค.
Router Events ์ ๋ณด ์์ง
์ด์ ํ์ด์ง ์ด๋ ์ ๋ณด๋ฅผ ์์งํ๊ธฐ ์ํด ๋ณ๋์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. Angular์๋ ํน์ ์ ๋ณด์ ์ก์ธ์คํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ์ฐ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ํ์ํ URL์ ๋ณด๊ฐ ํ์ํ๊ธฐ์ ๋ผ์ฐํฐ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ ๊ฒ์ ๋๋ค.
์ด ์ ๋ณด๋ฅผ ์ถ์ถํ๊ธฐ ์ํด navigationEnd
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ urlAfterRedirects
๋ผ๋ ์์ฑ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด ์์ฑ์๋ ๋ผ์ฐํ
URL์ /
๋ถ๋ถ์ด ํฌํจ๋ฉ๋๋ค.
์ฝ๋ ํจ์จ์ฑ์ ์ํด ์ด ๋ชจ๋ ๊ฒ์ app.component.ts
ํ์ผ์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ์ด ํ์ผ์ ๋ชจ๋ ๊ฒ์ ์ต์์ ์์ค์์ ๋ก๋๋๋ ์ฒซ ๋ฒ์งธ ํ์ผ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
์ถ์ ์ ๋์ฑ ๊ฐํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๊ฐ ์์ต๋๋ค. ์ต์ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์ Google Analytics ์ถ์ ํ์ด์ง ๋ณด๊ธฐ ๋ฌธ์ ํ์ด์ง์์ ํ์ธํ ์ ์์ต๋๋ค. (https://developers.google.com/analytics/devguides/collection/gtagjs/pages)
...
import{Router, NavigationEnd} from '@angular/router';
...
declare let gtag: Function;
...
export class AppComponent {
constructor(public router: Router){
this.router.events.subscribe(event => {
if(event instanceof NavigationEnd){
gtag('config', 'x-xxxxxxxxxx',
{
'page_path': event.urlAfterRedirects
}
);
}
}
)}
}
Event Tracking
์ด๋ฒคํธ ์ถ์ ์ Analytics ํต๊ณ์ ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ณ์ธต์ ์ถ๊ฐํฉ๋๋ค. ์ด๋ฒคํธ ํธ๋ํน์ ์ํ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์์ ์์ง๋ ์ ์๋๋ก ํด์ผ ํ๊ธฐ ๋๋ฌธ์ Angular ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ๊ตฌ์ฑ ์์์์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ํ๋ ค๋ฉด CLI๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์์ฑํ ๋ค์ ์ด๋ฅผ ๊ณต๊ธ์ ์ค ํ๋๋ก app.module.ts
ํ์ผ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ng generate s GoogleAnalytics
app.module.ts
...
import {GoogleAnalyticsService} from './google-analytics.service';
...
@NgModule({
...
providers: [GoogleAnalyticsService],
});
...
์๋ก ์์ฑ๋ ์๋น์ค ํ์ผ ๋ด์์ gtag๊ฐ
ํธ์ถ๋ ๋ ๋ณธ์ง์ ์ผ๋ก ์คํํ๊ณ ํ์์ด ์ ํํ๊ณ gtag
์์ ์๊ตฌํ๋ ๋ฐฉ์์ธ์ง ํ์ธํ๋ public eventEmitter
ํจ์๋ฅผ ์์ฑํ ๊ฒ์
๋๋ค.
๋ํ ์ธ๋ถ์์ ๋ก๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋น์ค๋ฅผ ๋
ธ์ถํ๋ ค๋ฉด gtag
๋ฅผ Function์ผ๋ก ์ ์ธํด์ผ ํฉ๋๋ค.
...
declare let gtag:Function;
...
export class GoogleAnalyticsService {
...
public eventEmitter(
eventName: string,
eventCategory: string,
eventAction: string,
eventLabel: string = null,
eventValue: number = null ){
gtag('event', eventName, {
eventCategory: eventCategory,
eventLabel: eventLabel,
eventAction: eventAction,
eventValue: eventValue
})
}
}
์ด ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ปดํฌ๋ํธ๋ก ๊ฐ์ ธ์ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ์ ๊ฐ์ ์ผ์ด ๋ฐ์ํ ๋ ํธ๋ํน ํ๋ ค๋ ๊ฐ์ eventEmitter
์ ์ ๋ฌํ์ฌ ์คํํด์ผ ํฉ๋๋ค.
<button (click)="clickLoginEvent()">Login</button>
๊ทธ๋ฐ ๋ค์ clickLoginEvent()
๋ฅผ ์ฒ๋ฆฌํ ๊ตฌ์ฑ ์์์์ eventEmitter
๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ์๋ํ๋ ค๋ฉด ์์ฑํ ์๋น์ค๋ฅผ ๊ตฌ์ฑ ์์๋ก ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
...
import{GoogleAnalyticsService} from './google-analytics.service';
...
export class LoginComponent implements OnInit {
...
clickLoginEvent(){
this
.googleAnalyticsService
.eventEmitter("user_to_login", "main", "login", "click", 10);
}
...
}
๋๋ง์ ์ด๋ฒคํธ ๋ฐ ์ด๋ฒคํธ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. Google์๋ ์ฌ์ฉํ ์ ์๋๋ก ๋ฏธ๋ฆฌ ์ ์๋ ๋ชฉ๋ก์ด ์์ต๋๋ค. ์ ์ฒด ๋ชฉ๋ก์ ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์์ต๋๋ค. (https://developers.google.com/analytics/devguides/collection/gtagjs/events)
๋ง์น๋ฉฐ
๋จ์ผ ํ์ด์ง ๋ฐ ํ๋ก๊ทธ๋ ์๋ธ ์น ์์ฉ ํ๋ก๊ทธ๋จ์์ ๊ตฌํํ๋ ๊ฒ์ ์ฝ๊ฐ์ ์ฝ๋๋ง ์ถ๊ฐํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ด๋ ค์ด ๋ถ๋ถ์ ์์ต๋๋ค.
gtag.js
์ Angular ๋ผ์ฐํ
์ ์๋ ๋ฐฉ์์ ์ดํดํ๊ณ Analytics ์ถ์ ์ ๊ตฌํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
angular-google-tag-manager
ํจํค์ง๋ฅผ ์ค์นํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ผ๋ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
(https://www.npmjs.com/package/angular-google-tag-manager)