포스트

자동화 티는 어디서 나는가 (5) — 분당 5~6건이 자백한 것

자동 답글 20건의 타임스탬프가 1분에 5~6개씩 찍혔다. 원인은 프롬프트에 적은 '자연스러운 간격'이라는 모호한 지시였다. 그런데 간격을 늘리는 것보다 더 큰 지문이 따로 있었다.

자동화 티는 어디서 나는가 (5) — 분당 5~6건이 자백한 것

시리즈 「네이버 서이추 자동화」 1편 · 2편 · 3편 · 4편 · 5편 (현재 글)

문제

내 블로그 댓글에 자동으로 답글을 다는 작업을 만들어 돌렸다. 잘 도는 것 같았다. 내용도 나쁘지 않았다 — 댓글을 실제로 읽고, 질문에는 답하고, 상대가 자기 경험을 꺼내면 그 지점을 받아줬다.

그런데 발행된 답글들의 타임스탬프를 보니 이랬다.

시각답글 수
01:065
01:076
10:525
10:534

분당 5~6건. 약 11초에 하나씩.

사람이 댓글을 읽고 2~3문장을 쓰는 속도가 아니다. 게다가 새벽 1시에 답글 11개가 연달아 달렸다.

원인

프롬프트를 다시 봤다. 페이싱에 대해 이렇게만 적혀 있었다.

1
대상 사이에 자연스러운 간격을 둔다. 연속 즉시 실행 금지.

“자연스러운 간격”에는 숫자가 없다. 모호한 지시는 최소 대기(2~4초)로 해석됐다. 실행하는 쪽 입장에선 “즉시 연속”만 피하면 지킨 것이다.

이건 모델의 잘못이 아니라 지시문 설계의 실패다. 정성적 형용사로 정량적 제약을 표현하려 한 것.

해결 과정

간격만 고치면 되는 줄 알았다

처음엔 수치를 박는 것으로 끝내려 했다.

1
2
const wait = (min, max) => new Promise(s => setTimeout(s, min + Math.random()*(max-min)));
await wait(20000, 30000);   // 분당 2~3건

랜덤 지터는 필수다. 30초 고정 간격도 규칙적이면 기계로 읽힌다.

그런데 이걸 적용하고 나서도 마음에 걸리는 게 있었다. 간격을 90초로 늘려도, 새벽 1시에 답글 11개를 연달아 다는 것은 여전히 이상하다. 그리고 더 큰 게 하나 더 있었다.

01시 06분에 5건 07분에 6건, 10시 52분에 5건 53분에 4건이 몰려 찍힌 답글 타임스탬프 분포 내용이 아니라 이 분포가 자동화를 자백했다

진짜 지문은 간격이 아니었다

발행된 답글 20개를 다시 봤다.

  • 모든 댓글에 답글이 달려 있었다 — 응답률 100%
  • 전부 2~3문장, 구조가 유사
  • 전부 ~요 체, 이모지 빈도도 비슷

사람은 모든 댓글에 답하지 않는다. "좋은 하루 되세요 🌼" 같은 순수 인사성 댓글에까지 정성껏 2~3문장으로 답하는 사람은 없다. 그리고 사람의 답글은 길이가 들쭉날쭉하다. 어떤 건 한 줄이고, 어떤 건 길다.

간격을 아무리 벌려도 “모든 댓글에, 같은 길이로, 빠짐없이” 답하면 그게 자동화의 지문이다.

리스크 우선순위를 다시 잡았다

처음엔 스팸 필터를 걱정했다. 그런데 실제 우선순위는 반대였다.

  1. 🔴 사람 눈에 들키는 것 — 이웃이 답방 와서 보면 답글 20개 시각이 전부 같은 분이다. 이 커뮤니티의 핵심 가치가 “성의있는 소통”이라 신뢰를 직접 깎는다.
  2. 🟡 댓글 시스템의 스팸·도배 필터

내용을 아무리 정성껏 써도 타임스탬프가 자동화를 자백한다. 공들여 쌓은 신뢰를 메타데이터가 무너뜨리는 구조다.

