AI 에이전트에게 GitHub 작업을 맡기던 중, 어느 날 계정이 정지(Suspended)되었습니다.
본 글에서는 무슨 일이 일어났는지, 어떻게 이의를 제기했는지, 그리고 같은 일이 발생하지 않도록 무엇을 바꿀 것인지 정리했습니다.
AI 에이전트에게 '모든 것을 처리해 달라'고 부탁하기 시작하는 분들에게 먼저 알고 계셨으면 하는 이야기입니다.
계정 정지는 이의 제기 후 6일 만에 해제되었습니다.
어떤 규정을 위반했는지까지는 마지막까지 구체적으로 알려주지 않았기 때문에, 원인은 추측입니다.
저는 개인 공개 리포지토리 15개를 AI 에이전트(Claude Code)에게 수정하도록 했습니다.
내용은 버그 수정, 테스트 추가, 문서 정리 등이었습니다.
수정된 결과를 다른 AI가 채점하고 점수가 오를 때까지 수정을 반복하는 과정을 여러 번 거쳤습니다.
AI 에이전트는 작업을 작게 나누어 '서브 에이전트(sub-agent)'에게 분배할 수 있습니다.
이번에는 리포지토리별로 서브 에이전트를 하나씩 할당하여 15개를 동시에 작동시켰습니다.
각 에이전트는 수정 사항을 push하고, PR(Pull Request)을 생성하며, CI(Continuous Integration, 자동 테스트) 결과를 확인합니다.
돌아보면 하루 동안 다음과 같은 일들이 벌어졌습니다.
- PR을 약 50개 정도 생성
- 각 PR에 반복적으로 push
- 수십 초 간격으로 API를 통해 CI 결과 확인
- 실패한 CI 재실행
이 모든 작업은 제 자신의 리포지토리 내에서 이루어진 것이었습니다.
누구에게도 폐를 끼칠 의도는 전혀 없었습니다.
단지, 인간의 수작업으로는 불가능한 양과 속도였다는 것은 분명합니다.
수정 5주차 작업을 진행하던 도중, GitHub API가 모두 다음 오류를 반환하기 시작했습니다.
HTTP 403 "Sorry. Your account was suspended"
브라우저로 계정에 접속했을 때 다음과 같이 표시되었습니다.
Access to your account has been suspended due to a violation of our Terms of Service.
이는 '이용 약관(Terms of Service)을 위반했기 때문에 계정을 정지했습니다'라는 의미입니다.
어떤 규정을 위반했는지에 대한 내용은 적혀있지 않았습니다.
날짜와 시간은 일본 시간 기준입니다.
| 일시 | 사건 내용 |
|---|
| 10/8(목) 낮~심야 | AI 에이전트로 15개 리포지토리의 수정을 여러 번 반복. PR은 하루에 약 50개 |
| ... | |
정지 상태였던 기간은 대략 6일이었습니다.
정지에 알아차린 시점부터 이의 제기를 보낼 때까지는 반나절 정도가 걸렸습니다.
밤늦게 알게 된 점, 로그인 제한이 걸린 점, 그리고 이의 제기 양식을 찾는 데 시간이 걸린 것이 이유입니다.
GitHub는 심사 기간을 공지하고 있지 않습니다.
사용자들의 보고에 따르면, 며칠 만에 복구된 사람도 있고 몇 주가 걸린 사람도 있는 것 같습니다.
정지 중에는 그 계정으로는 아무것도 할 수 없다고 생각하는 것이 좋을 것 같습니다.
이번 경우는 주말을 사이에 두고 6일이었습니다.
계정이 정지되면, 그 계정으로는 어떤 것도 할 수 없게 됩니다.
예상보다 영향 범위가 넓어서 다음 항목들이 모두 함께 멈췄습니다.
- 리포지토리와 PR: 외부에서 보이지 않게 되었습니다. 사라진 것이 아니라, 정지된 상태입니다.
- GitHub Pages 사이트: 같은 계정으로 공개했던 사이트도 볼 수 없게 되었습니다.
- Zenn 아티클 업데이트: Zenn을 GitHub 리포지토리와 연동했기 때문에, 아티클 추가나 수정이 불가능해졌습니다.
- 주기 실행 태스크: GitHub를 사용하는 자동화된 작업은 매번 실패하게 되었습니다.
하나의 계정에 여러 가지 것을 올려두다 보니, 멈추었을 때 모든 것이 함께 멈춥니다.
이것이 이번에 가장 크게 느낀 점입니다.
GitHub 규정에는 자동화에 관한 규칙이 있습니다.
'Acceptable Use Policies(사용 가능 정책)'에는 금지 사항으로 다음과 같은 항목들이 있습니다.
- 과도한 자동 대량 활동 (excessive automated bulk activity)
- 자동적인 수단을 통해 서버에 과도한 부담을 주는 행위 (undue burden on our servers through automated means)
이번 작업은 제 자신의 리포지토리만을 대상으로 한, 진지한 수정이었습니다.
그럼에도 불구하고, 짧은 시간에 대량의 PR(Pull Request)과 push, 그리고 API 호출을 반복했기 때문에 기계적으로는 '지나치게 자동화된 대규모 활동'으로 보였을 가능성이 있습니다.
또 하나 고려할 수 있는 것은 계정 보유 방식입니다.
GitHub 이용 약관에는 무료 계정은 1인당 1개만 허용되어 있다고 명시되어 있습니다.
다만, 자동화 전용의 '머신 계정(machine account)'은 개인 계정과 별도로 1개만 가질 수 있습니다.
자동화를 위해 별도의 계정을 만들고 있다면, 이 규정에 맞는지 확인해 보는 것이 안심할 수 있는 방법입니다.
계정 정지 화면에 있는 'contact support'를 통해 지원팀에 연락할 수 있습니다.
실제로 제가 진행했던 절차는 다음과 같습니다:
- 복구 신청 전용 양식(GitHub 공식 페이지의 'GitHub Appeal and Reinstatement'에서 열 수 있음)을 엽니다.
- 로그인할 수 없는 경우, 먼저 '로그인 불가' 창구를 통해 이메일 주소를 확인합니다.
- 신청 유형을 선택합니다.
- 무엇을 했는지 솔직하게 작성하여 제출합니다.
신청에는 두 가지 종류가 있습니다.
- Reinstatement(복구): 지적된 점을 수정했으니, 원래대로 되돌려 달라는 요청입니다.
- Appeal(이의 제기): 위반한 것이 아니라고 반박하는 요청입니다.
저는 양이 너무 많았다는 부분에 대한 경각심이 있었기에 '복구'를 선택했습니다.
본문에는 다음 내용을 영어로 작성했습니다:
- AI 에이전트를 사용하여 본인의 리포지토리를 수정했음
- 타인의 리포지토리에는 아무것도 기여하지 않았음
- 단시간에 대량의 작업을 진행한 것이 남용으로 보였을 수 있음
- 앞으로는 양과 속도를 조절하겠다고 약속함
제출하자마자 티켓 번호가 포함된 자동 회신이 도착했습니다.
지원팀이 바빠서 시간이 걸린다는 내용이었습니다.
같은 신청을 여러 번 보내면 오히려 지연될 수 있습니다.
추가 정보는 도착한 이메일에 답장하는 방식으로 보냅니다.
몇 시간 후, 담당자로부터 'GitHub를 어떻게 사용할 계획인지 알려달라'는 회신이 왔습니다.
부정 사용을 감지하는 시스템에 걸렸기 때문에 사람이 직접 확인하고 있다는 설명도 덧붙여져 있었습니다.
그래서 다음 내용을 답변했습니다:
- 개인 개발자이며, 범용적인 개발 도구를 공개 리포지토리에 만들고 있음
- Zenn 블로그와 작은 정적 웹사이트도 이 계정으로 공개하고 있음
- AI 에이전트는 본인의 리포지토리만 조작하며, PR 병합(merge)은 직접 판단함
- 한 번에 너무 많이 움직인 것에 대한 사과와 향후 구체적인 상한선 제시
- 사용 중인 GitHub 계정은 이것 하나뿐임
그 5일 후에 '제한을 해제했습니다'라는 연락이 왔고, 정상적으로 사용할 수 있게 되었습니다.
'사용 계획'을 물어보면, 어떤 목적으로 사용하는 계정인지, 어떻게 자동화할 것인지, 그리고 앞으로 어떻게 제한할 것인지를 구체적으로 답변하는 것이 좋을 것 같습니다.
계정이 정지된 동안 다른 계정을 만들어서 같은 작업을 계속하는 것은 삼가야 합니다.
이는 계정 정지 회피로 간주되어 해제가 더욱 어려워질 위험이 있습니다.
여기서부터가 본론입니다.
AI 에이전트에게 GitHub 작업을 맡길 때의 규칙을 다음과 같이 변경하기로 했습니다.
GitHub 공식 문서인 'REST API 사용 모범 사례(Best Practices)'에 있는 권장 사항도 반영했습니다.
공식 문서는 API 요청은 동시에 보내기보다는 '순차적으로' 보내는 것이 좋다고 권장합니다.
이번에는 15개의 서브 에이전트를 동시에 구동하고 있었습니다.
GitHub에 기록을 남기는 작업은 최대 2개까지로 제한했습니다.
AI 에이전트는 수정할 때마다 push를 하고 CI(Continuous Integration)에서 확인하려는 경향이 있습니다.
이를 중단하고, 로컬 환경에서 테스트와 lint가 통과한 후에 한 번에 모아서 딱 한 번만 push하도록 했습니다.
CI 횟수가 줄어들기 때문에 GitHub의 부담도, 저의 대기 시간도 줄어듭니다.
공식 문서에서는 POST나 PUT 같은 쓰기 작업을 연속적으로 보낼 때는 1초 이상 간격을 두는 것이 권장됩니다.
여기에 여유를 더해 다음과 같이 정했습니다:
- PR 생성은 1분 이상 간격 유지
- 일일 상한선은 PR 10개, push 30회까지
- 상한선을 초과할 것 같으면 다음 날로 미루기
CI 결과를 수십 초마다 API로 확인하는 것은 부담이 큰 방식입니다.
공식 문서에서도 폴링(polling, 반복적으로 확인하러 가는 행위)보다는 Webhook 같은 알림을 사용하는 것이 권장됩니다.
알림으로 기다릴 수 있을 때는 알림으로 기다리고, 정말 확인해야 할 때만 2분 이상 간격을 두도록 했습니다.
GitHub는 너무 많이 사용하면 "secondary rate limit(2차 제한)"이라는 오류를 반환할 수 있습니다.
AI 에이전트는 오류가 발생하면 "고치려고" 재시도를 반복하는 경향이 있습니다.
여기서 계속 시도하면 상황이 악화됩니다.
지침 파일에는 다음과 같이 작성해 둡니다.
403, 429, "secondary rate limit"이 발생하면 재시도하지 말고 즉시 작업을 중단하고 보고하세요.
하루에 15개의 리포지토리를 수정하는 것을 멈추고, 하루에 3~5개씩 나누어 진행합니다.
서두를 이유가 없는 작업이라면 천천히 진행해도 문제가 없습니다.
이번에는 도구의 리포지토리, 블로그(Zenn), 퍼즐 사이트까지 모두 같은 계정에 올리고 있었습니다. 멈췄을 때의 영향을 줄이기 위해 중요한 것은 어디에 둘지 재검토합니다.
마지막으로, AI 에이전트를 위한 지침 파일(AGENTS.md나 CLAUDE.md 등)에 넣을 규칙의 예시입니다. 바로 사용할 수 있도록 작성해 두었습니다.
## GitHub 사용 제한 사항
- GitHub에 기록하는 작업(push, PR, CI 재실행)은 동시에 2개까지. 리포지토리는 순차적으로 처리합니다.
- push는 로컬에서 테스트와 lint가 통과한 후에, 하나의 PR당 원칙적으로 1회입니다.
...
- AI 에이전트는 인간이 할 수 없는 양과 속도로 GitHub를 조작할 수 있습니다.
- 자신의 리포지토리 작업만이라도, 양이 너무 많으면 규정 위반으로 간주될 수 있습니다.
- 동결되면 리포지토리뿐만 아니라 연동된 서비스까지 한꺼번에 중단됩니다.
- "동시에 작동하는 수", "push 횟수", "쓰기 간격", "오류로 중단되는 경우" 등을 지침 파일에 명시해 두세요.
AI 에이전트에게 맡기는 것은 매우 편리합니다. 다만, 맡기는 범위와 함께 "속도의 상한선"도 정해 둘 필요가 있었습니다.
해제된 후에는 이 기사의 재발 방지책을 지키며 조금씩 작업을 재개하고 있습니다.
- GitHub Acceptable Use Policies
- GitHub Terms of Service
- GitHub Appeal and Reinstatement
- Best practices for using the REST API
이 기사는 Zenn에도 게시했습니다.