지난 글에서 매일 무인 게시 파이프라인을 만들었습니다. 그런데 게시는 시작일 뿐입니다. 다음 질문은 이거였죠: 봇이 뭘 올릴지 스스로 정하고, 댓글에 반응하고, 자기 성장을 추적하게 만들 수 있나? Threads와 인스타 4계정으로 해봤습니다 — 그리고 API가 정직하게 막아버린 벽까지 적습니다.
자기학습 루프
게시 위에 매일 밤 도는 피드백 루프를 얹었습니다:
- insights — 계정·게시물 지표 스냅샷(팔로워, 조회수).
- feedback — 성과로 콘텐츠 유형별 가중을 다시 계산해
weights.json에 씁니다. 스무딩 0.5, 하한 0.2·상한 3.0으로 클램프, 표본이MIN_N=4미만이면 안 움직입니다. 시간대별 성과로 최적 게시 시각도 뽑습니다. - content — 다음 게시물은 그 가중으로 유형을 고릅니다. 랜덤이 아니라 날짜 시드 결정론 선택이라, 재현 가능하면서도 성과를 따라 편향됩니다.
- digest — 주 1회 리뷰: 팔러워 증감과 "학습 결과 가중"을 채널에 요약합니다.
핵심은 이 루프가 자기를 먹는다는 겁니다. 오늘 게시의 성과가 내일의 가중이 되고, 손을 안 대도 시간이 지나며 조금씩 나아집니다.
댓글 봇: 모더레이션 먼저, 답글은 그다음
인스타 4계정과 Threads에 댓글 엔진을 붙였습니다. 순서가 중요합니다 — 먼저 거르고, 그다음 답한다:
- 모더레이션: 스팸·악플은 보수적으로 숨김(삭제 아님, 전량 로그). 애매하면 안 건드립니다 — 오탐이 미탐보다 나쁘니까요.
- 자동 답글: 정상 댓글에만 짧게 답합니다.
안전장치를 잔뜩 깔았습니다: 자기 댓글 제외, username 못 읽으면 계정 통째 스킵(fail-closed), ledger는 성공했을 때만 기록(실패는 재시도로 남김), 회당 상한, 기본은 DRY, 스코프 없으면 조용한 no-op.
함정 하나가 재밌었습니다. 욕설 필터가 "병신"을 잡는데 — 제 사주 앱들이 병신년/병신생/병신해(간지해)를 정상적으로 자주 씁니다. 순진한 필터는 고객 댓글을 검열해버리죠. 그래서 부정 룩어헤드 정규식(병신(?!년|생|해))으로 간지해만 통과시킵니다. 자동 모더레이션은 정상을 잘못 잡는 순간 신뢰를 잃습니다.
API가 막은 것 (정직담)
여기가 가장 배운 부분입니다. 성장을 자동화하고 싶었지만, API가 그걸 거부했습니다:
- Threads엔 팔로우 엔드포인트가 없다. 봇이 남을 팔로우해서 관심을 유도하는 흔한 성장 수법 — 아예 불가능합니다. 게시와 응대만 되지, 아웃바운드 팔로우는 없습니다.
- 멘션·키워드 검색은 code10. 스코프를 가져도 개발 모드에선
code10을 냅니다 — 앱 심사를 통과해야 열립니다. 그래서 "내 니치를 언급한 사람 찾아 대량으로 다가가기"는 막혔습니다.
이 벽을 인정하는 게 설계의 일부였습니다. 대량 아웃리치형 성장은 불가능하니, 봇은 반응형입니다 — 제 게시물에 달린 반응에만 응대합니다. 안 되는 걸 억지로 뚫는 것보다, 되는 범위를 정직하게 사는 게 낫습니다.
솔직한 부분
자기학습은 마법이 아닙니다. 표본이 작으면(MIN_N=4) 가중은 꿈쩍도 안 하고, 신생 계정 도달은 여전히 0 근처입니다. 이 시스템의 값어치는 폭발적 성장이 아니라 복리 그라인드입니다 — 손을 떼도 유지되고, 데이터가 쌓이면 스스로 조금씩 나아지고, 밴 안전은 여전히 유한·보수 규칙에서 나옵니다.
성장을 '척'으로 사지 마세요. 되는 만큼만, 매일, 조용히 복리로 굴리세요.