레버 5개

#레버적용
1페이싱분당 2~3건 (20~30초 랜덤). 대상 전환 시 +20~40초
2응답률전부 답하지 않는다. 한 회 답글률 60~80%
3형식 다양화한 줄 / 2~3문장 / 4문장 이상, 이모지 유무, 문체를 섞는다
4회당 건수 분산하루 2회×15건 → 4회×7건
5실행 시각둥근 분(:00,:30) 회피 + 활동 시간대(08~23시)만

2번과 3번이 1번보다 크다. 이게 이번에 배운 것이다.

응답률은 이렇게 나눴다.

댓글 유형처리
질문 · 자기 경험 · 구체적 감상정성껏 답글 (2~4문장)
일반 감상 (“잘 보고 갑니다”)짧게 한 줄 또는 스킵
순수 인사성 (“좋은 하루 되세요 🌼”)대체로 스킵. 공감만 누르고 넘어간다
광고 · 도배스킵

프롬프트에 금지 문장을 박았다

같은 실수가 반복되지 않도록, 수치와 함께 금지 문장을 넣었다.

1
⚠️ "자연스러운 간격" 같은 모호한 표현으로 넘기지 말고 위 수치를 그대로 쓴다.

한계도 남겼다

cron은 진짜 랜덤 시각을 지원하지 않는다. 둥글지 않은 분(23분 등) + 스케줄러 내장 지터(수 분~10분)로 근사한 것이고, 완전한 무작위는 아니다. 이건 [한계]로 문서에 표기했다.

그리고 분당 2~3건은 답글 작성 기준으로는 여전히 사람보다 빠르다. 다만 2~5번이 붙으면서 “모든 댓글에, 같은 길이로, 빠짐없이, 한 번에” 라는 패턴이 깨졌기 때문에 조합 전체로는 티가 크게 줄어든다.

사용한 기술

  • 랜덤 지터 페이싱min + Math.random()*(max-min). 고정 간격은 그 자체가 패턴
  • 선택적 응답 정책 — 댓글 유형별 분기. 100% 응답률을 의도적으로 깨뜨림
  • 출력 형식 다양화 — 길이·문체·이모지를 한 회 안에서 섞기
  • 정본 문서 + 태스크 참조 구조 — 규칙 본문은 한 곳에만 두고, 예약 작업 4개가 그걸 가리키게 함. 값 복붙이면 하나만 고치고 나머지가 낡는다

🧭 기획자·사업자라면

  • 정성적 지시는 지시가 아니다. “자연스럽게”, “적절히”, “너무 빠르지 않게”는 실행하는 쪽에서 최솟값으로 해석된다. 숫자와 범위로 적어야 의도가 전달된다. 사람에게 내리는 업무 지시도 똑같다.
  • 자동화의 품질은 산출물이 아니라 메타데이터에서 들킨다. 내용은 공들였는데 타임스탬프·응답률·길이 분포가 균일하면 그게 자백이다. “결과물만 좋으면 된다”는 가정을 점검해야 한다.
  • 100% 처리가 항상 목표는 아니다. 모든 댓글에 답하는 것이 오히려 부자연스러웠다. 의도적으로 덜 하는 것이 품질인 영역이 있다. KPI를 “처리율 100%”로 잡으면 이 판단이 막힌다.
  • 규칙은 한 곳에만 둔다. 같은 규칙을 4개 작업에 복붙했다면 하나를 고칠 때 나머지 3개가 낡는다. 운영 문서에서도 정본과 참조를 나눠야 한다.

정리

  • 자동 답글 20건이 분당 5~6건으로 찍혔다. 원인은 프롬프트의 "자연스러운 간격" — 숫자가 없는 지시는 최솟값으로 해석된다.
  • 간격보다 큰 지문은 100% 응답률과 형식 균일성이었다. 사람은 모든 댓글에 답하지 않고, 답글 길이도 들쭉날쭉하다.
  • 레버는 5개다 — 페이싱 · 응답률 · 형식 다양화 · 회당 분산 · 실행 시각. 이 중 2·3번이 가장 크다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.