Archive
월 18만원짜리 세컨드브레인을 공짜로 돌리기 (feat. Aside)
세컨드 브레인을 웹에 공개해 두었다가 월 18만 2천원짜리 청구서를 받았습니다. 오라클 무료 서버로 옮겨 0원으로 만들기까지, 그 과정의 대부분을 AI 에이전트에게 맡긴 기록입니다.
Details
Tags
1. 18만 2천원짜리 청구서
7월 초에 구글 클라우드 6월 청구서를 받았습니다. 182,000원이었습니다.
개인 프로젝트 하나 돌리는 데 나가는 돈치고는 적지 않았습니다. 그런데 더 민망했던 건 사용량이었습니다. 확인해 보니 최근 7일 동안 실제 요청은 154건이었습니다. 일주일에 154번 답하려고 서버를 24시간 켜 두고 18만 원을 낸 셈입니다.
미리 말씀드리면 저는 개발자가 아닙니다. 이 시스템도 제가 만든 것이 아니라 대부분 클로드에게 맡겨서 만든 것입니다. 그러다 보니 어떤 설정이 얼마짜리인지 감이 없었고, 청구서를 제때 들여다보지도 않았습니다. 18만 2천원은 기술적인 사고가 아니라 제가 비용 모니터링을 소홀히 한 대가였습니다.
이 글은 그 18만 원짜리를 어떻게 사실상 0원으로 내렸는지에 대한 기록입니다. 그리고 그 과정의 대부분을 제가 아니라 AI 에이전트가 했다는 이야기이기도 합니다.
2. 애초에 왜 서버를 켜 두었나
먼저 배경을 짧게 말씀드리겠습니다.
저는 옵시디언에 세컨드 브레인을 만들어 쓰고 있습니다. 읽은 글, 회의에서 얻은 판단, 개인적인 생각 같은 것들을 잘게 쪼개서 저장하고, 그것들이 서로 어떻게 연결되는지 그래프로 묶어 둔 개인 지식 시스템입니다.
혼자 보기 아깝다는 생각이 들었습니다. 그래서 클로드와 한참 작업한 끝에, 공개해도 되는 부분만 골라서 웹에서 볼 수 있게 만들었습니다. 3D로 떠 있는 그래프를 돌려 볼 수 있고, 질문을 던지면 제 생각들 중에서 근거를 찾아 답을 만들어 줍니다. 지금 제 사이트의 생각의 지도 페이지가 그것입니다.
문제는 이걸 어디에 올려 두느냐였습니다.
이 서비스에는 임베딩 모델이 하나 들어갑니다. 문장을 숫자 덩어리로 바꿔서 뜻이 비슷한 것끼리 찾아 주는 모델인데, 크기가 2.2GB쯤 됩니다. 그리고 이 모델은 제 서버 안에서 직접 돌아갑니다. 비공개 메모까지 검색하려면 그 내용이 외부 API로 나가면 안 되기 때문입니다.
그래서 서버가 켜질 때마다 이 2.2GB를 메모리에 올리는 시간이 필요합니다. 대략 1분입니다.
당시 사용한 것은 구글 클라우드의 Cloud Run이라는 서비스였습니다. 평소에는 꺼져 있다가 요청이 오면 켜지는 방식이라 저렴한데, 켜질 때마다 그 1분이 발생합니다. 방문자가 검색 버튼을 누르고 1분을 기다려야 한다는 뜻입니다.
그래서 상시 가동으로 방향이 잡혔습니다. 최소 인스턴스를 1개로 고정해서 아예 꺼지지 않게 한 것입니다.
여기서 인스턴스는 인터넷 어딘가에 있는 컴퓨터 한 대라고 보시면 됩니다. 서버 컴퓨터를 통째로 사는 것이 아니라 필요한 만큼 빌려 쓰는 것이고, 빌린 그 한 대를 인스턴스라고 부릅니다.
가게로 치면 손님이 언제 올지 모르니 24시간 불을 켜 두기로 한 것입니다. 당시 작업 기록에는 이 결정이 이렇게 남아 있습니다.
비용 자세: 항상 켜둔 채 유지(즉시 응답·상시 과금).
저는 이 문장의 뒷부분을 제대로 읽지 않았습니다. "즉시 응답"만 보고 좋다고 넘어갔지, "상시 과금"이 한 달에 얼마인지는 계산해 보지 않았습니다. 한 달 뒤에 18만 2천원짜리 청구서를 받았고, 손님은 일주일에 154명이었습니다.
3. 급한 불은 껐는데, 이번엔 1분을 기다려야 했습니다
급한 대로 설정을 되돌렸습니다. 요청이 없으면 서버가 아예 꺼지는 방식으로 바꾼 것입니다. 요금은 월 1만 원 아래로 떨어졌고, 최근에는 수백 원 수준까지 내려갔습니다.
그런데 이번엔 아까 그 1분이 돌아왔습니다.
8월 말에 Aside가 실제로 재 본 값은 이랬습니다. 이틀 정도 아무도 들어오지 않은 상태에서 사이트를 열었을 때의 기록입니다.
| 항목 | 실측 |
|---|---|
| 그래프가 화면에 뜨기까지 | 4.3초 |
| 검색이 가능해질 때까지 | 60.6초 |
| 워밍업 끝난 뒤 답변 완료 | 약 12초 |
그래프는 그럭저럭 뜹니다. 문제는 검색입니다. 방문자가 궁금해서 질문을 입력하고 검색을 누르면, 1분 동안 "모델 로딩 중입니다"라는 오류만 봅니다. 그리고 대부분은 그 1분을 기다려 주지 않습니다.
거기에 무료 한도 안에서 감당 가능한 검색 횟수를 계산해 보니 한 달에 115번 정도였습니다. 사실상 개점휴업에 가까운 상태였습니다.
돈을 아끼려다 서비스를 못 쓰게 만든 셈이라, 이건 이거대로 마음이 불편했습니다.
4. 평생 무료 서버를 찾아서 (38시간)
그러던 중에 오라클 클라우드가 평생 무료 서버를 준다는 것을 알게 됐습니다.
정식 명칭은 Always Free인데, 조건이 꽤 좋습니다. CPU 2개에 메모리 12GB짜리 컴퓨터를 24시간 켜 둬도 요금이 0원입니다. 체험판처럼 몇 달 뒤에 끊기는 것도 아니고, 계속 무료입니다.
제 경우엔 이게 정확히 맞는 그림이었습니다. 켜 두기만 하면 아까 그 2.2GB 모델을 부팅할 때 딱 한 번만 올리면 되니, 방문자는 기다릴 일이 없어집니다.
마침 이 무렵에 Aside를 알게 됐습니다. 제 브라우저를 직접 조작하고, 제 컴퓨터에서 명령도 실행하고, 필요하면 원격 서버에 접속까지 하는 AI 에이전트입니다. 채팅으로 답만 주는 것이 아니라 실제로 클릭하고 입력하고 파일을 옮깁니다.
그래서 시켜 봤습니다. "오라클에서 무료 서버 하나 잡아 줘."
결론부터 말하면 실패했습니다.
무료 티어는 인기가 많아서 자리가 잘 나지 않습니다. 한국 리전인 서울과 춘천은 신규 가입자에게 아예 열려 있지도 않았습니다. 그래서 일본 도쿄로 목표를 바꿨는데, 여기도 계속 Out of host capacity, 그러니까 "빈 서버 없음"만 돌아왔습니다.
Aside는 10분마다 다시 시도하는 루틴을 걸어 두고 계속 두드렸습니다. 그렇게 38시간이 지났습니다. 10분 간격이니까 228번쯤 문을 두드린 셈입니다.
그런데도 자리는 나지 않았습니다.
솔직히 이 지점에서 한 번 접을까 생각했습니다. 공짜라는 게 원래 이런 거지 싶기도 했습니다.
5. "무료 티어 말고 다른 길이 있습니다"
포기하려던 참에 Aside가 다른 경로를 제안했습니다. PAYG 플랜으로 바꾸면 서버를 훨씬 빨리 받을 수 있다는 것이었습니다.
PAYG(Pay As You Go) 는 "쓴 만큼 내는" 종량제 요금제입니다. 휴대폰으로 치면 약정 없이 쓴 만큼만 청구되는 요금제와 비슷합니다. 결제 카드를 등록해야 하지만, 등록했다고 자동으로 돈이 나가는 것은 아닙니다.
핵심은 이것입니다. PAYG로 바꿔도 무료 한도는 그대로 유지됩니다. 오라클은 유료 계정으로 전환해도 Always Free 자원을 계속 무료로 줍니다. 다만 유료 고객이 되니 서버 자리를 배정받을 때 우선순위가 올라갑니다.
즉 카드를 걸어 두되 무료 한도 안에서만 쓰면, 사실상 공짜로 쓰면서 자리는 빨리 받는 방법이었습니다.
물론 카드를 등록한다는 것은 마음이 걸리는 일입니다. 실수로 사양을 크게 잡거나 서버를 하나 더 만들면 그대로 청구되기 때문입니다. 한 번 데인 뒤라 더 그랬습니다.
그래서 이 서버를 어디에 쓸지 다시 따져 봤습니다. 그러다 7월에 내려 둔 세컨드 브레인이 떠올랐습니다. 상시 가동이 필요한데 돈 때문에 못 하고 있던 바로 그것이었습니다. Aside와 함께 계산해 보니 제 사이트 방문자 규모에서는 오라클 무료 한도를 넘길 일이 거의 없었습니다.
그래서 결정했습니다. 카드 등록은 제가 직접 했고, 나머지는 전부 Aside에게 맡겼습니다.
인스턴스는 1시간 안쪽에 잡혔습니다. 38시간을 기다려도 안 되던 것이 말입니다.
6. 카드는 제가 등록하고, 나머지는 Aside가 했습니다
카드를 걸어 둔 이상 저는 "혹시 모를 요금"이 계속 신경 쓰였습니다. 그래서 요금이 나갈 가능성 자체를 없애 달라고 했더니, Aside가 두 겹으로 막았습니다.
첫째, 쿼터 하드캡을 걸었습니다. 쿼터는 "이 계정은 여기까지만 만들 수 있다"는 상한선입니다. CPU는 2개, 저장 공간은 200GB로 못 박아 두었습니다. 알림을 받고 나서 끄는 방식이 아니라, 애초에 그 이상은 만들어지지 않게 하는 방식입니다.
여기서 마음에 들었던 것은 설정만 하고 끝내지 않았다는 점입니다. Aside는 일부러 CPU 4개짜리 서버를 만들어 보고 QuotaExceeded 오류로 차단되는 것을 확인한 뒤에 완료 보고를 했습니다. 문서에는 이렇게 적혀 있습니다.
실수로 인스턴스를 하나 더 만드는 사고가 구조적으로 불가능합니다.
둘째, 예산 알림을 3단계로 걸었습니다. 월 예산 1달러 기준으로 10%, 50%, 100% 시점에 메일이 오게 해 두었습니다. 1000원 근처만 가도 바로 알 수 있습니다.
그다음은 서버 준비였습니다. 비개발자분들께는 낯선 영역일 텐데, 요약하면 "빈 컴퓨터 한 대를 받아서 프로그램이 돌아갈 수 있는 상태로 만드는 일"입니다. 운영체제 업데이트, 프로그램을 담아 실행하는 도구 설치, 방화벽에서 웹 통로 열기 같은 것들입니다. 이 단계도 제가 손댄 것은 없습니다.
7. 이전 작업은 43분 만에 끝났습니다
서버가 준비된 다음 날, 저는 Aside에게 이 한 줄만 던졌습니다.
옵시디언 볼트 내 system > deploy 에 생각의 지도 오라클 작업 지시서가 있어. 확인하고 작업을 진행해줘.
그리고 43분 뒤에 끝났습니다. 그사이 Aside가 도구를 사용한 횟수는 120번쯤이었습니다.
한 일을 순서대로 적으면 이렇습니다.
- 공개용 데이터 추출. 제 메모 전체에서 공개 표시가 된 것만 골라냈습니다. 노드 897개, 연결 1,187개였습니다. 비공개가 하나라도 섞이면 작업이 실패하도록 검사기가 들어 있습니다.
- 서버로 전송.
- API 키 주입. 답변 생성에 쓰는 OpenAI 키를 서버에 넣고, 실제로 유효한지 먼저 확인했습니다.
- 프로그램 빌드. 2.2GB 모델 내려받는 것까지 포함해서 5분 24초가 걸렸습니다.
- 도메인 연결. Cloudflare에서
brain.wonkyunglee.kr주소를 새 서버로 연결하고, 보안 인증서(자물쇠 아이콘)를 발급받았습니다. - 블로그 전환. 제 사이트가 바라보는 주소를 새 서버로 바꿔서 배포했습니다.
결과는 이렇습니다.
| 항목 | 이전 (구글 클라우드) | 이후 (오라클) |
|---|---|---|
| 검색 가능해질 때까지 | 60.6초 | 0초 |
| 첫 응답이 오기까지 | 해당 없음 | 0.12초 |
| 답변 완료 | 약 12초 | 10.4초 |
| 월 비용 | 약 350원 (상시 가동 시 18만원) | 0원 |
| 검색 횟수 상한 | 무료 한도 월 약 115회 | 없음 |
정직하게 손해 본 것도 있습니다. 서버가 서울이 아니라 도쿄에 있어서 네트워크 지연이 8ms에서 38ms로 늘었습니다. 다만 답변 자체가 10초쯤 걸리는 서비스라 30ms 차이는 체감되지 않습니다.
8. 시키지 않았는데 한 일
숫자보다 더 인상적이었던 것은 이 대목입니다. 제가 요청한 것은 "지시서 보고 작업해 줘" 한 줄이었는데, Aside는 그 바깥의 일을 여러 번 했습니다. 우선 지시서를 그대로 믿지 않았습니다.
"스크립트는 다른 컴퓨터에서 받아 오라"고 적힌 파일은 이미 제 볼트 안에 있었고, "접속 확인 완료"라고 적힌 항목은 실제로 찔러 보니 거부되고 있었습니다. 지시서의 마지막 단계가 아예 틀렸다는 것도 찾아냈는데, 블로그 설정값 하나를 바꾸라고 되어 있었지만 배포 과정이 그 값을 읽지 않는 구조여서 그대로 따랐다면 배포는 성공했다고 나오는데 화면은 그대로인 실패가 났을 것입니다. 게다가 그 대안까지 검토한 다음 부작용이 있다는 이유로 다른 방법을 택했습니다.
서버 준비 단계에서도 저장 공간 옵션 때문에 서버가 만들어지자마자 종료되는 문제와, 방화벽 허용 규칙을 차단 규칙 뒤에 넣으면 아무 효과가 없는 문제를 스스로 풀고 둘 다 "함정"이라는 이름으로 문서에 적어 두어서, 하루 뒤 이전 작업 때 같은 자리에 빠지지 않았습니다.
묻지도 않은 보안 점검까지 해서 전송 스크립트가 폴더를 통째로 복사하는 바람에 비공개 메모 9건과 사내용 66건이 서버에 올라가 있다는 것을 찾아냈고, 지우자고 하니 전수 조사를 다시 해서 21개 파일을 정리한 다음 스크립트까지 고쳤습니다. 그러면서도 제가 커밋하지 않고 남겨 둔 작업물은 건드리지 않고 백업해 둔 채 "이건 사용자 영역이라 판단하지 않았습니다"라고 보고했습니다.
자동화가 무서운 이유는 대체로 능력이 부족해서가 아니라 건드리면 안 되는 것을 건드려서인데, 꽤 잘 해주었습니다.
9. 한계도 있었습니다
만능은 아니었습니다.
서버 접속에 필요한 열쇠 파일을 제가 다운로드 폴더에 받아 두었는데, macOS의 보안 정책 때문에 Aside가 그 폴더를 읽지 못했습니다. 결국 "직접 옮겨 주셔야 합니다"라는 답을 받고 제가 손으로 옮겼습니다.
또 카드 등록처럼 본인 확인이 필요한 일은 당연히 제 몫이었습니다. 도메인을 실제로 연결할지, 블로그를 진짜로 전환할지 같은 되돌리기 어려운 순간에는 매번 저에게 먼저 물어봤습니다.
돌아보면 이 구분이 꽤 적절했던 것 같습니다. 제가 한 일은 결정과 카드 등록이었고, Aside가 한 일은 그 결정을 실행하고 검증하는 것이었습니다.
10. 이번 프로젝트를 통해 얻은 것
- 세컨드브레인 상시가동 서버운영비가 월 18만원에서 0원이 됐습니다.
- 오라클 무료 티어 서버는 사실상 없습니다. 하지만 결제카드를 등록해놓고 한도만 잘 설정하면 쉽게 얻을 수 있습니다.
- Aside를 안 써본 분이 있다면 강력히 추천합니다. (협찬 아님)
지금 생각의 지도에 들어가시면 그래프가 바로 뜨고, 질문을 던지면 기다리지 않고 답이 나옵니다. 요금은 0원입니다.