기도모임에 광고를 처음 붙인 건 출시하고 며칠 지난 어느 평일 저녁이었어요. 처음엔 광고를 굳이 달 생각이 없었어요. 모임 사람들끼리 쓰는 앱인데 화면 밑에 광고 띠가 깔리는 게 좀 그렇잖아요. 그런데 한 가지가 마음에 걸렸어요. 파이어베이스 무료 제공량이 사람이 적을 땐 충분한데, 사람이 늘면 그 위로 넘어가는 금액은 제 카드에서 빠진다는 걸 그때 알게 됐거든요. 이 무료 제공량 넘어가면 내 돈 무서움은 나중에 따로 비용 방어 메모로 정리해 뒀어요. 첫 앱은 모임 사람들이라 괜찮을 거 같았지만, 다음 앱들이 줄줄이 대기하고 있는 마당에 내 돈으로 다른 사람 서버 비용을 메꾸는 그림 이 머릿속에 한 번 들어오니까 마음이 좀 바빠졌어요. 그래서 애드몹이라는 데에 일단 가입은 해두자 가 그날 저녁의 결정이었어요.
애드몹은 처음엔 손에 안 잡혔어요. 콘솔에 들어가면 메뉴가 자잘하게 많고, 광고 단위(ad unit)니 앱 ID니 하는 용어가 한 화면에 같이 떠 있어서 어디부터 눌러야 하는지가 한 번에 안 들어오더라고요. 클로드 코드한테 애드몹 처음인데 어디부터 봐야 해요 하고 통째로 던졌어요. 답이 길게 왔어요. 콘솔에서 앱을 먼저 하나 만들고, 그 앱 안에 광고 단위라는 걸 생성하고, 거기서 나오는 광고 ID를 코드 안에 박아 넣어야 한다고요. 그 흐름대로 차근차근 따라간 게 그날 밤 11시쯤이었어요. 그날 따라간 애드몹 첫 세팅 순서는 이 프롬프트에 그대로 남겨 뒀어요. 빌드 한 번 돌리고, 폰에 깔고, 앱 켜고, 화면 밑에 회색 띠가 휙 떴다가 자리에 내려앉는 그 첫 광고를 봤어요. 그게 본인 앱에 본인이 단 첫 광고였어요.
며칠 동안 광고가 잘 도는가 싶어서 애드몹 콘솔을 하루에 두세 번씩 들여다봤어요. 거기 예상 수익 이라는 칸이 있는데, 그 숫자가 처음으로 0이 아닌 어느 숫자로 찍힌 그 화면이 또 묘했어요. 그 묘함이 한 1초쯤 갔어요. 다음 초에 그 숫자를 다시 봤거든요. 두 번 세 번 봤어요. 한국 돈 기준으로 옮겨 보니까 빵 한 개 값에 한참 못 미치는 액수였어요. 광고 한 번 노출에 얼마, 한 번 클릭에 얼마. 그게 단위가 원 이 아니라 원의 소수점 아래 부터 시작한다는 걸 그때 처음 봤어요. 이걸로 돈을 번다는 게 가능한 일인가 라는 생각이 들었어요. 그 생각이 든 자리에서 그래도 사람만 모이면 어떻게든 되겠지 같은 자기 위안을 한 번 더 했고요. 둘 다 그 며칠을 같이 따라다녔어요.
점심 즈음의 메일 한 통
문제는 그 다음 주 어느 평일 점심 즈음이었어요. 회사에서 밥 먹고 자리에 돌아오자마자 폰에 메일 알림이 한 줄 떴어요. 보낸 사람이 AdMob 이었어요. 미리보기에 invalid activity 같은 영문이 흘러갔어요. 그 단어가 한 번에 머리에 박혔어요. invalid 가 무슨 단어인지 정도는 알았고, 광고 회사에서 보낸 메일에 그 단어가 박혀 있는 건 무조건 좋은 일은 아니라는 게 본능적으로 와닿았어요.
메일을 펴서 읽었는데 한 번에 다 안 들어왔어요. 길었고, 격식 있는 영문이었어요. 핵심은 한 줄이었어요. 귀하의 계정에서 무효 활동이 감지되어 광고 게재가 일시 중지됩니다. 일시 중지 기간이 한 달이라는 줄도 그 안에 있었어요. 그 영문을 한 번 더 읽었어요. 일시 중지. 한 달. 광고. 그 세 단어를 머릿속에서 굴려 봤는데, 그게 무슨 뜻인지가 잘 안 잡혔어요. 정확히 뭘 잘못한 건지가 메일에 안 적혀 있었거든요. 어떤 앱에서, 어떤 광고에서, 어떤 식의 활동이 감지됐는지 가 어디에도 안 적혀 있었어요. 그냥 무효 활동 한 단어로 묶여 있었어요.
오후 본업 시간에 그 메일 한 통이 머릿속에서 안 사라졌어요. 화면을 들여다보고 있는데 그 무효 활동이라는 게 도대체 뭐였지 하는 질문이 자꾸 돌아왔어요. 퇴근하고 집에 와서 노트북을 펴자마자 클로드한테 메일을 통째로 던졌어요. 이거 풀어줘. 답은 짧고 정확했어요. 애드몹에서 invalid activity 라고 부르는 건 보통 자가 클릭이에요. 본인이 본인 앱의 광고를 누른 경우, 같은 IP에서 반복해서 누른 경우, 본인이 본인 광고를 너무 자주 노출시킨 경우 같은 것들이 다 그 범주에 들어가요.
그 답을 보고 의자에 잠깐 기대 앉았어요. 자가 클릭. 그게 한 단어로 머리에 들어오니까 내가 그랬나 부터 누가 그랬나 까지 한꺼번에 떠올랐어요. 솔직히 처음 광고를 단 그 며칠 동안 진짜로 광고가 뜨는지 확인하려고 제가 제 앱을 켜서 화면 밑에 회색 띠가 뜨는 걸 들여다본 적이 한두 번이 아니었어요. 그러다가 광고가 어떤 페이지로 넘어가지 가 궁금해서 손이 그 띠 위로 갔다가 한 번쯤은 정말 눌렀을 수도 있어요. 한두 번 정도. 그게 한두 번이라도 자가 클릭으로 잡혔을 가능성이 있다는 거였어요. 모임 사람들이 도와준다고 광고 한 번씩 눌러줬을 수도 있고요. 친구야 광고 한 번씩 눌러줘 같은 부탁을 누가 누구한테 했었는지까지는 지금도 잘 모르겠어요.
어디서 났는지를 안 알려주는 게 제일 답답했어요
그 며칠 동안 제일 답답했던 건 한 달 정지 자체가 아니었어요. 어디서 났는지를 안 알려주는 거 였어요. 광고를 단 앱이 그땐 두 개였거든요. 두 개 중에 어느 앱에서 무효 활동이 잡힌 건지, 그 안에서도 어느 화면의 어느 광고 단위였는지가 메일 어디에도 안 적혀 있었어요. 콘솔에 들어가도 그 정보는 안 보였어요. 어디를 막아야 다음에 같은 일이 안 일어나는지 를 알 수가 없었어요. 본인 광고 콘솔인데 본인이 본인 사고를 추적할 수가 없는 그림이었어요.
답답함이 한 번 커지고 나서는 그 자리에서 이건 일단 양쪽 다 빼자 가 결론이었어요. 두 앱 모두 광고가 깔린 빌드가 마켓에 그대로 살아 있었거든요. 정지를 먹은 채로 그 빌드가 계속 돌면 한 달 후에 풀려도 같은 자리에서 같은 사고가 또 날 가능성이 있다는 게 무서웠어요. 그 밤에 두 앱 모두 광고 호출하는 코드를 다 떼어내고, 빌드를 새로 만들어서 마켓에 올리는 작업을 했어요. 빌드 두 개를 새벽까지 굴린 그 밤이 좀 길었어요. 광고 단가 보고 그래도 사람만 모이면 어떻게든 되겠지 했던 며칠 전의 자기 위안이 그 새벽에 좀 머쓱하게 떠올랐어요.
이의 신청이라는 게 있다는 것도 그 즈음에 알았어요. 애드몹 콘솔 어딘가에 invalid activity 에 대한 이의를 제기하시려면 이 양식을 채워주세요 같은 페이지가 있었어요. 영문 양식이 길었고, 이런 활동이 일어난 원인에 대한 본인의 추측을 자세히 적어주세요 같은 빈 칸이 있었어요. 본인의 추측이라는 표현이 좀 묘하게 와닿았어요. 본인이 본인 계정에서 무슨 일이 일어났는지를 추측해서 적어 내는 그림이었거든요. 클로드한테 이의 신청 영문 초안을 같이 잡아 달라고 부탁해서 한 통 보냈어요. 이 정지·이의 신청 과정에서 알게 된 것들은 계정 정지 대응 메모에 따로 모아 뒀어요. 광고가 깔린 앱에서 개발자 본인 및 지인들의 의도치 않은 클릭이 있었을 가능성이 있고, 사고를 인지한 직후 해당 앱들에서 광고를 모두 제거했습니다 라는 식으로요. 답장이 올 거라는 기대는 그땐 거의 없었어요. 한 달 후에 자동으로 풀린다고 적혀 있었거든요.
한 달이 정확히 한 달이 아니라는 것도 그때 처음 알았어요. 정지 통보 받은 날로부터 정확히 30일째 되는 날 아침에 콘솔에 들어가 봤는데 여전히 정지였어요. 31일째도 그랬어요. 32일째에 들어가 보니까 풀려 있었어요. 메일 어디에도 풀렸어요 라고 안 와요. 본인이 들어가서 확인해야 알아요. 그 며칠 동안 매일 아침에 들어가서 한 번씩 확인했어요. 그 하루 이틀 더 라는 시간이 묘하게 길었어요. 한 달 통째로 기다린 사람한테 이틀이 더 붙는 그 감각이요.
그 자리에서 광고 토글이 생겼어요
정지가 풀린 그날 저녁에 책상에 앉아서 잠깐 멍하니 있었어요. 다시 광고를 붙이긴 붙여야 하는데, 한 번 데인 자리에 다시 손을 넣는 그림이 좀 무서웠어요. 그래서 그날 밤에 한 가지를 정했어요. 광고는 항상 켜져 있는 게 아니라, 내가 원할 때만 켜질 수 있어야 한다. 그게 그 사건이 남긴 한 줄짜리 결론이었어요.
방법 자체는 복잡한 게 아니었어요. 파이어스토어 어딘가에 광고 켤지 말지 를 적어두는 칸을 하나 만들고, 앱이 켜질 때 그 칸을 한 번 읽어서 켜 라고 적혀 있으면 광고를 부르고, 꺼 라고 적혀 있으면 안 부르는 거예요. 콘솔에 들어가서 그 칸의 값만 바꾸면 빌드를 새로 만들 필요 없이 다음 앱부터 광고가 즉시 안 떠요. 클로드한테 그 흐름을 그대로 적어서 기도모임 다음 앱들에 다 깔리게 해 달라고 했어요. 그 다음부터 만드는 앱들엔 그 토글이 기본으로 들어갔어요.
토글이 들어가니까 한 가지 좋은 게 생겼어요. 새 앱을 마켓에 올릴 때, 광고를 꺼 로 두고 심사에 보낼 수 있게 된 거예요. 사실 이건 그 사건 풀고 나서 며칠 뒤에 다른 자리에서 알게 된 거였는데요. 앱을 마켓에 처음 올릴 때는 광고를 빼고 올리는 게 승인이 훨씬 빨라요 라는 거였어요. 광고가 깔린 채로 첫 심사에 들어가면 광고 관련 항목을 더 까다롭게 본다고요. 앞 앱에서 App Store 거절 메일 한 번 맞아 본 다음이라 심사를 까다롭게 본다 는 말이 그땐 더 무겁게 들렸어요. 그래서 첫 심사는 광고 꺼진 빌드로 통과시키고, 통과되고 나서 콘솔에서 토글을 켜 로 바꾸면 그 다음부터 광고가 도는 식이에요. 토글이 없었으면 그렇게 통과 후 광고 켜기 라는 워크플로우 자체가 안 됐어요. 빌드를 두 번 만들어야 했을 거예요. 사건 한 번이 그 워크플로우를 같이 데리고 와준 거였어요.
ads.txt 라는 단어를 알게 된 것도 그 즈음이었어요. 마켓에 올릴 때 광고 사이트 부분에 링크를 안 넣어두면 ads.txt 문제가 발생한다고요. 처음 두 앱은 그것도 모르고 올렸었고, 한 달 정지 풀고 나서 다시 올릴 땐 그 부분까지 같이 채워서 올렸어요. 한 번 데인 다음에 같은 자리에 다시 들어갈 땐 그 자리만 보는 게 아니라 그 주변까지 같이 보게 되더라고요.
지금은 새 앱을 만들 때 광고를 다는 절차가 거의 한 줄짜리 작업이 됐어요. 코드 안엔 광고 호출 부분이 이미 깔려 있고, 파이어스토어 칸엔 꺼 가 기본으로 들어가 있고, 심사 통과 메일이 오면 그날 저녁에 콘솔 들어가서 켜 로 바꾸면 끝이에요. 그 한 글자 바꾸는 자리에 한 달 정지라는 사건 한 개가 통째로 들어가 있다는 게, 거기에 손을 갖다 댈 때마다 한 번씩 떠오르는 자국이 됐어요. 광고 단가는 여전히 빵 한 개 값에 못 미치는 액수에서 시작하지만, 그 한 글자가 적어도 내 통제 안에 있다 는 감각만큼은 그 사건 전이랑 후가 좀 달라요. 그 감각이 한 달짜리 학비였다고 치면 그렇게 비싸지만은 않은 학비였던 거 같기도 해요. 한 글자 바꾸는 자리에 손을 한 번 더 멈춰 두고 보는 정도의 학비요.

