명당까치 키코는 2026년 10월 4일, 처음으로 유료 광고를 켰습니다. iOS와 안드로이드 각각 앱 설치 캠페인 하나씩, 한국만 대상으로, 한국어 문구와 앱을 직접 보여 주는 내레이션 영상으로요. 예산은 플랫폼마다 하루 1만 원, 기간은 10월 9일까지입니다.
광고 자체보다 오래 걸린 것은 그 전 단계였습니다. 광고비를 쓰기 전에 “광고로 들어온 사람이 무엇을 하는지”를 셀 수 있어야 하기 때문입니다. 측정이 없으면 광고가 효과가 있었는지 없었는지조차 말할 수 없습니다. 이 글은 키코가 앱과 웹에 측정을 붙이며 내린 결정, 특히 무엇을 세지 않기로 했는지에 대한 기록입니다. 광고 결과는 아직 나오지 않았고, 이 글에는 성과 숫자가 없습니다.
원칙: 측정이 먼저, 그리고 기준선
처음 세운 계획은 이랬습니다. 측정이 들어간 앱 버전이 나간 뒤, 광고 없이 자연 유입만으로 14일 이상 데이터를 모은다. 그래야 광고를 켰을 때 무엇이 달라졌는지 비교할 기준선이 생긴다.
현실은 계획대로 되지 않았습니다. 사업자 광고 계정이 광고주 인증 없이는 10월 8일 이후 새 광고를 만들 수 없게 되면서, 자연 유입 기준선은 4일로 줄었습니다. 이 결정은 기록으로 남겨 두었습니다. 기준선이 짧으면 광고 기간의 숫자를 해석할 때 그만큼 조심해야 하기 때문입니다. 측정이 붙기 전 버전의 이용은 아예 측정되지 않았다는 사실도 함께 적어 두었습니다.
앱: 무엇을 세는가
측정은 iOS 1.0.7과 안드로이드 1.0.4부터 들어갔습니다. 두 가지 도구를 붙였습니다.
제품 분석(PostHog). 사람들이 앱 안에서 어디까지 가는지를 봅니다. 화면을 자동으로 긁어 모으는 기능, 터치 자동 수집, 세션 녹화는 모두 껐고, 이름을 붙인 이벤트만 보냅니다. 오늘 소식 카드를 열었는지, 몇 번째 카드까지 넘겼는지, 고민 화면을 열었는지, 결제를 시작·완료·실패했는지, 생년월일을 저장했는지 같은 것들입니다. 키 값이 비어 있으면 아무 일도 하지 않게 만들어서, 측정이 앱의 동작을 막는 일은 없게 했습니다.
이 분석 프로젝트는 회사의 다른 앱과 함께 씁니다. 그래서 모든 이벤트에 “이건 키코 이벤트”라는 표시를 붙여야 했는데, 여기서 작은 함정이 있었습니다. 공통 속성을 등록하는 함수는 초기화가 끝난 뒤에 걸리는데, 앱 설치·업데이트·실행 같은 수명주기 이벤트는 초기화 도중에 나가서 표시가 빠졌습니다. 이벤트가 나가기 직전에 실행되는 훅을 달아 모든 이벤트에 표시를 채우는 것으로 해결했습니다.
광고 측정(Meta SDK). 광고를 보고 설치한 사람을 Meta가 알아보게 하는 도구입니다. iOS와 안드로이드 모두 앱 본체에만 넣고 위젯에는 넣지 않았습니다. 구매 이벤트는 직접 기록하지 않았습니다. SDK의 자동 기록과 겹쳐 두 번 세는 것을 피하기 위해서입니다.
ATT는 언제 묻는가
iOS에서는 다른 회사의 앱과 웹을 넘나드는 추적을 하려면 사용자에게 먼저 물어야 합니다(앱 추적 투명성, ATT). 처음 만든 빌드는 이 질문 없이, SDK를 깨우기 전에 추적과 광고 식별자 수집을 꺼 두는 방식이었습니다. 그러면 Meta는 Apple의 SKAdNetwork를 통해서만 설치를 귀속합니다. 그런데 SDK 자체의 개인정보 매니페스트가 기기 식별자를 추적 목적으로 쓴다고 선언하고 있어서, 질문 없이 내보낼지 질문을 넣을지 결정이 필요했습니다.
결국 질문을 넣되, 묻는 시점을 신중하게 골랐습니다. 키코는 앱을 처음 열자마자 묻지 않습니다. 이용자가 첫 “오늘 소식” 카드 덱을 마지막 장까지 보고 닫은 뒤, 아직 답하지 않은 경우에만 딱 한 번 묻습니다. 앱이 무엇을 하는지 한 번은 겪어 본 다음에 묻는 편이 자연스럽다고 판단했습니다. 질문 문구도 다듬었습니다. 처음 문구는 “허락해 주면 키코가 어떤 광고를 보고 찾아왔는지 알 수 있어”였는데, 읽기에 따라 키코가 광고를 본 것처럼 들렸습니다. 주어를 분명히 해 “허락해 주면 네가 어떤 광고를 보고 키코를 찾아왔는지 알 수 있어. 광고를 더 보여 주려는 건 아니야.“로 고쳤습니다. 키코의 앱 문구는 반말이 원칙이라 이 문장도 반말입니다.
이 선택의 결과도 미리 적어 두었습니다. iOS에서는 허용하지 않는 사람이 많을 것이므로 Meta의 iOS 귀속은 대부분 SKAdNetwork를 거칩니다. 그러니 광고 관리자의 설치 숫자보다 앱 안의 이벤트로 판단하자는 것이 저희의 해석 규칙입니다.
안드로이드는 광고 ID 권한이 들어가면서 Google Play의 광고 ID 선언을 “사용함(분석, 광고)“으로 바꾸고, 데이터 보안 항목에 수집·공유되는 데이터를 새로 적었습니다. SDK가 없던 시절에는 광고 ID를 쓰지 않는다고 선언했던 항목입니다. App Store의 개인정보 라벨도 같은 기준으로 다시 게시했습니다. 측정 도구를 붙인다는 것은 코드만이 아니라 스토어 신고와 개인정보 처리방침까지 함께 바뀐다는 뜻입니다.
웹: 좌표는 내보내지 않는다
웹에는 10월 1일에 같은 두 가지를 붙였습니다. 여기서는 앱보다 고민할 것이 많았습니다. 키코의 웹 주소에는 민감한 정보가 실리기 때문입니다.
키코의 고민 화면 주소에는 이용자가 고른 자리의 좌표가 들어 있습니다. 앱이 넘겨준 생년월일과 성별, 호칭과 질문과 걱정 같은 자유 글, 결제 영수증 값이 실리기도 합니다. 그런데 분석 도구들은 기본적으로 지금 페이지의 주소를 통째로 이벤트에 싣습니다. 좌표는 대개 그 사람의 집이거나 이사 갈 곳입니다. 이걸 그대로 내보낼 수는 없었습니다.
PostHog에는 이벤트가 나가기 전에 주소에서 이 값들을 지우는 단계를 두었습니다. 좌표, 생년월일, 성별, 호칭, 질문, 걱정, 영수증. 장소 이름과 어떤 고민인지는 남깁니다. 이벤트 이름은 앱과 같게 맞춰서, 한 퍼널이 웹과 앱을 함께 덮습니다. 웹에는 로그인이 없으므로 익명 방문자의 사람 프로필은 만들지 않습니다.
구매는 한 번만 센다
웹 결제는 결제창을 거쳐 돌아오는 주소에 결제 세션 값이 붙는데, 이 주소는 리포트를 다시 여는 링크이기도 합니다. 새로 고쳐도, 공유받은 사람이 열어도 같은 리포트가 열립니다. 그래서 “리포트가 열렸다”는 것만으로는 구매가 아닙니다. 두 조건이 모두 맞을 때만 구매로 셉니다. 이 브라우저에서 하루 안에 같은 고민으로 결제 버튼을 눌렀을 것, 그리고 이 결제 세션으로 아직 구매를 보낸 적이 없을 것. 앱에서 결제하고 웹으로 연 리포트는 앱이 이미 셌으므로 세지 않습니다.
Meta 픽셀은 좌표가 있는 화면에서 끈다
Meta 픽셀은 더 까다로웠습니다. 픽셀은 현재 페이지 주소를 원문 그대로 보내고, 그걸 끌 방법이 없습니다. PostHog처럼 주소를 다듬어서 보낼 수가 없다는 뜻입니다.
10월 1일의 결정은 단순했습니다. 민감한 값이 하나라도 실린 주소에서는 픽셀을 아예 쏘지 않는다. 랜딩 페이지처럼 좌표가 없는 화면에서만 동작합니다. 픽셀이 버튼 클릭이나 페이지 정보를 스스로 긁어 가는 자동 설정도 껐고, 화면 이동마다 페이지 조회가 두 번 세어지지 않도록 자동 기록도 꺼 두고 직접 한 번만 보냅니다.
대가는 분명했습니다. 지도와 결제가 있는 화면은 모두 좌표가 실린 화면이라, 브라우저 픽셀로는 결제 시작도 구매도 Meta에 전달되지 않습니다. 광고가 웹 구매로 이어졌는지 Meta가 알 수 없게 된 것입니다.
결제는 서버에서, 좌표 없는 주소로
다음 날인 10월 2일, 이 빈자리를 서버에서 메웠습니다. Meta의 Conversions API를 써서, 브라우저가 아니라 서버가 구매를 알립니다. 흐름은 이렇습니다.
- 결제한 브라우저가 리포트를 처음 열 때 서버에 한 번 알립니다.
- 서버가 결제 대행사에 결제가 실제로 끝났는지, 어떤 고민의 리포트인지 다시 확인합니다.
- 확인되면 Meta에 구매를 보냅니다. 주소는 좌표 없이
/p/고민형태만, 금액은 결제된 실제 금액만 담습니다. 좌표와 생년월일과 장소는 어디에도 없고, 이것을 시험으로 잠가 두었습니다. - 보낸 뒤에 결제 기록에 “보냈음” 표시를 남겨 한 번만 나가게 합니다. 경합으로 두 번 나가더라도 결제 세션 값을 이벤트 ID로 써서 Meta가 중복을 걸러 냅니다.
어떤 실패도 리포트를 막지 않게 했습니다. 광고 측정은 결제나 리포트의 관문이 아니라 덧붙이는 기능이기 때문입니다. 실제 결제 한 건으로 이 경로를 끝까지 확인하는 일은 아직 남아 있습니다.
개인정보 처리방침에도 이 내용을 그대로 적었습니다. 이용 기록과 광고 성과 측정을 위해 어떤 도구를 쓰는지, 해외로 이전되는 정보가 무엇인지, 거부하는 방법(브라우저 쿠키 설정, iOS 추적 허용 설정, 안드로이드 광고 ID 설정)까지요.
캠페인 세팅에서 막힌 곳
측정이 준비된 뒤 Meta 광고 관리자에서 캠페인을 만들었습니다. 몇 군데에서 막혔고, 같은 일을 할 분들을 위해 남겨 둡니다.
1. “앱을 찾을 수 없음.” iOS와 안드로이드 모두 광고 세트에서 키코 앱을 고르려고 하면 앱을 찾을 수 없다는 오류가 났습니다. 원인은 Meta 개발자 설정 쪽이었습니다. 키코의 Meta 앱이 이 광고 계정에서 쓰도록 승인된 적이 없었습니다. 앱의 고급 설정에 있는 “승인된 광고 계정” 목록에 광고 계정을 추가해야 합니다.
2. 승인한 뒤에도 같은 오류. 승인을 마친 뒤에도 한동안 같은 오류가 이어졌습니다. 광고 관리자의 임시 광고 세트에서 앱을 한 번 직접 골라 주자 풀렸습니다. iOS는 캠페인의 iOS 14 이상 설정 화면을 통해, 안드로이드는 Play 스토어 주소를 붙여 넣는 방식으로요. 임시로 만든 광고 세트는 지웠습니다.
3. 썸네일 이미지. 영상 광고의 썸네일로 외부 이미지 주소를 넣으면 Meta가 이미지를 내려받지 못했습니다. 영상 자체에서 Meta가 만든 썸네일을 쓰는 것으로 해결했습니다.
4. 함께 쓰는 지출 한도. 광고 계정의 지출 한도는 회사의 다른 앱 캠페인들과 함께 쓰는 하나의 한도입니다. 키코 캠페인을 켜기 직전에 확인해 보니 한도가 거의 소진되어 있었고, 소유자의 결정으로 초기화한 뒤에야 게시할 수 있었습니다. 계정 전체의 하루 지출 속도로 보면 한도는 며칠 안에 다시 찰 수 있고, 그러면 모든 캠페인이 한꺼번에 멈춥니다. 한도를 올리거나 다시 초기화하는 것은 돈이 드는 결정이라 소유자의 몫으로 기록해 두었습니다. 게시된 캠페인이라도 한도가 다하면 아무것도 나가지 않는다는 점, 그리고 게시 화면이 “성공”처럼 보여도 실제로 노출되는지는 따로 확인해야 한다는 점을 다시 배웠습니다.
무엇으로 판단할 것인가
광고는 10월 9일까지 돕니다. 판단 기준은 광고를 켜기 전에 정해 두었습니다.
- 설치 숫자는 광고 관리자의 귀속 열보다 앱 안의 이벤트로 봅니다. 특히 iOS는 대부분 SKAdNetwork를 거치므로 개별 사용자 단위의 귀속을 기대하지 않습니다.
- 자연 유입 기준선이 4일뿐이라, 광고 기간과의 비교는 넉넉하게 해석합니다.
- 광고에 쓴 비용과 시간, 그리고 결과를 함께 기록해 다음 캠페인의 근거로 씁니다.
배운 것
- 광고보다 측정이 먼저입니다. 측정이 붙기 전의 이용은 영영 셀 수 없습니다.
- 무엇을 세지 않을지 먼저 정하세요. 좌표가 담긴 주소를 분석 도구가 그대로 가져가지 않게 막는 일은, 무엇을 셀지 정하는 일만큼 중요했습니다. 끌 수 없는 도구는 그 화면에서 아예 쓰지 않는 쪽을 택했습니다.
- 잃은 신호는 더 안전한 경로로 되찾을 수 있습니다. 브라우저 픽셀을 끈 대신, 서버에서 결제를 확인한 뒤 좌표 없는 주소로 보냈습니다.
- 묻는 시점도 설계입니다. 추적 허용은 앱을 한 번 겪은 뒤에 묻습니다.
- 콘솔 화면의 “완료”를 믿지 마세요. 앱 승인, 지출 한도, 실제 노출은 각각 직접 확인해야 했습니다.
키코는 kiko.jocoding.io와 App Store, Google Play에서 만날 수 있습니다. 키코의 리딩은 전통 풍수를 현대 지형 데이터로 다시 읽어 보는 문화·오락 콘텐츠이며, 부동산이나 투자 결정의 근거로 쓰지 않으시길 부탁드립니다.