오늘수영에 제보 API와 아침 요약 푸시가 생기면서 서버가 필요해졌습니다. 목표는 월 0원. 결론부터 말하면 달성했지만, "무료"의 가격을 시간으로 치른 기록입니다.
1. 2026년 7월, 무료 서버의 현실
개인 프로젝트용 초저가 서버를 공식 가격 페이지 기준으로 재조사했습니다. 예전 상식이 꽤 깨져 있었습니다.
Oracle Always Free: 무료 ARM이 4코어/24GB → 2코어/12GB로 조용히 축소(2026.06). 그래도 여전히 압도적인 무료 사양Hetzner: 2026.06 인상으로 "무조건 최저가" 공식 깨짐. 아시아 리전은 €15부터Render 무료: 웹서버는 15분 무트래픽 시 슬립(콜드스타트 약 1분), 무료 Postgres는 생성 30일 후 만료Fly.io: 무료 플러젬 사실상 폐지(신규는 종량제만) / Railway: 월 $1 크레딧 — 상시 구동 불가 현실적 차선: Vultr 서울 $3.5~5/월결론: 진짜 무료로 상시 서버 + DB를 직접 운영하려면 사실상 Oracle 외길이 없습니다. 그리고 그래서 다들 몰립니다.
2. 문제 1: Out of host capacity
문제: 홈 리전(오사카)에서 인스턴스 생성 시도 심지어 1코어까지 전부 Out of host capacity. 무료 ARM 경쟁이 그만큼 치열합니다.해결(시도): 사람이 새벽에 일어나 새로고침할 일이 아니라 자동화할 일. OCI CLI로 네트워크(VCN·서브넷·방화벽)를 미리 만들어두고, 2코어/12GB와 1코어/6GB를 교차로 생성 시도하는 재시도 스크립트를 걸었습니다(성공 시 macOS 알림 + 중복 생성 방지).삽질 기록: 오류 분류를 "아는 오류만 재시도"로 짜서 일시적 네트워크 오류(RequestException)를 치명적 오류로 오판 → 스크립트가 밤사이 죽어 있었습니다. 무인 루프는 반대로 짜야 합니다: 확실히 치명적인 것(인증 실패 등)만 멈추고 나머지는 전부 재시도. 또 생성 API를 10분 간격으로 두드려도 429(Too many requests)가 떨 수 있어 간격에 지터를 주며 늘렸습니다.3. 문제 2: PAYG 전환이라는 선택
문제: 무료 계정은 용량 배정 우선순위가 가장 낮습니다. 기다려도 마냥 안 풀릴 수 있음.판단: 카드를 등록하고 종량제(Pay As You Go)로 전환했습니다. 핵심 사실 두 가지: ① 무료 계정으로 되돌리는 건 불가능 ② 하지만 Always Free 한도 내 리소스는 PAYG에서도 계속 무료입니다. 계정이 유료가 되는 것과 돈이 나가는 건 별개. 2코어/12GB 1대 = 월 1,488 OCPU시간으로 축소된 무료 한도(1,500시간) 안에 들어갑니다.주의: 전환 직후에는 계정 속성 반영이 느려서(리전 추가 한도 409 등) 바로 효과를 기대하면 안 됩니다.4. 문제 3: 이제 실수하면 진짜 과금된다
문제: 무료 계정은 실수해도 안 만들어질 뿐이지만, PAYG는 만들어지고 청구됩니다.오해 바로잡기: 예산(Budget)은 차단이 아니라 알림만 옵니다. 상한 차단 기능 자체가 없습니다.해결: 실제 차단은 쿼터 정책(Quota Policy) 으로. 화이트리스트 방식이 깔끔합니다:zero compute-core quotas in tenancy
set compute-core quota standard-a1-core-count to 2 in tenancy
set compute-core quota standard-a1-core-regional-count to 2 in tenancy
(memory·DB·LB·파일스토리지도 같은 패턴으로 zero / 필요한 것만 set)
삽질 기록: A1 생성은 일반 쿼터 외에 regional 쿼터도 함께 검사합니다. 이걸 화이트리스트에 빼먹어서 내 무료 인스턴스 생성까지 내 손으로 막았었는데, 되레이 덕분에 "차단이 진짜 동작한다"는 검증이 공짜로 됐습니다. 예산 알림($1의 50% 초과 시 메일)은 마지막 안전망으로 유지.5. 결과
서버: Oracle 오사카 A1 2코어/12GB (월 0원, PAYG 계정)구성: Docker Compose 3컨테이너 — Caddy(HTTPS 자동 발급) + NestJS API + PostgreSQL 16도메인: 가입 없는 sslip.io로 우선 연결 (IP 기반 무료 DNS — Caddy가 인증서도 문제없이 발급) 과금 방어 3중: 생성 스크립트는 무료 사양만 요청 + 쿼터 잠금 + 예산 알림서버 위에서 제보 API와 매일 오전 8시 아침 요약 Web Push가 돌아갑니다