Skip to content

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 작업 워크플로를 유지 관리합니다.

계약 작업 흐름

WorkflowTriggerAction
contracts-buildPR을 메인으로계약 컴파일, 정적 분석 실행
contracts-testPR을 메인으로Foundry 테스트 스위트 실행(PR)
contracts-deploy-testnet수동 파견Foundry 스크립트를 통해 BSC Chapel에 배포
contracts-deploy-mainnet수동 파견 + 승인다중 서명 확인을 통해 BSC 메인넷에 배포

서비스 워크플로우

WorkflowTriggerAction
services-buildPR을 메인으로Go 바이너리, 린트 빌드
services-testPR을 메인으로경주 감지기로 Go 테스트 스위트 실행
services-deploy메인으로 푸시Docker 이미지를 빌드하고 SSH을 통해 EC2에 배포합니다.

앱 워크플로

WorkflowTriggerAction
apps-buildPR을 메인으로모든 프런트엔드 앱 빌드
apps-deploy메인으로 푸시Cloudflare 페이지에 배포

하위 그래프 워크플로

WorkflowTriggerAction
subgraph-buildPR을 메인으로AssemblyScript 매핑 컴파일
subgraph-deploy메인으로 푸시Goldsky 호스팅 서비스에 배포

문서화 작업흐름

WorkflowTriggerAction
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 토큰)를 저장합니다. 비밀은 런타임 시 워크플로에 삽입되며 아티팩트나 로그에 유지되지 않습니다.