자기개발

내 컴퓨터가 서버라니요, 5분마다 죽는 클라우드서버와 씨름

swizard 2026. 7. 28. 09:08

봇은 내 컴퓨터에서 돌고 있었다.

 

cmd창을 하나 띄워놓고 파이썬을 돌리고, 그걸 켜둬야 봇이 살아 있었다.

 

컴퓨터를 끄면 봇이 죽는다.

창을 실수로 닫아도 죽는다.

텔레그램으로 뭘 물어보면 답이 없다.

그러다 프로그램을 켜면 그제야 밀린 답이 우르르 온다.

비서를 만들었는데 비서가 내 책상 서랍 안에서만 사는 셈이었다.

 

 

클로드한테 물어보니 컴퓨터로 돌리는게 싸서 그렇게 했다고 했다. (가성비를 생각하라고 지침을 저장해두긴 했는데, 그걸 이렇게 해석해줄 줄은 몰랐다.) 그제서야 Fly.io라는 클라우드 서비스를 추천해 준다. 도쿄에 서버가 있어서 한국에서 빠르고, 작은 프로그램 하나 돌리는 데 한 달 3천 원대면 된다고 해서였다.

여기서부터가 진짜 삽질이 시작되는 구간이 되었다.

아래는 지금도 이해하지 못한 클로드가 정리해준 내용이다.

함정 1. 설정 파일이 통째로 바뀌어 있었다

배포 명령을 돌렸더니 안 됐다. 로그를 걷어다가 클로드한테 다시 줬다.

먼저 만들어둔 설정 파일이 다른 내용으로 덮여 있었 다고 한다.

이런 줄이 들어가 있었다.

auto_stop_machines = 'stop'
min_machines_running = 0

번역하면 "접속하는 사람이 없으면 서버를 꺼라, 최소 0대까지 꺼도 된다"다.

이 도구는 사람들이 웹사이트를 만든다고 가정한다. 웹사이트는 방문자가 없으면 꺼두는 게 이득이니까.

근데 내가 만든 건 웹사이트가 아니다. 텔레그램만 쳐다보는 프로그램이라 웹 접속이 영원히 안 들어온다.

그대로 뒀으면 서버가 켜지자마자 "아무도 안 쓰네" 하고 꺼졌을 거다.

그 줄을 지워야 한다고 해서 승인했다.

함정 2. 열쇠를 안 주고 문을 열라고 했다

배포하고 로그를 봤더니 이 문장이 열 번 반복돼 있었다.

TELEGRAM_BOT_TOKEN이 없습니다

API 키가 든 파일은 보안상 서버로 안 올라가게 막아둔 상태였다. 잘 막아둔 거다. 대신 키는 별도 명령으로 서버 금고에 넣어야 하는데, 그 단계를 건너뛰고 배포부터 해버렸다. 봇은 켜지자마자 "키가 없는데요" 하고 종료됐다. 서버는 "죽었네, 다시 켜자" 했다. 이 짓을 열 번 반복하고 포기했다.

로그 마지막 줄이 이랬다.

machine has reached its max restart count of 10

고장이 아니라 정상적인 안전장치였다. 무한 재시작으로 요금이 새는 걸 막는 장치라고 클로드가 설명해줬다.

확인해보니, 클로드는 1 2 3 순서대로 하라고 나한테 알려 줬는데, 내가 2를 못보고 1다음 3(배포)을 실행했던 것이다.

클로드야, 컴맹이랑 일하기 힘들지? 수고해라~

함정 3. 남은 서버가 예비용이었다

텔레그램은 봇 하나에 프로그램 하나만 접속을 허용한다. 둘이 붙으면 서로 메시지를 뺏어가며 둘 다 망가진다고 한다. 그런데 서버가 2대 떠 있었다. 1대로 줄이라고 해서 시키는 대로 했더니 상태가 이렇게 나왔다.

STATE │ stopped
† Standby machine

 

