소셜 그로스 봇을 Graph API 위에 자기학습 루프로 짜다 보면 벽을 만납니다. 팔로우, 검색 결과 탭, 좌표 액션 — 공식 API가 안 열어줍니다. 그래서 실기기를 직접 조종했습니다.
앱이 아니라 기기다
설치형 앱을 만들지 않았습니다. USB로 물린 안드로이드 폰(A15)을 adb로 조종합니다. 화면 좌표 탭, 텍스트 입력, 딥링크 열기. 앱 심사도, API 스코프도 없습니다.
adb shell input tap 540 1200
adb shell am start -a android.intent.action.VIEW \
-d "https://www.threads.net/search?q=%EC%9A%B4%EC%84%B8"함정 몇 개
- 한글 input 불가.
adb shell input text는 ASCII만 넣습니다. 한글 검색어는 딥링크 URL 인코딩으로 우회합니다 —input text로 타이핑하는 게 아니라 검색 URL을 통째로 열어버립니다. - 팝업 경유 팔로우. 검색 결과에서 바로 팔로우 버튼이 없어, 아바타 탭 → 프로필 팝업 → 팔로우로 경로를 태웁니다.
- 세이프존 + 포그라운드 가드. 매 액션 전에 올바른 앱이 포그라운드인지 확인하고, 정해진 시간대에만 짧게 버스트로 사람처럼 굽니다.
- launchd 매시 버스트. 상주 대신 시간마다 짧게 깨워 몇 개만 처리합니다.
자동화의 끝이 아니라 시작
adb가 못 넘는 벽이 있습니다: CAPTCHA 체크포인트. 한 계정이 체크포인트에 걸리면 그 기기에서 사람이 직접 풀어야 합니다 — 원격으로도, 다른 기기로도 안 됩니다. 체크포인트는 기기 바인딩이라, 자동화가 계정을 되살릴 수 없습니다.
그래서 안전판을 뒀습니다: 한 플랫폼이 체크포인트에 걸리면 .paused 파일 하나로 그 플랫폼만 정지하고 나머지는 계속 돌립니다. 봇이 계속 밀어붙여 계정을 더 태우는 걸 막는 게 핵심입니다.
왜 이렇게까지
공식 API로 되는 건 API로 합니다(안전하니까). adb 직접조종은 API가 아예 안 여는 소량 액션에만, 사람 속도로, 안전판을 겹겹이 깔고 씁니다. 자동화가 계정을 태우면 그건 자동화가 아니라 손실입니다.
댓글·재게시 자동은 일부러 뺐습니다 — 스팸 리스크가 이득보다 큽니다. 자동화의 목적은 "많이"가 아니라 "안 태우고 꾸준히"입니다.