US공시톡 인프라 · 외부 서비스 구성
Oracle Cloud Always Free
US공시톡의 모든 서버 인프라는 Oracle Cloud A1 Flex 인스턴스 하나에서 돌아가요. ARM 기반 4 OCPU, 24GB RAM을 Always Free Tier로 사용 중이에요.
컨테이너 구성 (12개)
Docker Compose 하나로 12개의 컨테이너를 관리해요.
| 그룹 | 컨테이너 | 역할 |
|---|---|---|
| API | FastAPI x2 (prod) + x1 (dev) | 운영/개발 API 서버 |
| Database | PostgreSQL x3 | 운영 DB, 개발 DB, Airflow 메타 DB |
| Cache | Redis x2 | 운영 캐시, 개발 캐시 |
| Scheduler | Airflow Scheduler + Webserver | DAG 스케줄링, 모니터링 UI |
| Sync | Git Sync x2 | main/develop 브랜치 자동 pull (30초) |
| Tunnel | Cloudflared | Cloudflare Tunnel 연결 |
네트워크 · Cloudflare
서버는 공인 IP를 직접 노출하지 않아요. Cloudflare Tunnel이 서버에서 Cloudflare로 아웃바운드 연결만 유지하고, 모든 인바운드 트래픽은 Cloudflare를 통해 들어와요.
api.jerryjo.com: Production API (x2 replicas)dev.jerryjo.com: Development API- Zero Trust Access: 앱 클라이언트에서 CF Access 토큰을 포함해서 요청
배포 플로우
Git push 후 Git Sync 컨테이너가 30초 내에 자동으로 pull해요.
- 개발 서버:
--reload옵션으로 즉시 반영 - 운영 서버: docker restart 필요
별도의 CI/CD 파이프라인 없이 Git Sync만으로 배포를 처리해요.
외부 서비스
| 서비스 | 용도 | 비용 |
|---|---|---|
| Cloudflare | DNS, Tunnel, Zero Trust, Email Routing | Free |
| Google Cloud | OAuth, Vertex AI Gemini | 무료 크레딧 |
| Firebase | FCM 푸시 알림, Analytics | Free (Spark) |
| Google AdMob | 보상형 광고 SSV | 수익 |
| Slack | 모니터링 알림 | Free |
| GitHub | 코드 저장소, Gist (앱 상태) | Free |
리소스 사용량
| 항목 | 스펙 | 사용량 |
|---|---|---|
| CPU | 4 OCPU (ARM) | 평균 5% 이하 |
| 메모리 | 24GB | ~3.6GB |
| 디스크 | 200GB | ~24GB |
| 월 비용 | Always Free | $0 |
12개의 컨테이너가 전부 돌아가는데도 메모리 3.6GB밖에 안 써요. ARM 기반이지만 대부분의 Docker 이미지가 멀티 아키텍처를 지원해서 호환성 문제도 없었어요.
모니터링
별도의 APM 도구 없이 Airflow DAG로 직접 모니터링을 구축했어요.
- 시간별 헬스체크: 매시 정각 7개 항목 점검 → Slack
- 일일 리포트: KST 09:00 서비스 지표 요약 → Slack
서비스 장애가 감지되면 Slack으로 즉시 알림이 오기 때문에, 별도의 유료 모니터링 서비스 없이도 충분히 운영 가능해요.