<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>dominkim.com</title><description>데이터, AI, 비즈니스, 그리고 책과 일상에 대해 씁니다. 모든 글은 하나의 가설이고, 발행 후 숫자로 확인합니다.</description><link>https://dominkim.com/</link><language>ko-kr</language><item><title>GA4 커스텀 이벤트, 블로그에 무엇부터 심을까</title><link>https://dominkim.com/posts/ga4-custom-events/</link><guid isPermaLink="true">https://dominkim.com/posts/ga4-custom-events/</guid><description>블로그에 GA4 커스텀 이벤트를 설계할 때 페이지 공통 파라미터, 완독 판정, 예약어 충돌을 어떻게 다루는지 실제 택소노미와 함께 정리한다.</description><pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;블로그에 GA4를 붙이는 글은 많다. 그런데 대부분 측정 ID를 넣는 데서 끝난다. 페이지뷰만으로는 “이 글이 읽혔는가”에 답할 수 없다. 스크롤을 얼마나 내렸는지, 얼마나 머물렀는지, 코드 블록을 복사했는지가 있어야 한다.&lt;/p&gt;
&lt;p&gt;이 글은 그 이벤트들을 설계하면서 먼저 정해야 했던 세 가지를 다룬다. 페이지 공통 파라미터, 완독 판정 조건, 그리고 예약어와의 충돌이다.&lt;/p&gt;
&lt;h2 id=&quot;페이지-공통-파라미터를-먼저-정한다&quot;&gt;&lt;a href=&quot;#페이지-공통-파라미터를-먼저-정한다&quot;&gt;페이지 공통 파라미터를 먼저 정한다&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;모든 이벤트에 &lt;code&gt;post_id&lt;/code&gt;와 &lt;code&gt;target_keyword&lt;/code&gt;가 자동으로 붙어야 어떤 이벤트든 키워드별로 쪼갤 수 있다. 이걸 이벤트마다 따로 넣으면 하나는 반드시 빠진다.&lt;/p&gt;
&lt;p&gt;방법은 단순하다. 포스트 페이지가 렌더될 때 전역 객체에 공통 파라미터를 심고, 이벤트를 보내는 함수 하나가 그 객체를 항상 병합한다.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;https://dominkim.com/_astro/ec.bog3s.css&quot;/&gt;&lt;script type=&quot;module&quot; src=&quot;https://dominkim.com/_astro/ec.0vx5m.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;src/lib/analytics.ts&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#BF3441;--1:#F5776E&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F5776E&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#DCBDFB&quot;&gt;track&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#AE4B07;--1:#F69D50&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#AE4B07;--1:#F69D50&quot;&gt;params&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;window.&lt;/span&gt;&lt;span style=&quot;--0:#6F42C1;--1:#DCBDFB&quot;&gt;gtag&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;?.(&lt;/span&gt;&lt;span style=&quot;--0:#032F62;--1:#96D0FF&quot;&gt;&amp;#39;event&amp;#39;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;, name, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F5776E&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;window.__pageParams,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#BF3441;--1:#F5776E&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;params,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#24292E;--1:#ADBAC7&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;div aria-live=&quot;polite&quot;&gt;&lt;/div&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;export function track(name, params) {  window.gtag?.(&apos;event&apos;, name, {    ...window.__pageParams,    ...params,  });}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;이렇게 하면 &lt;code&gt;scroll_depth&lt;/code&gt; 이벤트를 보낼 때 &lt;code&gt;post_id&lt;/code&gt;를 신경 쓸 필요가 없다. 리포트에서는 &lt;code&gt;target_keyword&lt;/code&gt;로 바로 분해된다.&lt;/p&gt;
&lt;h2 id=&quot;완독은-스크롤만으로-판정하지-않는다&quot;&gt;&lt;a href=&quot;#완독은-스크롤만으로-판정하지-않는다&quot;&gt;완독은 스크롤만으로 판정하지 않는다&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;스크롤 100%는 3초면 도달한다. 그래서 활성 시간을 함께 본다. 예상 읽기 시간의 절반 이상 머물렀고 본문 끝까지 내렸을 때만 완독으로 센다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;지표는 느슨하면 의미가 없고, 엄격하면 표본이 없다. 초기값을 정하고 이탈 이벤트의 실제 분포로 보정한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;활성 시간은 탭이 보이는 상태이고 최근 60초 안에 입력이 있었을 때만 1초씩 누적한다. 다른 탭에 열어두고 잊은 시간은 세지 않는다.&lt;/p&gt;
&lt;figure&gt; &lt;img src=&quot;https://dominkim.com/_astro/cover.DZJzWRZk_ZjLfYq.webp&quot; alt=&quot;스크롤 깊이와 활성 시간 두 축으로 완독을 판정하는 도식&quot; inferSize=&quot;false&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;auto&quot; width=&quot;680&quot; height=&quot;357&quot; class=&quot;w-full rounded-md&quot;&gt; &lt;figcaption&gt;완독 = 스크롤 100% AND 활성 시간 ≥ 예상 읽기 시간 × 0.5&lt;/figcaption&gt; &lt;/figure&gt;
&lt;h2 id=&quot;예약어와-충돌하지-않게&quot;&gt;&lt;a href=&quot;#예약어와-충돌하지-않게&quot;&gt;예약어와 충돌하지 않게&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GA4의 향상된 측정은 &lt;code&gt;scroll&lt;/code&gt;, &lt;code&gt;click&lt;/code&gt;, &lt;code&gt;file_download&lt;/code&gt; 같은 이름을 자동으로 쓴다. 직접 만든 스크롤 이벤트에 &lt;code&gt;scroll&lt;/code&gt;이라는 이름을 붙이면 내장 이벤트와 섞여서 분모가 흔들린다.&lt;/p&gt;
&lt;p&gt;세 가지만 지키면 된다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;자동 수집 이벤트와 같은 이름을 쓰지 않는다.&lt;/li&gt;
&lt;li&gt;같은 의미를 커스텀으로 만들었다면 향상된 측정에서 해당 항목을 끈다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;share&lt;/code&gt;, &lt;code&gt;search&lt;/code&gt;처럼 권장 이벤트가 있으면 그 이름과 파라미터 규격을 그대로 따른다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;정리&quot;&gt;&lt;a href=&quot;#정리&quot;&gt;정리&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;이벤트 표를 채우기 전에 위 세 가지를 정해두면, 나중에 이벤트를 추가할 때 표에 한 줄 더하고 마크업에 속성 하나 붙이는 일로 끝난다. 다음 글에서는 완독률을 실제로 어떻게 정의하고 보정했는지 다룬다.&lt;/p&gt;</content:encoded><category>data</category><category>analytics</category><category>data</category></item><item><title>1on1에서 질문이 먼저인 이유</title><link>https://dominkim.com/posts/one-on-one-questions/</link><guid isPermaLink="true">https://dominkim.com/posts/one-on-one-questions/</guid><description>1on1 미팅 질문 목록보다 중요한 것은 어떤 상황에서 어떤 질문을 꺼내느냐다. 상황별로 질문을 고르는 기준과 실제로 써본 질문을 정리한다.</description><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1on1 질문 목록은 검색하면 수십 개가 나온다. 문제는 목록이 아니라 타이밍이다. 같은 질문도 입사 2주차에 하면 부담이고, 프로젝트가 막 끝났을 때 하면 대화가 열린다.&lt;/p&gt;
&lt;h2 id=&quot;질문보다-상황을-먼저-본다&quot;&gt;&lt;a href=&quot;#질문보다-상황을-먼저-본다&quot;&gt;질문보다 상황을 먼저 본다&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;1on1을 시작하기 전에 세 가지를 확인한다. 지난 2주 동안 이 사람에게 무슨 일이 있었는지, 지금 어떤 일을 맡고 있는지, 마지막 1on1에서 무엇을 이야기했는지. 이 세 가지가 있으면 질문은 자연스럽게 정해진다.&lt;/p&gt;
&lt;h2 id=&quot;상황별-질문&quot;&gt;&lt;a href=&quot;#상황별-질문&quot;&gt;상황별 질문&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;프로젝트가-끝났을-때&quot;&gt;&lt;a href=&quot;#프로젝트가-끝났을-때&quot;&gt;프로젝트가 끝났을 때&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;이번 일에서 다시 한다면 바꿀 것 하나는?&lt;/li&gt;
&lt;li&gt;예상보다 오래 걸린 부분은 어디였나?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;조용해졌을-때&quot;&gt;&lt;a href=&quot;#조용해졌을-때&quot;&gt;조용해졌을 때&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;요즘 일 중에 제일 시간을 많이 쓰는 건 뭔가?&lt;/li&gt;
&lt;li&gt;내가 모르는 채로 지나가고 있는 게 있나?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;성장-이야기가-필요할-때&quot;&gt;&lt;a href=&quot;#성장-이야기가-필요할-때&quot;&gt;성장 이야기가 필요할 때&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;6개월 뒤에 지금보다 잘하고 싶은 것 하나는?&lt;/li&gt;
&lt;li&gt;그걸 위해 지금 팀에서 얻을 수 있는 기회는?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;하지-않는-것&quot;&gt;&lt;a href=&quot;#하지-않는-것&quot;&gt;하지 않는 것&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;진행 상황 점검은 1on1에서 하지 않는다. 그건 스탠드업이나 문서로 충분하다. 1on1에서 진행 상황을 물으면 그 시간은 보고가 되고, 다음부터 상대는 방어적으로 온다.&lt;/p&gt;
&lt;h2 id=&quot;정리&quot;&gt;&lt;a href=&quot;#정리&quot;&gt;정리&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;좋은 질문 목록은 도구일 뿐이다. 상황을 읽고 그때 필요한 질문 하나를 고르는 것이 1on1의 전부다.&lt;/p&gt;</content:encoded><category>business</category><category>team</category><category>career</category></item><item><title>데이터 분석가를 위한 추천 도서 7권</title><link>https://dominkim.com/posts/books-for-data-analysts/</link><guid isPermaLink="true">https://dominkim.com/posts/books-for-data-analysts/</guid><description>데이터 분석가 추천 도서를 통계, 실무, 커뮤니케이션 세 축으로 나눠 골랐다. 각 책이 어떤 상황에서 도움이 되는지와 함께 정리한다.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;책 추천 글은 대개 목록으로 끝난다. 이 글은 “어떤 상황에서 어떤 책이 도움이 되는가”를 기준으로 골랐다. 통계, 실무, 커뮤니케이션 세 축이다.&lt;/p&gt;
&lt;h2 id=&quot;통계-감각&quot;&gt;&lt;a href=&quot;#통계-감각&quot;&gt;통계 감각&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;생각에-관한-생각&quot;&gt;&lt;a href=&quot;#생각에-관한-생각&quot;&gt;『생각에 관한 생각』&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;기저율 무시, 회귀 오류 같은 편향은 분석가가 가장 자주 빠지는 함정이다. 통계 교과서보다 이 책이 먼저다.&lt;/p&gt;
&lt;h3 id=&quot;신호와-소음&quot;&gt;&lt;a href=&quot;#신호와-소음&quot;&gt;『신호와 소음』&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;예측이 왜 틀리는지를 사례로 보여준다. 모델의 불확실성을 말로 설명해야 할 때 이 책의 프레임이 유용하다.&lt;/p&gt;
&lt;h2 id=&quot;실무&quot;&gt;&lt;a href=&quot;#실무&quot;&gt;실무&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;practical-statistics-for-data-scientists&quot;&gt;&lt;a href=&quot;#practical-statistics-for-data-scientists&quot;&gt;『Practical Statistics for Data Scientists』&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;부트스트랩, A/B 테스트, 회귀를 코드와 함께 다룬다. 이론보다 “언제 무엇을 쓰는가”에 집중한다.&lt;/p&gt;
&lt;h3 id=&quot;trustworthy-online-controlled-experiments&quot;&gt;&lt;a href=&quot;#trustworthy-online-controlled-experiments&quot;&gt;『Trustworthy Online Controlled Experiments』&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;실험 플랫폼을 만드는 사람이 쓴 책이다. 표본 크기 계산부터 흔한 함정까지, 실험을 직접 돌리게 되면 반드시 읽게 된다.&lt;/p&gt;
&lt;h2 id=&quot;커뮤니케이션&quot;&gt;&lt;a href=&quot;#커뮤니케이션&quot;&gt;커뮤니케이션&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;storytelling-with-data&quot;&gt;&lt;a href=&quot;#storytelling-with-data&quot;&gt;『Storytelling with Data』&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;차트를 고치는 방법을 예제로 보여준다. 분석 결과가 회의에서 안 먹힐 때 원인의 절반은 여기 있다.&lt;/p&gt;
&lt;h3 id=&quot;the-pyramid-principle&quot;&gt;&lt;a href=&quot;#the-pyramid-principle&quot;&gt;『The Pyramid Principle』&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;결론부터 말하는 구조를 훈련하는 책이다. 분석 보고서 첫 문단이 달라진다.&lt;/p&gt;
&lt;h3 id=&quot;good-charts&quot;&gt;&lt;a href=&quot;#good-charts&quot;&gt;『Good Charts』&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;어떤 차트가 어떤 메시지에 맞는지를 다룬다. 『Storytelling with Data』 다음에 읽으면 좋다.&lt;/p&gt;
&lt;h2 id=&quot;순서&quot;&gt;&lt;a href=&quot;#순서&quot;&gt;순서&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;처음이라면 『생각에 관한 생각』, 『Practical Statistics』, 『Storytelling with Data』 순서를 권한다. 각 축에서 한 권씩이다.&lt;/p&gt;</content:encoded><category>book</category><category>reading</category><category>data</category></item></channel></rss>