ADR-003: BYOC with GCP Only (GCP 전용 BYOC)
Status: Accepted | Date: 2026-02-10
맥락
Fascia는 모든 런타임 인프라와 고객 데이터가 고객의 자체 클라우드 프로젝트에 존재하는 BYOC(Bring Your Own Cloud) 모델을 따릅니다. 아키텍처 질문은 어떤 클라우드 제공자를 지원할 것인지입니다.
여러 클라우드 제공자를 지원하려면 별도의 Terraform 템플릿을 유지하고, 서로 다른 서비스 추상화(예: AWS Lambda vs Cloud Run vs Azure Functions)를 다루며, 모든 대상에 대해 배포 파 이프라인을 테스트해야 합니다. 이는 빠른 반복이 중요한 시점에서 엔지니어링 노력을 배가시킵니다.
결정
MVP와 초기 릴리스에서는 GCP만 지원합니다. 런타임 스택은 고객의 GCP 프로젝트에 다음을 사용하여 배포됩니다:
- Cloud Run -- Executor 호스팅 (컨테이너화된 Go 바이너리)
- Cloud SQL -- PostgreSQL 데이터베이스 (워크스페이스당 하나의 인스턴스)
- Cloud Scheduler -- Cron 트리거 실행
- Secret Manager -- API 키, OAuth 시크릿, JWT 서명 키
멀티클라우드 지원(AWS, Azure)은 단기 로드맵에서 명시적으로 제외되지만, 향후 확장이 가능하도록 인프라 레이어에 프로바이더 추상화를 설계합니다.
검토한 대안
| 옵션 | 장점 | 단점 |
|---|---|---|
| GCP 전용 (선택됨) | 긴밀한 통합, 단일 Terraform 템플릿, 일관된 개발자 경험 | 대상 시장을 GCP 고객으로 제한 |
| 멀티클라우드 (AWS + GCP + Azure) | 더 큰 시장, 고객의 선택권 | 3배의 배포 복잡성, 서로 다른 서비스 추상화, 느린 반복 |
| AWS 전용 | 가장 큰 클라우드 시장 점유율 | GCP가 이 사용 사례에 더 나은 관리형 서비스 제공 (Cloud Run 콜드 스타트, Cloud SQL 단순성) |
| 클라우드 불가지론 (Kubernetes) | 어디서든 실행 가능 | 비기술 사용자에게 막대한 운영 복잡성 |
결과
긍정적
- 단일 배포 대상 -- 하나의 Terraform 템플릿만 유지, 테스트, 반복하면 됩니다.
- 우수한 콜드 스타트 -- Cloud Run은 Go Executor로 100ms 미만의 콜드 스타트를 제공하여 최종 사용자 경험에 직접적으로 도움이 됩니다.
- 완전 관리형 데이터베이스 -- Cloud SQL이 백업, 장애 조치, 유지보수를 자동으로 처리합니다.
- 깊은 GCP 통합 -- 접근 제어를 위한 네이티브 IAM, 자격 증명을 위한 Secret Manager, Cron을 위한 Cloud Scheduler -- 모두 고객의 프로젝트 경계 안에서 동작합니다.
- 일관된 비용 모델 -- 모든 고객이 동일한 인프라 프리미티브를 사용하므로 가격이 예측 가능합니다.
부정적
- 시장 제한 -- AWS나 Azure를 사용하는 고객은 멀티클라우드 지원이 추가될 때까지 Fascia를 사용할 수 없습니다.
- 벤더 종속 인식 -- 고객이 자신의 GCP 프로젝트와 그 안의 모든 데이터를 소유하지만, GCP 사용 요구사항이 일부 잠재 고객을 단념시킬 수 있습니다.
리스크
- GCP 가격이 크게 변동하면 모든 고객이 동시에 영향을 받습니다. GCP 가격 정책 발표를 모니터링하는 것이 필수적입니다.
- 멀티클라우드 지원을 추가할 때 비용이 큰 재작성을 피하려면 인프라 추상화 레이어를 초기에 설계해야 합니다(GCP만 구현하더라도).