사례 2주차 2026-07-28 · AI 개인비서 텔레그램봇 만들기 연재

AI 에이전트를 서버에 띄웠더니 일주일에 5만원이 사라졌다

사건

개인 비서 AI를 텔레그램에 연결해서 쓰고 있습니다. 매일 아침·밤에 브리핑을 보내주고, 평소엔 그냥 말을 걸면 대답해주는 봇이에요. 클라우드 서버에 올려두고 24시간 돌립니다.

어느 날 API 선불 크레딧 5만원이 다 떨어졌다는 걸 알았습니다. 충전한 지 일주일 만에요.

이상했습니다. 제가 쓰는 건 하루 브리핑 두 번에 가끔 던지는 잡담이 전부인데, 그 정도로 5만원이 나갈 리가 없거든요. 텍스트 몇 줄 주고받는 게 그렇게 비싼 일은 아닙니다.

결론부터 말하면 원인은 설정 한 줄이었고, 그것 때문에 메시지 하나 보낼 때마다 15만 토큰을 보내고 있었습니다.


왜 몰랐을까 — 조용한 실패

먼저 짚고 갈 게 있습니다. 왜 일주일 동안 몰랐느냐입니다.

브리핑은 계속 왔습니다. 봇도 대답했고요. 겉으로는 아무 문제가 없었어요. 알림도, 경고도 없었습니다. 그냥 어느 날 “크레딧이 소진되었습니다”가 떴을 뿐입니다.

이게 자동화의 무서운 점입니다. 눈에 보이는 고장은 금방 고치는데, 조용히 돌아가면서 돈만 새는 건 알 수가 없습니다.

나중에 로그를 보니 이런 게 잔뜩 쌓여 있었습니다.

Quota exceeded ... limit: 2000000
Retrying API call in 2.6s (attempt 1/3)
Retrying API call in 5.3s (attempt 2/3)

분당 토큰 한도까지 초과해서 재시도를 반복하고 있었던 겁니다. 그런데 이 로그는 서버 안에만 있으니 제가 볼 일이 없었죠.


추적 과정 (헛다리 포함)

여기서부터가 이 글의 본론입니다. 원인을 어떻게 찾았는지, 그리고 어디서 헛다리를 짚었는지 순서대로 적어보겠습니다.

헛다리 1 — “무한 루프가 도는 거 아냐?”

가장 먼저 의심한 건 스케줄 설정 오류였습니다. 하루 한 번 돌아야 할 작업이 1분마다 도는 걸로 잘못 설정돼 있으면 하루 1440번 실행되니까요. 흔한 실수입니다.

서버에 들어가서 예약 작업 목록을 확인했습니다.

no crontab for root

예약 작업이 아예 없었습니다. 그럼 브리핑은 뭐가 보내는 거지?

이건 나중에 풀렸는데, 그 에이전트가 자기만의 스케줄러를 따로 갖고 있었습니다. 시스템 예약 작업이 아니라 프로그램 내부에서 시간을 재고 있었던 거죠. 그래서 시스템 쪽만 봐서는 안 보였습니다.

교훈: 프로그램이 자체 스케줄러를 갖고 있으면 시스템 쪽 예약 목록엔 안 나옵니다.

헛다리 2 — 사용량 그래프가 텅 비어 있었다

클라우드 콘솔에서 API 사용량 그래프를 봤습니다. 거의 0에 붙어 있었습니다. 일주일 내내 점 몇 개가 전부였어요.

“어? 그럼 API를 안 쓴 건데 돈은 어디서 나갔지?”

여기서 한참 헤맸습니다. 알고 보니 프로젝트를 잘못 고르고 있었습니다. 계정에 프로젝트가 4개나 있었고, 실제 키가 속한 프로젝트는 따로 있었던 거예요.

교훈: 사용량 그래프는 “어느 프로젝트를 보고 있는지” 먼저 확인해야 합니다. 텅 비어 보이면 안 쓴 게 아니라 다른 데를 보고 있는 것일 수 있습니다.

전환점 — 결제 내역을 항목별로 보기

추측을 그만두고 결제 보고서를 열었습니다. 이게 결정적이었어요.

그래프로 “얼마나 호출했나”를 추측하는 것보다, 청구서에서 “뭐에 얼마 청구됐나”를 직접 보는 게 훨씬 빠릅니다.

그룹화 기준과금 항목별로 바꾸니 이렇게 나왔습니다.

항목비용비중
일반 모델 텍스트 (입력)₩29,157
일반 모델 텍스트 (캐시 입력)₩12,949
일반 모델 텍스트 (출력)₩5,577
소계₩47,68399.8%
이미지 생성₩170.04%
경량 모델 (브리핑용)₩50.01%

