월 17개 Claude Code 봇 비용: 미국 달러 $100 (실제 수치)
B2B 회사에서 17개의 Claude Code 봇을 실제로 운영하는 월별 청구서: Claude Max 플랜 $100, API 지출 제로, 그리고 아무도 언급하지 않는 숨겨진 비용까지.
'AI로 내 사업 전체를 자동화했다'는 모든 게시물에는 똑같은 미스터리한 구멍이 있습니다. 바로 청구서입니다. 그 부분은 절대 없습니다. 마치 누가 식료품 값을 지불하는 장면을 건너뛴 요리 쇼 같습니다.
그래서 제가 가지고 있는 것은 이겁니다. 전부 다요. 하나의 표에 담길 수 있으며, 여러분은 이 표가 얼마나 짧은지에 짜증을 느낄지도 모릅니다.
17 Claude Code bots, one monthly bill: US$100
PNK-01 holding a sign: will automate for $20 a month
누구의 이야기인지 간단히 소개하자면: 저는 한국의 B2B 유통 회사에서 운영 업무를 담당하고 있습니다. 저는 개발자가 아닙니다. 의도적으로 무언가를 '클라우드'에 배포해 본 적이 없습니다. 그런데도 2025년 이후로, 열일곱 개의 Claude Code 봇이 매일 저희에게 실제 작업을 수행해 왔습니다: 채팅 기록에서 고객 불만을 읽어 분류하고 파일링하며, 월별 명세서를 이메일로 보내고, Slack을 모니터링하여 오류를 감지하며, 시장 데이터에 기반하여 제품 가격을 산정합니다. 이 모든 것이 사무실의 Mac 한 대에서 구동됩니다.
청구서
| 항목 | 월별 비용 |
|---|
| Claude Max 구독, 5배 티어 (봇이 구동되는 곳) | US$100 |
| ... | |
| 한 달에 백 달러. 그게 전부입니다. 이게 게시물 내용입니다. | |
알겠습니다. 이 게시물이 전부는 아닙니다. 이것이 천 달러가 아닌 백 달러인 이유가 바로 훔쳐 가치 있는 부분이니, 계속 읽어주세요.
The whole bill in four numbers
API 항목이 '0'인 이유: 봇들이 그저... CLI를 구동하기 때문
모든 튜토리얼은 키를 사용하여 API에 봇을 연결하고 토큰당 비용을 지불합니다. 저는 단 하나의 작업(폐쇄된 지원 채팅 요약)만을 위해 이를 구성했는데, 이 세 가지가 동시에 실행되기 때문에 빠르게 처리되기를 원했기 때문입니다. 심지어 그 하나조차도 실제로는 CLI에서 작동합니다. 나중에 게시할 내용을 위해 돌아와 계산했을 때 저를 놀라게 한 부분은 다음과 같습니다. 17개의 봇 중 실제로 모델과 통신하는 것은 단 세 가지뿐입니다. 채팅 요약기, 사진 매처(photo matcher), 그리고 오류 감지기(error watcher)입니다. 나머지 14개는 단순한 Python 코드입니다. 데이터베이스 입력, 템플릿 출력, Slack 카드 형태로 작동합니다. 모델이 필요한 세 가지는 API보다 훨씬 덜 똑똑하고 훨씬 저렴한 방식으로 작동합니다. 바로 Claude Code CLI를 이용하는 것입니다.
claude -p --model <model> --restricted \
--no-session-persistence --strict-mcp-config \
--output-format json --system-prompt "<system>"
이 한 줄의 명령어가 클레임 로거(claims logger), 오류 감지기, 명세서 전송기, 가격 봇에 대한 전체 “AI 통합 계층”입니다. 봇은 stdin으로 프롬프트를 작성하고 stdout에서 JSON을 받아 파싱한 후 다음 작업으로 넘어갑니다. SDK도 없고, 토큰 회계(token accounting)도 없습니다. 키 순환 의식(key rotation ceremony) 같은 것도 필요하지 않습니다. 이 모든 것이 제가 애초에 봇을 구축하는 데 사용하는 구독 서비스로 작동하는데, 여전히 약간 속이는 기분이 듭니다.
The whole SDK, in one command
이 플래그들은 장식이 아닙니다:
--restricted와 --strict-mcp-config: 봇은 제가 허가하지 않은 도구에 접근할 수 없습니다. 채팅 요약기가 아무리 궁금해지더라도, 제 파일 시스템을 탐색할 권한은 없습니다.--no-session-persistence: 모든 호출은 기억 상실 상태에서 시작합니다. 봇은 이전 고객의 정보를 기억해서는 안 됩니다. (인간도 그래야 하지만, 그것은 다른 글입니다.)--output-format json: 저는 is_error 필드가 포함된 봉투를 받습니다. 실패는 실패일 뿐이며, 요약처럼 보이는 미완성 문장이 아닙니다.
트레이드오프: Max는 사용량 제한(이 티어에서는 Pro 허용량의 5배)이 있으며, 만약 CLI에 로그인 정보가 기기에서 만료되면, 마치 제가 원인이었던 도미노처럼 17개 봇 전체가 동시에 작동을 멈춥니다. 실제로 그런 일이 있었습니다. 내용은 더 아래에 있습니다. 참고로 말씀드리자면, 봇 호출 자체가 매우 작기 때문에(프롬프트 하나 입력하고 짧은 JSON 하나 출력하는 정도이며, 하루 수백 번 발생합니다), 17개 봇으로도 제한에 도달한 적은 없습니다. 봇들은 길고 감성적인 대화를 나누지 않습니다.
API 키가 여전히 제 역할을 하는 곳 (아직은 그렇지 않지만)
요약 기능에는 API 폴백(fallback)이 있습니다:
body = {
'model': os.environ.get('CRM_API_MODEL', 'claude-sonnet-5'),
'max_tokens': 1200,
...
만약 ANTHROPIC_API_KEY가 설정되어 있다면, 요약은 API를 통해 전송됩니다. 현재는 설정되어 있지 않습니다. 이 폴백이 존재하는 이유는 구독료가 병목 지점이 되는 날, 밤 11시에 무언가를 다시 작성하는 대신 환경 변수 하나만 전환하기 위함입니다. 지금까지 청구서 상의 API 사용량은 매우 깔끔한 '0'을 기록하고 있습니다.
여기에 두 가지 가드레일(guardrail)이 있는데, 토큰 비용이 무료가 되더라도 유지할 것입니다: max_tokens는 1,200으로 제한되어 있는데, 그보다 많은 요약이 필요한 클레임 요약은 잘못되었기 때문입니다. 또한 모델이 반환하는 항목 수는 최대 8개로 제한됩니다. 8개를 초과하면 시스템이 불만 사항을 요약하는 것을 멈추고 고객의 주문 내역을 전사(transcribing)하기 시작합니다. 우리는 그 결과를 폐기하고 다시 시도합니다.
요약은 한 번에 세 개씩 실행됩니다. 스프레드시트 쓰기는 한 번에 하나씩 실행됩니다. 이것은 스타일 선호도가 아닙니다. 어느 날 저녁에 제가 쓰기를 병렬로 실행했을 때, 약 300건의 database is locked 오류가 발생했고, 봇이 단순히 포기한 채팅 기록도 7개가 있었습니다. 그날 밤에는 로그와 함께 별도의 게시물이 있습니다.
숨겨진 비용: 정직하게 계산한 제 시간
저는 이제 봇에 일주일에 약 한 시간을 사용합니다. 처음 두 달 동안은 이보다 더 가까운 열 시간이었습니다. 그 시간은 다음 작업에 쓰였습니다:
작성 및 재작성 규칙(Writing and rewriting rules). 클레임 로거만 해도 튜토리얼에서 언급되지 않은 '교체품도 결함인 경우 새 행으로 처리하고 수정으로 간주하지 않는다' 또는 '고객이 모든 것이 도착하지 않았다고 말하면, 이는 품질 불만 사항이 아니라 누락된 품목이다'와 같은 규칙이 40개가 넘습니다. 이 모든 것은 잘못된 행과 약간 짜증 난 동료에게서 비롯되었습니다.알림 읽기(Reading alerts). 모든 봇 오류는 채널이 아닌 제 DM으로 옵니다. 이것은 의도적인 것이며, 제가 모든 것을 보는 사람이라는 뜻입니다. 운이 좋네요.벤치마킹(Benchmarking). 요약 모델을 교체했을 때, 이전 채팅 기록에 대해 다시 실행하고 행들을 비교했습니다. 회사에서 최근 접수된 클레임과 주문 품목을 컨텍스트로 제공하자 정확도가 높아졌습니다. 이 벤치마크 덕분에 저는 이 시트를 신뢰합니다.
이 시간당 비용을 어떤 금액으로 책정하더라도, 그것은 청구서에서 가장 큰 항목일 것입니다. 가치가 있다고 생각합니다. 다만 '0원'이라고는 할 수 없습니다.
서버가 필요하지 않습니다. 잠들지 않는 노트북만 있으면 됩니다.
봇들은 평범한 MacBook에서 실행됩니다. launchd가 하나의 Python 프로세스를 활성 상태로 유지해 줍니다. 클라우드 인스턴스도, Docker도, 배포 파이프라인(deployment pipeline)도, YAML 파일도 필요 없습니다. 이미 노트북을 가지고 있다면 하드웨어 예산은 소진된 것입니다.
A station bench at 09:05, an iPad open on last night’s bot report
그리고 노트북 근처에 있을 필요도 없습니다. 제가 아침 9시 5분에 역의 벤치에 앉아 사무실에 도착하기 전에 밤사이 보고서를 iPad로 읽는 모습이 바로 저입니다. MacBook이 작업을 수행했고, 저는 숙제만 확인하는 거죠.
진짜 유일한 전제 조건은 기계가 깨어있게 하는 것입니다. '밤새 봇이 아무것도 기록하지 않았다'라는 말은 한 번 이상 '노트북이 잠들었다'는 의미였습니다. 이제 봇이 조용해지면 가장 먼저 확인하는 것은 봇 자체가 아니라 Mac의 전원 로그입니다. 플러그를 연결하고, 전원 사용 시 절전 모드(sleep-on-power)를 끄기만 하면 끝납니다.
'터미널에서 실행한다'는 단계에서 '서비스로 실행한다'는 단계로 넘어갈 때 발생하는 함정 중 하나가 있습니다. launchd는 여러분의 셸(shell)의 PATH를 로드하지 않기 때문입니다. 따라서 터미널에서는 완벽하게 작동했던 봇이 서비스로 실행될 때는 claude를 찾지 못해 조용히 실패하는 경우가 발생합니다.
. 수정 사항은 설정(config)에 전체 경로를 지정하는 것과, 코드에서 절대 이름(bare name)을 다시는 호출하지 않겠다는 엄숙한 다짐입니다.
1년 전의 나에게 해주고 싶은 말
API가 아닌 구독(subscription)부터 시작하세요. 안정화되기 전에 프롬프트를 서른 번이나 수정하게 될 것입니다. 이 단계에서 토큰당 비용을 지불하는 것은 '배우는 데 돈을 쓰는 것'과 같습니다. 저는 Pro (US$20)로 시작했고, 봇이 늘어나자 Max 5x (US$100)로 옮겼습니다. 그 등급만으로도 17개의 봇을 운영하기에 충분했습니다.작업당 출력 토큰을 제한하세요. 이것은 비용 도구가 아니라 정확성(correctness) 도구입니다. 3,000 토큰이 필요한 요약문은 통제 불능 상태가 된 요약문일 가능성이 높습니다.서버를 사지 마세요. 전원에 연결되어 잠자기 기능이 금지된 노트북 하나가 어떤 프롬프트 변경보다 더 많은 실패 사례를 줄여주었고, 비용도 들지 않았습니다.시간을 계산하세요. US$100이라는 금액이 적은 이유는 바로 사람이 자동화하기 어려운 부분, 즉 규칙 작성과 알림 확인 작업을 수행하고 있기 때문입니다.
이 시리즈의 다음 내용은 모든 봇 액션 앞에 놓이는 Slack 승인 버튼과, 왜 인간의 클릭 없이는 아무것도 배포되지 않는지에 관한 것입니다.
나로부터 한 마디
한 달에 US$100, 잠들지 않는 노트북 하나, 그리고 일주일에 약 한 시간의 제 시간이었습니다. 청구서 자체가 어려운 부분은 아니었습니다.
월별 상세 내용은 9월 보고서에 있으며, 왜 세 개의 봇만이 모델을 호출하는지에 대한 내용은 Haiku, Sonnet 또는 Opus에서 확인할 수 있습니다.