자동화 티는 어디서 나는가 (5) — 분당 5~6건이 자백한 것
자동 답글 20건의 타임스탬프가 1분에 5~6개씩 찍혔다. 원인은 프롬프트에 적은 '자연스러운 간격'이라는 모호한 지시였다. 그런데 간격을 늘리는 것보다 더 큰 지문이 따로 있었다.
문제
내 블로그 댓글에 자동으로 답글을 다는 작업을 만들어 돌렸다. 잘 도는 것 같았다. 내용도 나쁘지 않았다 — 댓글을 실제로 읽고, 질문에는 답하고, 상대가 자기 경험을 꺼내면 그 지점을 받아줬다.
그런데 발행된 답글들의 타임스탬프를 보니 이랬다.
| 시각 | 답글 수 |
|---|---|
| 01:06 | 5 |
| 01:07 | 6 |
| 10:52 | 5 |
| 10:53 | 4 |
분당 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개를 연달아 다는 것은 여전히 이상하다. 그리고 더 큰 게 하나 더 있었다.
진짜 지문은 간격이 아니었다
발행된 답글 20개를 다시 봤다.
- 모든 댓글에 답글이 달려 있었다 — 응답률 100%
- 전부 2~3문장, 구조가 유사
- 전부
~요체, 이모지 빈도도 비슷
사람은 모든 댓글에 답하지 않는다. "좋은 하루 되세요 🌼" 같은 순수 인사성 댓글에까지 정성껏 2~3문장으로 답하는 사람은 없다. 그리고 사람의 답글은 길이가 들쭉날쭉하다. 어떤 건 한 줄이고, 어떤 건 길다.
간격을 아무리 벌려도 “모든 댓글에, 같은 길이로, 빠짐없이” 답하면 그게 자동화의 지문이다.
리스크 우선순위를 다시 잡았다
처음엔 스팸 필터를 걱정했다. 그런데 실제 우선순위는 반대였다.
- 🔴 사람 눈에 들키는 것 — 이웃이 답방 와서 보면 답글 20개 시각이 전부 같은 분이다. 이 커뮤니티의 핵심 가치가 “성의있는 소통”이라 신뢰를 직접 깎는다.
- 🟡 댓글 시스템의 스팸·도배 필터
내용을 아무리 정성껏 써도 타임스탬프가 자동화를 자백한다. 공들여 쌓은 신뢰를 메타데이터가 무너뜨리는 구조다.
레버 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번이 가장 크다.

