개발자, 구글 서비스와 씨름하다: GA, GTM, 애드센스 정복기개발자, 구글 서비스와 씨름하다: GA, GTM, 애드센스 정복기

개발자, 구글 서비스와 씨름하다: GA, GTM, 애드센스 정복기

어느 개발자의 좌충우돌 새벽 탐험기

개발자, 구글 서비스와 씨름하다: GA, GTM, 애드센스 정복기 🚀

부제: 어느 개발자의 좌충우돌 새벽 탐험기

때는 새벽 1시, 세상이 잠든 시간. 한 개발자는 자신의 소중한 프로젝트 log8.kr를 세상에 알리고자 구글의 문을 두드렸습니다. 하지만 그를 맞이한 것은… Firebase, Google Cloud Platform, Google Analytics라는 이름은 비슷하지만 왠지 따로 노는 듯한 거대한 서비스들의 미로였죠. 😵‍💫

이 글은 그가 겪었던 혼란과 질문, 그리고 마침내 모든 것을 정복하고 평화를 찾기까지의 여정을 기록한 글입니다. 혹시 저와 같은 미로 속에서 헤매고 있는 분이 있다면, 이 지도가 작은 등불이 되어주길 바랍니다.

1장: 혼돈의 시작 - “왜 다 따로 놀아?” 🤔

처음 마주한 혼란은 이것이었습니다.

“분명 내 구글 계정은 하나인데, 왜 Firebase 콘솔, Google Cloud 콘솔, Google Analytics에 보이는 프로젝트 목록이 전부 다른 거지? 얘네 별도 계정이야?”

결론부터 말하면, 모두 하나의 계정, 하나의 프로젝트로 연결될 수 있습니다. 단지 우리가 다른 문으로 들어갔을 뿐이었어요.

  • Google Cloud 프로젝트: 모든 것의 심장부. 모든 Firebase 프로젝트는 사실 GCP 프로젝트입니다.
  • Firebase 콘솔: GCP 프로젝트라는 심장 위에 ‘앱 개발’에 특화된 기능을 보여주는 멋진 대시보드.
  • Google Analytics: 웹/앱의 데이터를 분석하는 ‘계기판’. 이 계기판은 프로젝트에 ‘연결’해줘야만 작동합니다.

✨ 깨달음: GCP 콘솔에서 프로젝트가 안 보였던 이유는 ‘조직 없음(No organization)’ 필터 때문이었어요. 필터를 바꾸니 숨어있던 모든 프로젝트가 모습을 드러냈습니다.

2장: 유령과의 사투 - “지웠는데 왜 남아있어!?” 👻

더 큰 공포는 삭제했던 프로젝트들이 유령처럼 GA에 남아있는 현상이었습니다. 심지어 삭제도 안 됐죠! 이 유령의 정체는 두 가지였습니다.

  1. 최신 유령: GCP 프로젝트를 삭제하면, 30일간의 ‘삭제 대기’ 상태에 들어갑니다. 마치 컴퓨터의 휴지통처럼요. 이때 연결된 GA 속성이 부모를 잃은 ‘고아’가 되어 삭제가 안 되는 현상이 발생했던 것입니다.
    • 해결책: GCP에서 삭제 대기 중인 프로젝트를 잠시 ‘복원’하고, GA 속성을 먼저 깨끗하게 삭제한 뒤, 다시 GCP 프로젝트를 삭제해야 합니다.
  2. 고대 유령: 아주 오래된 프로젝트들은 구형 애널리틱스(UA) 시절, GCP와 상관없이 독립적으로 생성된 ‘순수 혈통 애널리틱스’였습니다. 이들은 그들의 고향인 GA에서 직접 삭제해줘야 했습니다.

3장: 중대한 선택 - “Firebase냐, GA 단독이냐” ⚖️

log8.kr은 Cloudflare로 이미 배포된 상태. 여기서 질문이 생겼습니다.

“이 상황에서도 Firebase 프로젝트를 만들어야 하나?”

정답은 “아니요” 였습니다. 목적에 따라 길은 달랐습니다.

  • 경로 A (GA 단독): 저처럼 외부 호스팅을 사용하고, 순수하게 방문자 분석과 광고 연동만 필요할 때. 가장 깔끔하고 추천되는 경로입니다.
  • 경로 B (Firebase 연동): 데이터베이스, 인증 등 구글의 개발 인프라를 함께 사용할 계획이 있을 때.

저는 경로 A를 선택해, Firebase와 상관없이 GA에서 log8.kr만의 순수한 새 ‘속성(Property)‘을 만들었습니다.

4장: 구원자의 등장 - Google 태그 관리자(GTM) ✨

이제 GA 추적 코드를 사이트에 심어야 하는데, 여기서 구원자가 등장합니다. 바로 Google Tag Manager (GTM)!

“GTM은 또 뭐야? 그냥 GA 코드 넣으면 안 돼?”

GTM은 웹사이트에 들어가는 모든 외부 코드(GA, 구글 광고, 페이스북 픽셀 등)를 담아 관리하는 **‘마법 상자’**였습니다.

  • 옛날 방식: 모든 코드를 사이트에 직접 심어 코드가 누더기가 됨.
  • GTM 방식: ‘마법 상자’ 코드 딱 하나만 사이트에 심고, 나머지 모든 관리는 GTM 웹사이트에서 편하게!

저는 당연히 GTM 방식을 택했고, 제 Layout.astro 파일에는 GTM 코드 단 하나만 남게 되었습니다.

<head>
<script is:inline>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'[https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f](https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f));
})(window,document,'script','dataLayer','GTM-M9GB8LD5');
</script>
...
</head>
<body>
<noscript
><iframe
src="[https://www.googletagmanager.com/ns.html?id=GTM-M9GB8LD5](https://www.googletagmanager.com/ns.html?id=GTM-M9GB8LD5)"
height="0"
width="0"
style="display:none;visibility:hidden"
></iframe
></noscript>
...
</body>

그리고 GTM 웹사이트에서 GA 태그를 설정해주니, 모든 연결이 끝났습니다.

5장: 마지막 관문 - “AdSense? Ads? 뭐가 다른데?” 💰 광고를 설정하려던 순간, 마지막 혼란이 찾아왔습니다.

“구글 광고 하려는데, AdSense? Ads? 뭐가 맞는 거야?”

이 둘은 완전히 반대 개념이었습니다.

Google AdSense (애드센스): 나는 ‘건물주’. 내 사이트에 광고판을 달아 **‘수익’**을 낸다. Google Ads (애즈): 나는 ‘가게 주인’. 남의 건물 광고판에 **‘비용’**을 내고 내 가게를 **‘홍보’**한다. 저는 ‘수익 창출’이 목표였으므로, AdSense에 사이트를 등록하고 심사를 요청했습니다. 이제 기다림의 시간만이 남았죠.

여정을 마치며… 새벽의 긴 사투 끝에, 저는 더 이상 구글 서비스의 미로에서 헤매지 않게 되었습니다. 모든 것은 ‘프로젝트’ 중심으로 연결되어 있었고, GTM이라는 강력한 도구가 있었으며, AdSense와 Ads의 역할은 명확히 달랐습니다.

마지막으로, GA 속성의 데이터 보관 기간을 14개월로 늘리고, 내부 IP를 제외하고, Google 신호를 활성화하고, Search Console을 연결하는 전문가 수준의 최적화까지 마치고 나니, 비로소 진정한 평화가 찾아왔습니다.

이 글이 저처럼 막막했던 누군가에게 작은 도움이 되기를 바랍니다. 포기하지 마세요, 길은 반드시 있습니다! 🎉

💬 댓글