로그를 분석시켰더니 하필 예비 서버만 남고 본서버가 지워졌다. 예비는 평소엔 꺼져 있다가 본체가 고장 나야 켜지는 놈이다. 일하던 쪽이 지워지고 대기조만 남은 거다. 봇은 아무 데서도 안 돌고 있었다. 예비를 지우고, 예비를 아예 안 만드는 옵션을 붙여서 다시 배포했다.

니가 시킨대로 했다 이번엔? 제대로 안하냐?

 

함정 4. 정확히 5분 뒤에 죽었다

드디어 봇이 살아났다.

로그에 gpt, claude, gemini 다 정상이라고 뜨고, 밀렸던 텔레그램 답이 한꺼번에 왔다. 성공이라고 생각했다.

몇 분 뒤 또 답이 없었다. 로그를 다시 클로드한테 던져줬다. 시작 시각이 15시 19분 27초, 종료 시각이 15시 24분 27초. 정확히 5분 0초였다.

Trial machine stopping.
To run for longer than 5m0s, add a credit card

무료 체험 계정은 서버를 5분만 돌려준다. 총 2시간을 주는데 그걸 5분씩 쪼개서 쓰는 방식이었다. 코드도 설정도 다 고쳤는데, 애초에 24시간 돌 수 없는 계정이었던 거다. 이걸 알아내는 데 가장 오래 걸렸다. 앞의 함정들은 에러 메시지가 뭐라도 알려줬는데, 이건 봇이 멀쩡히 돌다가 그냥 조용히 꺼졌으니까. 아 제가 실수했군요 결제는 하셨나요? 가 돌아오는데 질문과 캡쳐 교환을 열 번 이상 한 것 같다. ㅎ...

크레딧 2만 5천 원어치를 사니 바로 풀렸다.

함정 5. 로그가 과거를 보여주고 있었다

중간에 여러 번 헷갈렸다.

다 고쳤는데 로그에 아까 그 에러가 또 보였다.

로그 명령은 최근 몇 시간 치를 처음부터 쭉 훑어준 다음 실시간으로 넘어간다.

화면에 보이는 게 지금 일어나는 일이 아닐 수 있다는 걸 그제야 알았다. 시간 표시를 먼저 보는 습관을 들이라고하지만 모른다! 그다음부터 클로드가 마지막 15줄만 주세요라고 말을 바꾼다. 쟤가 나한테 맞추는걸로 해결됐다.

남은 것

지금은 잘 돌아간다. 컴퓨터를 꺼도, 밖에 나가도, 자는 동안에도 도쿄 어딘가에서 봇이 텔레그램을 쳐다보고 있다.

핸드폰으로 보낸 메시지에 바로 답이 온다. 서버비는 한 달 3,200원 정도로 나온다 한다. 25달러짜리 사둔 크레딧으로 7개월은 버틴다는 계산이란다. 정작 돈이 나가는 쪽은 서버가 아니라 AI 사용료다. 질문 하나에 세 회사를 부르니까. 서버비는 반올림 오차 수준이다. 3일 쓴 사용량이 구글 600원대, GPT API 0.14달러, 클로드 0.9달러 정도로 잡힌다.

 

배운 것

에러 메시지는 대체로 정직하다. "키가 없습니다"는 정말 키가 없다는 뜻이었다. 겁먹고 넘겨짚는 대신 한 줄씩 읽었으면 훨씬 빨랐을 거다.

멀쩡히 돌다가 조용히 죽는 게 제일 무섭다. 에러가 나면 원인이라도 알려주는데, 5분 제한 같은 건 아무 소리 없이 그냥 꺼진다. 상태 확인하는 명령 하나 알아두는 게 로그 백 줄보다 낫다.

자동화 도구는 다수의 경우를 가정한다. 배포 도구가 넣어준 설정은 웹사이트용이었다. 내 경우가 다수에 속하지 않으면 기본값을 의심해야 한다.

코딩을 몰라도 된다. 다만 읽을 줄은 알아야 한다. 코드는 AI가 써줬다. 로그를 읽고 어디서 틀어졌는지 판단하고 방향을 정하는 건 결국 내 몫이었다. 그걸 못해서 핑퐁이 많았다.

앞으로도 배울 게 많지만, 재밌는 장난감이 하나 생겼다.

반응형