Infrastructure
CloudBank은 빌드 조정을 위해 Turborepo와 함께 pnpm monorepo를 사용하고, CI/CD에 대한 GitHub 작업과 Cloudflare Pages, EC2 및 Goldsky를 포괄하는 다중 대상 배포 전략을 사용합니다.
모노레포 구조
cloudbank/
├── contracts/ # Solidity contracts (Foundry)
├── services/ # Go backend services
├── apps/
│ ├── web/ # Trading UI (React + Vite)
│ ├── admin/ # Admin panel (React + Vite)
│ ├── node-presale/ # Node sale site (Next.js)
│ └── docs/ # Documentation (VitePress)
├── packages/
│ ├── subgraph/ # GraphQL queries & types
│ └── contracts/ # Generated ABIs & types
├── turbo.json # Turborepo pipeline config
├── pnpm-workspace.yaml
└── package.json오케스트레이션 구축
Turborepo는 모든 패키지와 앱에서 빌드 종속성 그래프를 관리합니다.
turbo run build은 모든 패키지를 종속성 순서대로 빌드합니다.turbo run test은 캐싱을 사용하여 단일 저장소에서 테스트를 실행합니다.- 패키지 출력은 로컬 및 원격 캐시에 캐시되므로 변경되지 않은 패키지는 재구축을 건너뜁니다.
- 파이프라인은
apps/*이전에packages/*이 빌드되도록 명시적인dependsOn관계를 사용하여turbo.json에 구성됩니다.
CI/CD 파이프라인
CloudBank은 모든 구성 요소의 전체 수명 주기를 포괄하는 31+ GitHub 작업 워크플로를 유지 관리합니다.
계약 작업 흐름
| Workflow | Trigger | Action |
|---|---|---|
| contracts-build | PR을 메인으로 | 계약 컴파일, 정적 분석 실행 |
| contracts-test | PR을 메인으로 | Foundry 테스트 스위트 실행(PR) |
| contracts-deploy-testnet | 수동 파견 | Foundry 스크립트를 통해 BSC Chapel에 배포 |
| contracts-deploy-mainnet | 수동 파견 + 승인 | 다중 서명 확인을 통해 BSC 메인넷에 배포 |
서비스 워크플로우
| Workflow | Trigger | Action |
|---|---|---|
| services-build | PR을 메인으로 | Go 바이너리, 린트 빌드 |
| services-test | PR을 메인으로 | 경주 감지기로 Go 테스트 스위트 실행 |
| services-deploy | 메인으로 푸시 | Docker 이미지를 빌드하고 SSH을 통해 EC2에 배포합니다. |
앱 워크플로
| Workflow | Trigger | Action |
|---|---|---|
| apps-build | PR을 메인으로 | 모든 프런트엔드 앱 빌드 |
| apps-deploy | 메인으로 푸시 | Cloudflare 페이지에 배포 |
하위 그래프 워크플로
| Workflow | Trigger | Action |
|---|---|---|
| subgraph-build | PR을 메인으로 | AssemblyScript 매핑 컴파일 |
| subgraph-deploy | 메인으로 푸시 | Goldsky 호스팅 서비스에 배포 |
문서화 작업흐름
| Workflow | Trigger | Action |
|---|---|---|
| deploy-docs-test | 메인으로 푸시 | 테스트 환경에 문서 자동 배포 |
| deploy-docs-live | 수동 파견 | 문서를 프로덕션에 배포 |
배포 대상
프런트엔드 — Cloudflare 페이지
모든 프런트엔드 애플리케이션은 풀 요청에 대한 자동 미리보기 배포를 통해 Cloudflare Pages에 배포됩니다. 프로덕션 배포는 기본 분기로 푸시되면 트리거됩니다. Cloudflare의 에지 네트워크는 대부분의 지역에서 50ms 미만의 TTFB로 글로벌 CDN 배포를 제공합니다.
백엔드 — EC2 + Docker Compose
Go 백엔드는 Docker Compose로 조정된 EC2 인스턴스에서 실행됩니다. 구성에는 다음이 포함됩니다.
- API 서버 — Gin 기반 HTTP 서비스입니다.
- MySQL — 기본 데이터 저장소.
- Redis — 캐시, 속도 제한 및 세션 저장.
배포는 GitHub 작업의 SSH을 통해 실행되어 최신 Docker 이미지를 가져오고 롤링 다시 시작을 수행합니다.
하위 그래프 — Goldsky
Graph 하위 그래프는 인덱싱 인프라, 쿼리 제공 및 모니터링을 처리하는 Goldsky의 호스팅 서비스에 배포됩니다. 배포에서는 CI 파이프라인에 통합된 Goldsky CLI을 사용합니다.
계약 — 파운드리 스크립트
스마트 계약 배포는 다음과 함께 Foundry의 forge script 명령을 사용합니다.
- 테스트넷 (BSC Chapel) — 수동으로 트리거되며 전용 배포자 지갑을 사용합니다.
- 메인넷(BSC) — 수동 파견과 환경 승인 게이트가 필요합니다.
환경경영
GitHub 보호 규칙이 있는 환경은 민감한 배포를 제어합니다.
- testnet — 승인이 필요하지 않으며 모든 관리자가 액세스할 수 있습니다.
- 메인넷 — 최소 한 명 이상의 지정된 리뷰어의 승인이 필요합니다.
- 프로덕션 — 백엔드 프로덕션 배포에는 승인이 필요합니다.
각 환경은 다른 환경과 격리된 자체 비밀 세트(RPC URLs, 배포자 키, API 토큰)를 저장합니다. 비밀은 런타임 시 워크플로에 삽입되며 아티팩트나 로그에 유지되지 않습니다.