한국 B2B 기업이 Claude Code 봇 17개를 월 100달러로 운영한다
한국의 B2B 유통회사에서 운영을 맡고 있는 비개발자가 사무실에 놓인 맥북 한 대로 17개의 Claude Code 봇을 매일 돌리고 있다. 봇들이 하는 일은 구체적이다. 고객 불만을 채팅 기록에서 읽어 접수하고, 월간 명세서를 메일로 발송하고, Slack을 감시하다 오류를 잡아내고, 시장 데이터를 반영해 상품 가격을 계산한다. 이 전부의 월 비용은 Claude Max 5배 티어 구독료 100달러이고, Anthropic API 청구액은 0달러다.
비용 구조는 표 한 장으로 끝난다. 구독료 100달러 외에 API 과금, 서버, 호스팅, 쿠버네티스, 데브옵스 인력 비용이 모두 0이다. Slack과 Google Workspace, Grafana는 회사가 원래 쓰던 계약을 그대로 썼고, 하드웨어는 이미 보유한 맥북이라 추가 지출이 없다. "AI로 사업을 자동화했다"는 글들이 으레 빠뜨리는 항목이 청구서인데, 이 사례는 그 청구서를 그대로 펼쳐 놓은 데 의미가 있다.
17개 중 실제로 모델을 호출하는 것은 3개뿐이다. 채팅 요약기, 사진 매칭기, 오류 감시기가 그렇고 나머지 14개는 데이터베이스를 읽어 템플릿에 넣고 Slack 카드를 만드는 평범한 파이썬 코드다. 모델이 필요한 3개도 토큰 과금 방식의 API를 쓰지 않는다. Claude Code CLI를 서브프로세스로 띄워 표준입력에 프롬프트를 넣고 표준출력에서 JSON을 받아 파싱하는 것이 전부다. SDK도, 토큰 회계도, 키 교체 절차도 없다.
CLI 호출에는 옵션이 붙는다. 제한 모드와 엄격한 MCP 설정으로 봇이 넘겨받지 않은 도구는 건드리지 못하게 막고, 세션 비저장 옵션으로 매 호출을 백지 상태에서 시작시킨다. 출력은 JSON으로 고정해 오류 여부를 담은 필드가 포함된 응답 봉투를 받는다. 실패가 반쯤 쓰인 문장으로 둔갑하지 않게 하려는 장치다.
이 구성이 성립하는 이유는 두 가지다. 하나는 코딩 에이전트가 요금제 기반 CLI로 제공된다는 점, 다른 하나는 봇의 호출이 아주 짧다는 점이다. 하루 몇백 번 수준이지만 프롬프트 하나에 짧은 JSON 하나가 돌아오는 게 전부라 17개를 붙여도 구독 한도의 벽에 부딪히지 않았다. 사람처럼 길게 대화하지 않기 때문이다.
한계도 분명하다. Max 티어에는 사용량 한도가 있고, 그보다 더 자주 문제가 되는 건 인증이다. CLI 로그인이 만료되면 봇 17개가 같은 순간에 나란히 멈춘다. 실제로 겪은 일이다. 요약기에는 API 폴백 경로가 준비돼 있지만 환경변수를 설정하지 않아 현재는 CLI로만 동작한다. 쓰기 작업을 병렬로 돌린 날에는 300건이 넘는 데이터베이스 잠금 오류와 7건의 처리 포기가 발생해 이후 쓰기는 순차 실행으로 바꿨다. 요약은 최대 출력 토큰을 1,200으로, 반환 항목을 8개로 제한한다. 그 이상이 나오면 요약이 아니라 다른 일을 하고 있다는 신호로 보고 결과를 버린다.
청구서에 찍히지 않는 가장 큰 항목은 사람의 시간이다. 첫 두 달은 주당 10시간에 가까웠고 지금은 1시간 안팎이다. 그 시간은 대부분 규칙을 쓰고 고치는 데 들어갔다. 접수 로직 하나에만 40개가 넘는 예외 규칙이 붙었다. 봇 오류는 채널이 아니라 개인 메시지로 받도록 해 두었기 때문에, 모든 알림을 보는 사람은 결국 한 명이다.
개발자 입장에서 참고할 지점은 인프라 쪽이다. 클라우드 인스턴스도, 도커도, 배포 파이프라인도, YAML도 없다. launchd가 파이썬 프로세스 하나를 살려 두는 구조다. 대신 기계가 잠들면 안 된다. 봇이 조용해졌을 때 가장 먼저 확인할 것은 로그가 아니라 전원 설정이다. 서비스로 전환할 때의 함정도 있다. launchd는 셸의 PATH를 물려주지 않아서, 터미널에서 잘 돌던 봇이 절대 경로 없이 바이너리 이름만 부르면 조용히 죽는다.
정리하면 이렇다. 구독으로 시작하고, 작업별 출력 토큰 상한을 정확성 장치로 삼고, 서버를 사지 말고, 사람이 들어가는 시간을 청구서에 적어 넣으라는 것이 이 운영자가 1년 전의 자신에게 해 주고 싶은 말이다. 100달러라는 숫자가 작아 보이는 건 규칙을 쓰고 알림을 읽는 일을 여전히 사람이 하고 있기 때문이다.