헛다리 3 — “이미지 생성 때문인가?”

항목 목록에 이미지가 있는 걸 보고 “이거다!” 싶었습니다. 그 주에 이미지를 몇 장 만든 기억이 있었거든요. 이미지 생성은 텍스트보다 훨씬 비싸니까 말이 됐습니다.

그런데 금액을 확인하니 ₩17이었습니다. 전체의 0.04%. 완전히 헛다리였어요.

교훈: 항목이 있다는 것과 그게 비용을 먹었다는 건 다릅니다. 이름만 보고 지목하지 말고 금액을 봐야 합니다.

그리고 진짜 단서 — 토큰 수

범인은 일반 텍스트 모델이 확실해졌습니다. 그런데 이상했습니다.

입력 토큰      1,266만개
캐시 입력      5,624만개
출력 토큰         40만개

일주일에 입력 6,900만 토큰. 그런데 출력은 40만 토큰뿐입니다.

입력이 출력의 170배.

이 비율이 결정적이었습니다. 정상적인 대화라면 이렇게 안 나옵니다. 이건 “긴 내용을 계속 다시 보내면서 짧은 답을 받는” 패턴이에요.

그리고 캐시 입력이 5,624만으로 압도적인데, 캐시는 같은 앞부분을 반복해서 보낼 때 생깁니다. 즉 뭔가 똑같은 걸 계속 재전송하고 있다는 뜻이었죠.


진범

서버 로그를 뒤졌더니 이게 나왔습니다.

Context: 472 msgs, ~150,859 tokens

대화 하나에 메시지가 472개 쌓여서, API 호출 한 번에 150,859 토큰을 보내고 있었습니다.

그리고 바로 옆에 새로 시작한 대화의 숫자가 같이 찍혀 있었어요.

메시지 수요청당 토큰
새로 시작한 대화2개1,616
그동안 쌓인 대화472개150,859

93배 차이입니다. 똑같이 “안녕” 한 마디를 보내도 93배 비싼 값을 치르고 있었던 거예요.

원인은 설정 파일의 이 부분이었습니다.

세션 초기화:
  방식: 안 함          ← 여기
  유휴 기준: 24시간
  매일 초기화: 새벽 4시

유휴 시간 기준과 매일 초기화 시각은 멀쩡히 설정돼 있는데, “방식: 안 함” 때문에 둘 다 작동하지 않고 있었습니다. 그래서 봇을 처음 켠 날부터 6일치 대화가 통째로 쌓여 있었고, 메시지를 보낼 때마다 그 전부가 다시 전송됐습니다.

왜 매번 다시 보내나

AI는 이전 대화를 기억하지 못합니다. “기억하는 것처럼 보이는 건, 매번 지금까지의 대화를 통째로 다시 들려주기 때문” 이에요.

그래서 대화가 길어질수록 한 번 보낼 때마다 비싸집니다. 20번째 메시지는 1번째보다 20배 비싸고, 472번째는 말할 것도 없죠.

이게 대화형 AI 비용의 핵심 구조인데, 저는 이걸 모르고 있었습니다.

여기에 두 가지가 겹쳤습니다.

  • 에이전트는 한 메시지에 여러 번 호출합니다. 도구를 쓰고 결과를 보고 다시 생각하는 걸 반복하는데, 제 설정은 최대 20번이었습니다. 즉 “안녕” 한 마디에 15만 토큰 × 최대 20번.
  • 실패하면 재시도합니다. 한도를 넘겨 실패해도 3번까지 다시 시도했고, 재시도도 당연히 과금됩니다.

고친 것

설정 세 줄과 명령어 하나였습니다.

항목이유
기본 모델일반 모델경량 모델단가가 몇 배 쌈. 개인 비서 대화엔 충분
세션 초기화안 함4시간 유휴 + 매일 새벽 4시에 자동 리셋
유휴 기준24시간4시간24시간은 사실상 안 걸림
메시지당 최대 호출20회10회일상 대화엔 10회면 충분

그리고 이미 쌓여 있던 대화를 텔레그램에서 새 대화 명령으로 강제 초기화했습니다. 설정을 바꿔도 기존 대화는 그대로 살아있었거든요.

결과:

전:  472개 메시지 / 약 150,859 토큰
후:    2개 메시지 / 약   5,175 토큰

요청당 토큰이 29분의 1로 떨어졌습니다. 여기에 모델도 더 싼 걸로 바꿨으니 효과가 곱해집니다.

세션 초기화 = 기억상실이 아닙니다

“매일 대화를 지우면 봇이 나를 잊는 거 아냐?”라고 걱정했는데, 아니었습니다.

