Oracle Cloud Always Free ARM 24GB로 프로덕션 API 서빙하기
4 OCPU, 24GB RAM, 200GB 디스크를 영구 무료로 받아 pgvector PostgreSQL 17 + Rust Axum API + Ollama를 Cloudflare Tunnel로 서빙한 기록.
저는 내혜택 서비스의 정책 API를 Oracle Cloud Always Free ARM 인스턴스에서 돌리고 있습니다. 스펙은 4 OCPU, 24GB RAM, 200GB 블록 스토리지. 월 0원에 이 정도 자원을 받는 건 솔직히 반칙 같다는 생각이 들 정도입니다.
왜 Oracle ARM인가
다른 클라우드의 무료 티어는 대부분 t3.micro 수준(1 vCPU / 1GB RAM)이라 프로덕션에 쓰기는 버겁습니다. 반면 Oracle Ampere A1은 4 OCPU + 24GB를 줍니다. ARM이라 일부 x86 전용 바이너리는 안 돌지만, Rust/Python/Node 생태계는 대부분 문제없이 돌아갑니다. 공식 스펙은 oracle.com/cloud/free에서 확인할 수 있습니다.
설치한 것들
- Ubuntu 24.04 LTS ARM64 — 기본 OS
- PostgreSQL 17 + pgvector — 정책 11,600건과 768차원 임베딩 저장
- Rust Axum API —
policy-api.graxel.ai에서 서빙하는 Axum 서버 - Ollama —
nomic-embed-text,llama3.2:3b,deepseek-r1:14b - Cloudflare Tunnel (cloudflared) — 외부 노출
포트 개방 함정
Oracle VCN의 기본 Security List는 22번만 열려 있습니다. 그런데 저는 초반에 iptables 설정까지 바꿨는데도 외부 접속이 안 되어 2시간을 헤맸습니다. 원인은 Oracle Linux 이미지의 iptables 기본 룰이 Ubuntu로 갈아탄 뒤에도 남아 있었기 때문. sudo iptables -L INPUT로 확인하고 REJECT 룰을 정리하니 해결됐습니다.
Cloudflare Tunnel로 HTTPS 노출
공인 IP에 직접 포트를 여는 대신 Cloudflare Tunnel을 씁니다. 장점은 두 가지. 첫째, 서버가 outbound만 열면 되므로 방화벽이 단순해집니다. 둘째, 무료로 HTTPS와 DDoS 방어가 붙습니다.
cloudflared tunnel create policy-api
cloudflared tunnel route dns policy-api policy-api.graxel.ai
cloudflared tunnel run policy-api
systemd 서비스로 등록해 재부팅 시 자동 시작되게 했습니다. Cloudflare Tunnel 공식 문서는 developers.cloudflare.com/cloudflare-one에서 볼 수 있습니다.
pgvector 설치 주의
ARM에서는 apt install postgresql-17-pgvector 패키지가 리포지토리 시점에 따라 빠져 있을 수 있습니다. 저는 PGDG 공식 APT 저장소를 추가하고 설치했습니다. 자세한 튜닝은 pgvector 하이브리드 검색 글에서 다뤘습니다.
Ollama 14B의 실제 성능
4 OCPU ARM에서 deepseek-r1:14b를 돌리면 토큰 생성 속도는 초당 4~6 tokens 수준입니다. 실시간 채팅에는 부족하지만, 야간 배치 분석용으로는 충분합니다. 임베딩 모델 nomic-embed-text는 768d 한 건당 50~120ms로 빠릅니다. 하드웨어와 모델 조합은 Ollama 로컬 LLM 글에 더 자세히 썼습니다.
부팅 안정성
Always Free 인스턴스는 Oracle이 리소스 회수 정책을 돌릴 수 있어, 한 달 이상 CPU 사용률이 낮으면 reclaim 경고가 옵니다. 저는 cron으로 매시간 가벼운 DB 쿼리를 돌려서 활성 상태를 유지합니다. 2년째 문제없이 돌고 있습니다.
배운 점
- 무료 티어지만 SLA는 없다. 중요 서비스는 장애 시 fallback을 준비해두자.
- ARM 특성상 일부 Node 네이티브 모듈은 prebuilt가 없다.
--build-from-source가 필요할 수 있다. - Cloudflare Tunnel + Rust Axum 조합은 cold start가 사실상 없어 TTFB가 매우 빠르다.
공유하기
이어 읽으면 좋은 글
같은 주제와 태그를 기준으로 GRAXEL 운영 맥락을 더 깊게 볼 수 있는 글입니다.
Thunderbolt 5 브릿지로 Mac 2대를 내부 네트워크로 연결한 후기
120Gbps TB5 케이블 한 개로 New Mac과 Old Mac을 직결해서 10.200.0.x 사설망을 구성하고, rsync로 개발/스테이징을 분리한 실제 구성.
Cloudflare Pages + Supabase + Upstash 무료 티어로 SaaS 포털 운영하기
graxel.ai 포털을 월 0원으로 운영하는 실제 스택 구성 — wrangler, GitHub Actions, 한계와 우회법까지 상세 공유.
Rust Axum + Cloudflare Tunnel로 policy-api.graxel.ai 운영하기
Oracle ARM 서버의 Rust Axum API를 Cloudflare Tunnel로 외부에 공개하고 무중단 배포까지 안정화한 실전 기록입니다.