구글 애드센스 도전기 #3 글 검사기가 build failed 한 줄로 멈출 때 고치는 법

구글 애드센스 도전기6편 중 3번째

검사 스크립트를 하나로 묶어 돌린다면 출력에서 "통과"와 "안 돌았음"이 다른 글자로 찍혀야 한다. 첫 단계가 죽고 "나머지는 건너뜀" 한 줄만 나오면 그건 통과의 증거가 아니다.

검사를 다섯 개 붙여두면 다섯 번 걸러진다고 생각했다. 퇴사하고 AI로 회사를 세우는 중이라 사람이 읽고 판단하던 자리를 자꾸 스크립트로 채우는데, 그날 저녁에는 한국 정보를 인도네시아어로 내보내는 사이트에 올릴 비자 기사 한 편을 그 검사기에 넣었다. 돌아온 출력은 한 줄이었다.

판정 대신 “나머지”를 받았다

build failed, skipping the rest

the rest가 무엇인지는 적혀 있지 않다. 분량 검사가 돌았는지, 내부 링크를 셌는지, 출처 목록을 봤는지 이 줄로는 알 수 없다. 빌드가 왜 죽었는지도 여기 없다. 기사를 검사기에 넣은 이유는 “이걸 내놔도 되나”를 판정받기 위해서였는데 손에 쥔 것은 판정을 못 했다는 통보였고, 그 통보에는 무엇이 안 돌았는지조차 빠져 있었다.

막대 두 개. 검사를 다섯 개 붙여뒀지만 판정이 나온 것은 첫 칸 하나뿐이고 나머지 넷은 건너뛰었다.

개수를 안전으로 읽었다

검사를 늘린 만큼 통과 확률이 올라간다고 믿고 있었다. 실제 모양은 다섯 개가 한 줄로 이어진 사슬이었다. 맨 앞 칸이 빌드였고, 그게 죽으면 뒤 칸은 돌지 않는다. 다섯 개를 붙여서 얻은 상태는 “전부 통과”와 “첫 칸에서 멈춤” 둘뿐이고, 사슬 중간이 어떤지는 출력에 영영 안 나온다.

그 자리에서 기사 본문부터 의심했다. 분량이 모자라거나 출처가 부족해서 걸렸다고 보고 원고를 열었다. 틀린 방향이었다. 멈춘 것은 검사가 아니라 빌드였다.

러너 밖에서 한 번 돌리니 보였다

검사기를 거치지 않고 빌드 명령을 직접 돌렸다. 출력 끝에 기사 데이터가 컬렉션 스키마와 맞지 않는다는 줄이 있었다. 러너가 하위 명령의 출력을 삼키고 자기 요약 한 줄만 내놓는 동안, 원인은 삼켜진 쪽에 통째로 남아 있었다.

조건은 검사 여러 개를 러너 하나로 묶고 맨 앞에 빌드처럼 죽을 수 있는 단계를 둔 것. 증상은 출력이 한 줄로 끝나고, 건너뛴 검사 이름도 앞 단계가 죽은 이유도 그 줄에 없는 것. 회피법은 두 가지다. 러너가 건너뛴 단계 이름을 하나씩 찍게 만들고, 그래도 막히면 첫 단계 명령을 러너 밖에서 손으로 한 번 돌려 원문 출력을 본다.

검사 스크립트를 여러 개 묶어 하나로 돌리고 있다면, 출력에서 “통과”와 “안 돌았음”이 서로 다른 글자로 찍히는지 확인하세요. 두 상태가 같은 침묵으로 나오면 그 출력은 통과의 증거가 아닙니다.

다섯 개를 통과한 뒤에도 draft: true

그 뒤 같은 기사는 게이트 다섯 개를 전부 통과했다. 통과가 무엇을 보증하는지 알고 싶어서 분량을 재는 게이트 스크립트를 열어 임계값이 박힌 줄을 찾았다. 76번째 줄이었다.

if (words < 900) errors.push(`Body is ${words} words. Minimum 900.
Thin pages are the top rejection reason.`);

900이라는 선은 얇은 페이지가 심사에서 가장 흔한 반려 사유라는 판단에서 나왔고, 게이트는 그 선을 넘었는지만 본다. 통과는 900단어를 넘겼다는 뜻이다. 읽을 만하다는 보증은 이 줄 어디에도 없다. 검사기는 단어 수와 링크 수를 셀 뿐, 인도네시아어로 읽었을 때 말이 되는지는 세지 못한다. 자동으로 찍어내는 페이지에 분량 게이트를 걸 거라면 임계값을 코드에서 직접 열어보고, 그 숫자가 무엇을 막으려는 선인지 한 줄로 적어두세요.

게이트를 다 통과하고도 draft: true는 그대로 뒀다. 이 기사는 여자친구가 읽고 검토자 이름이 원고에 박혀야 발행된다. 검사기 다섯 개를 통과한 파일은 지금도 draft: true로 저장소에 있고, 러너에는 건너뛴 단계 이름을 찍는 일이 남아 있다.

← 전체 글