그 에이전트는 대화 원문기억을 따로 관리하고 있었어요.

무엇리셋하면
세션주고받은 대화 원문 전체지워짐
메모리중요한 사실만 추려서 저장그대로 남음

즉 “내가 누구고 뭘 좋아하는지”는 계속 기억합니다. 지워지는 건 “어젯밤에 나눈 잡담 원문” 같은 거고, 그건 매번 다시 보낼 필요가 없는 것이죠.


교훈

1. 조용히 도는 것에 알림을 걸어라

가장 큰 실수는 예산 알림을 안 걸어둔 것이었습니다. 걸어뒀으면 첫날 ₩11,000이 나갔을 때 바로 알았을 텐데, 일주일 뒤 다 떨어지고 나서야 알았습니다.

클라우드 서비스는 대부분 예산 알림 기능이 있습니다. 월 한도를 정하고 50%·90%에서 메일이 오게 해두세요. 5분이면 됩니다.

2. 추측하지 말고 청구서를 봐라

저는 “루프가 도나?” “이미지 때문인가?” 하며 한참을 추측했습니다. 그런데 결제 내역을 항목별로 열어보니 5분 만에 답이 나왔습니다.

사용량 그래프는 해석이 필요하지만, 청구서는 “뭐에 얼마”가 그냥 적혀 있습니다. 비용 문제는 청구서부터 보는 게 맞습니다.

3. 그럴듯한 가설일수록 숫자로 확인해라

“이미지 생성은 비싸다”는 맞는 말입니다. 목록에 이미지 항목도 있었고요. 그럴듯했습니다.

그런데 ₩17이었습니다.

가설이 그럴듯할수록 확인 없이 믿게 됩니다. 저는 이걸 두 번 했습니다 — 이미지도 그랬고, “스킬이 많아서 비싼가?”도 확인해보니 아니었어요.

4. 대화형 AI는 “대화가 길어질수록 비싸진다”

이 구조를 몰랐던 게 근본 원인이었습니다. AI는 매번 전체 대화를 다시 받습니다. 그래서 긴 대화 하나를 계속 이어가는 것보다, 주제가 바뀌면 새 대화를 시작하는 게 훨씬 쌉니다.

이건 서버에 띄운 봇뿐 아니라 웹 채팅창에서도 똑같이 적용됩니다. 유료 API를 쓰신다면 긴 대화를 습관적으로 끊는 것만으로 비용이 크게 줄어요.

5. 에이전트는 채팅보다 훨씬 비싸다

일반 채팅은 한 번 물으면 한 번 답합니다. 그런데 에이전트는 도구를 쓰고 결과를 보고 다시 생각하는 걸 반복해요. 제 경우 한 메시지에 최대 20번까지 호출할 수 있게 돼 있었습니다.

에이전트를 쓸 거라면 최대 반복 횟수를 반드시 확인하세요. 기본값이 관대하게 잡혀 있는 경우가 많습니다.

6. 실패도 과금된다

한도를 초과해 실패한 호출도, 그 뒤의 재시도도 전부 돈이 나갑니다. 에러가 난다고 공짜가 아닙니다.


지금 확인해볼 것

혹시 AI API를 유료로 쓰고 계시다면, 오늘 이것만 해보셔도 좋겠습니다.

  • 예산 알림이 걸려 있나? — 없으면 지금 5분 투자
  • 결제 내역을 항목별로 본 적 있나? — 뭐가 돈을 먹는지 알고 계신가요
  • 긴 대화를 계속 이어가고 있진 않나? — 주제가 바뀌면 새로 시작
  • 에이전트의 최대 반복 횟수는? — 기본값 확인
  • API 키가 코드에 그대로 적혀 있진 않나? — 별도 설정으로 분리

마무리

기술적으로 어려운 문제는 아니었습니다. 설정 한 줄이었고, 알고 나면 5분이면 고칩니다.

어려웠던 건 “어디를 봐야 하는지 모르는 상태에서 시작하는 것” 이었어요. 서버, 스케줄러, 사용량 그래프, 청구서, 로그 — 볼 곳은 많은데 어디에 답이 있는지 몰랐습니다. 헛다리도 세 번 짚었고요.

돌아보면 순서가 있었습니다.

청구서(항목별)  →  뭐가 돈을 먹었나

로그(토큰 수)   →  왜 그렇게 많이 썼나

설정            →  어디를 고치나

추측은 맨 마지막에 해도 됩니다. 데이터가 먼저입니다.

그리고 5만원은 아까웠지만, 덕분에 대화형 AI의 비용 구조를 제대로 이해하게 됐습니다. 앞으로 훨씬 더 아낄 테니 수업료라고 생각하려고요.