Claude Code로 실수로 Fork Bomb 만들고 컴퓨터 벽돌됨 (+ $3,800 API 청구서)
Accidentally created my first fork bomb with Claude Code
TL;DR Highlight
Claude Code의 SessionStart 훅이 재귀적으로 Claude 인스턴스를 무한 생성하는 fork bomb을 만들어버려 컴퓨터가 밤새 뻗었고, 아찔한 API 청구서 위기를 겪은 실제 사고 후기.
Who Should Read
Claude Code나 Cursor 같은 AI 코딩 에이전트를 적극적으로 활용하고 있는 개발자, 특히 훅이나 자동화 스크립트를 설정해서 쓰는 사람이라면 반드시 읽어봐야 한다.
Core Mechanics
- 개발자가 Claude Code의 SessionStart 훅(세션 시작 시 자동 실행되는 스크립트)을 만들었는데, 이 훅이 claude -p ... 명령으로 백그라운드 CC(Claude Code) 인스턴스 2개를 spawn하도록 설정했다. 문제는 각 인스턴스가 시작될 때마다 또 훅이 실행되면서 1→2→4→8→...→2^N으로 기하급수적으로 프로세스가 폭발하는 fork bomb이 만들어진 것이다.
- fork bomb(포크 폭탄)이란 프로세스가 자기 자신을 계속 복제해서 시스템 자원을 모두 소진시키는 고전적인 공격/실수 패턴이다. 이 경우 새벽 2시에 자리를 떠나면서 눈치채지 못했고, 컴퓨터가 밤새 혼자 수백 개의 Claude Code 인스턴스를 돌리다가 완전히 먹통이 됐다.
- 다음날 오전 11시에 컴퓨터를 켜보니 마우스, 키보드, 트랙패드 모두 무응답 상태였고 본체는 뜨겁게 달아올라 있었다. Activity Monitor를 열어보니 수백 개의 CC 인스턴스가 돌고 있었고 메모리 압력이 최대치(red)를 찍은 상태였다.
- 강제 재시작 후 가장 먼저 API 청구서를 확인했는데, 다행히 $600 정도만 추가된 상태였다. 이 사람의 예상보다 피해가 적었던 이유는 Claude Code 자체가 Bun → React → TUI 체인으로 인스턴스당 메모리를 엄청나게 잡아먹기 때문에, 메모리가 먼저 고갈되어 컴퓨터가 일찍 뻗어버렸기 때문이다. 즉 소프트웨어가 무거운 덕분에 API 청구액이 더 불어나기 전에 멈춰진 것이다.
- 해결 방법은 간단했다. ~/.claude/settings.json 파일을 열어 문제의 SessionStart 훅을 제거하는 것으로 끝났다. 그 이후 Activity Monitor로 남은 인스턴스가 없는지 확인하면서 한 손을 전원 버튼에 올려두고 claude를 실행해봤다고 한다.
- 이 개발자는 2025년 초부터 Cursor를 3억 1,100만 토큰 이상 사용할 정도로 AI 코딩 도구를 적극 활용해왔다. 처음엔 agentic workflow 도입에 회의적이었지만, 어차피 피할 수 없다면 제대로 마스터하겠다는 마음으로 Claude Code 계정을 신청해 깊게 파고들었고 그 과정에서 이 사고가 발생했다.
- 이 사건은 AI 에이전트 훅이나 자동화 설정이 얼마나 위험할 수 있는지를 보여주는 생생한 사례다. 훅은 강력하지만, 해당 훅이 실행하는 프로그램이 또 같은 훅을 트리거할 수 있다는 점을 반드시 고려해야 한다.
Evidence
- 다른 개발자들도 비슷한 실수 경험을 공유했다. Python multiprocessing 코드를 Windows에서 짰는데 if __name__ == '__main__' 블록으로 엔트리포인트를 감싸지 않아서 의도치 않은 fork bomb이 발생했다는 경험담이 있었다. Windows는 Unix의 fork()가 없어서 자식 프로세스를 만들 때 모듈을 재실행하기 때문에 이런 일이 생길 수 있다는 맥락 설명도 함께였다.
- 90년대 MS의 OLE/COM 공식 예제 코드를 실행했다가 fork bomb을 경험했다는 댓글도 있었다. 이를 계기로 '공식 문서 코드라도 절대 맹신하지 말라'는 교훈을 얻었다고 했다. AI가 생성한 코드를 그대로 훅에 넣은 이번 사례와 맥락이 닿는 부분이다.
- '첫 번째 fork bomb'이라는 표현에서 성장 마인드셋이 보인다는 유머러스한 댓글이 달렸다. 즉 또 만들 거라는 뉘앙스인데, 커뮤니티 분위기가 이 사고를 재앙이 아니라 통과의례처럼 받아들이는 분위기였다.
- Claude Code가 SessionStart 훅에서 왜 굳이 CC 인스턴스를 2개 더 띄우려 했는지, 그 의도된 목적이 무엇이었냐는 질문이 달렸다. 원문에서는 이 부분에 대한 충분한 설명이 없어 독자들이 궁금해했다. 아마도 /adhd 같은 특정 스킬이나 병렬 작업 처리를 위한 실험이었을 것으로 추측되었다.
- 글에 언급된 /adhd 스킬(ADHD를 가진 개발자를 위한 Claude Code 커스텀 기능으로 추정)이 무엇인지 궁금하다는 댓글이 많았다. 실제로 ADHD가 있는 개발자에게 유용할 것 같다는 반응이 있었다.
How to Apply
- Claude Code의 SessionStart, PostToolUse 등 훅을 설정할 때, 해당 훅 내에서 claude 명령이나 cc 명령을 실행하면 새 인스턴스가 또 훅을 트리거해 fork bomb이 될 수 있다. 훅 스크립트 안에서는 절대로 Claude Code 자체를 spawn하지 말고, 반드시 재귀 가능성을 먼저 검토한 후 배포할 것.
- Claude Code의 훅 설정은 ~/.claude/settings.json에서 관리된다. 훅을 새로 만들었다면 Activity Monitor(Mac) 또는 Task Manager(Windows)를 열어두고 프로세스가 폭발적으로 늘어나지 않는지 눈으로 확인하면서 테스트하는 것이 안전하다. 이상 징후 발견 즉시 settings.json에서 해당 훅 항목을 제거하면 된다.
- Anthropic Claude API를 회사 비용으로 사용 중이라면 Usage 페이지에서 일별 비용 알림을 설정해두는 게 좋다. 이번 사례처럼 자동화 스크립트 실수 하나로 단기간에 수백~수천 달러가 쌓일 수 있고, 조기에 알림을 받으면 피해를 최소화할 수 있다.
- Python multiprocessing이나 subprocess를 활용한 병렬 처리 코드를 짤 때도 유사한 위험이 있다. Windows 환경이라면 반드시 if __name__ == '__main__': 블록으로 엔트리포인트를 감싸서 자식 프로세스가 부모 코드를 재실행하지 않도록 해야 한다.
Code Example
snippet
# 위험한 예시 - SessionStart 훅이 claude 인스턴스를 spawn하면 fork bomb 발생
# ~/.claude/settings.json
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
# 이 명령이 새 CC 인스턴스를 시작하면 그 인스턴스도 동일한 훅을 실행 → 무한 증식
"command": "claude -p 'some background task' &"
}
]
}
]
}
}
# 안전하게 훅 제거하기
# 1. 터미널에서 settings.json 열기
nano ~/.claude/settings.json
# 2. SessionStart 훅 항목 삭제 후 저장
# 이미 fork bomb이 발생했다면 (Mac 기준)
pkill -f claude # claude 프로세스 전체 종료
# 그래도 안 되면 전원 버튼으로 강제 재시작Terminology
fork bomb프로세스가 자기 자신을 계속 복제(fork)해서 시스템 자원을 모두 소진시키는 패턴. 1개가 2개, 2개가 4개, 4개가 8개... 기하급수적으로 늘어나 결국 컴퓨터가 다운된다.
SessionStart hookClaude Code에서 새 세션이 시작될 때 자동으로 실행되도록 설정할 수 있는 스크립트. ~/.claude/settings.json에서 설정하며, 잘못 작성하면 세션이 열릴 때마다 무한히 실행될 수 있다.
CC (Claude Code)Anthropic이 만든 AI 코딩 에이전트 CLI 도구. 터미널에서 claude 명령으로 실행하며 코드 작성, 수정, 실행을 AI와 협업으로 처리할 수 있다.
agentic workflow사람이 일일이 지시하지 않아도 AI가 스스로 판단하고 여러 도구를 연속으로 사용해 작업을 완료하는 방식. 단순 질의응답이 아니라 실제 코드 실행, 파일 수정 등을 자율적으로 수행한다.
Activity MonitormacOS의 작업 관리자. 현재 실행 중인 프로세스 목록, CPU/메모리 사용량을 실시간으로 확인할 수 있다. 이번 사례에서 수백 개의 claude 프로세스를 발견한 도구다.
BunNode.js를 대체하는 고성능 JavaScript 런타임. Claude Code가 내부적으로 Bun → React → TUI 체인을 사용해 인스턴스당 메모리를 상당히 많이 차지한다.