US공시톡 API 서버 구축기
왜 Oracle Cloud인가요?
개인 프로젝트로 US 공시톡 앱을 위한 서버 API를 구축하면서, 서버 비용이 가장 큰 고민이었어요. AWS나 GCP는 아무리 절약해도 월 수만원은 나가니까요.
Oracle Cloud의 Always Free Tier가 답이었어요. ARM 기반 A1 Flex 인스턴스를 4 OCPU, 24GB RAM까지 무료로 쓸 수 있어요. aarch64 아키텍처라 Docker 이미지 호환성만 확인하면 되고, 성능은 충분했어요.
전체 아키텍처
모든 서비스는 Docker Compose로 구성되어 있어요. 크게 세 레이어로 나뉘어요.
Edge Layer · Cloudflare
외부 트래픽은 Cloudflare Tunnel을 통해 들어와요. 서버 IP를 직접 노출하지 않으면서, Zero Trust 정책으로 접근을 제어해요.
- Tunnel: 서버에서 Cloudflare로 아웃바운드 연결만 유지
- Zero Trust: 허가된 클라이언트만 API에 접근 가능
도메인은 api.jerryjo.com(프로덕션)과 dev.jerryjo.com(개발)로 분리했어요.
Core Services · FastAPI + PostgreSQL + Redis
API 서버는 FastAPI로 구현했어요. Production 환경에서 2개의 replica로 운영하고, **JWT(HS256)**로 인증을 처리해요.
- PostgreSQL x3: 메인 DB, Airflow 메타데이터, 분석용 인스턴스를 분리 운영
- Redis x2: 캐시 전용과 작업 큐 전용으로 역할을 분리
Automation · Airflow + Slack
Apache Airflow가 백그라운드 작업을 스케줄링해요.
- Market Mood: 시장 브리핑을 자동 생성하고 이 블로그에 자동 포스팅
- Hourly Health Check: 매시 정각에 7개 항목(서비스, DAG, DB, Redis, AI, API, 시스템 리소스)을 점검하고 Slack으로 리포트
- Git Sync: GitHub main 브랜치를 자동으로 pull해서 배포에 반영
인증 구조
이중 인증을 적용했어요.
- Cloudflare Access: Zero Trust 정책으로 1차 검증
- FastAPI JWT: HS256 기반 Access/Refresh 토큰으로 2차 검증
모바일 앱에서는 Cloudflare Access 토큰 + JWT를 함께 전송해요.
운영 현황
현재 메모리 사용량은 24GB 중 약 3.6GB, 디스크는 200GB 중 24GB 정도 사용하고 있어요. Free Tier 인스턴스 하나로 모든 서비스를 무리 없이 운영 중이에요.
| 항목 | 스펙 | 사용량 |
|---|---|---|
| CPU | 4 OCPU (ARM) | 평균 5% 이하 |
| 메모리 | 24GB | ~3.6GB |
| 디스크 | 200GB | ~24GB |
| 비용 | Always Free | $0/월 |
사이드 프로젝트에 클라우드 비용이 부담된다면, Oracle Cloud Always Free Tier를 추천해요. ARM 기반이지만 대부분의 Docker 이미지가 멀티 아키텍처를 지원하는 요즘은 큰 문제가 없어요.