Cloud 2차 릴리즈 ‐ Docker 기반 3‐Tier - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

이 페이지는 프로젝트의 2차 릴리즈(Docker 기반 3‐Tier)에 관한 전반적인 내용을 문서화한 페이지입니다.

각 섹션은 실제 구성 시 참고할 수 있도록 다이어그램, 도구, 정책 등을 포함하고 있습니다.


과제

[4단계 - Docker 컨테이너화 배포]

관련 문서

Sentry 연동 및 Discord 알림 설정 보고서 버전 관리 정책 (Semantic Versioning)
APM 도입 ‐ SigNoz GCP Cloud Armor 보안 정책 구성 보고서
Self‐Hosted Runner & Flyway Migration Documentation
GCP서버 자원 자동화 시스템 구축 (with Cloud Function Cloud Build)

TroubleShooting

Sentry set‐commits 오류 트러블슈팅
GitHub Actions Runner 환경 오동작 트러블슈팅 보고서

프로젝트 인프라 기술 도입 보고서

3tier 목적

  • 단일 인스턴스에 모든 컴포넌트를 배치한 모놀리식 구조로 인해 관리 복잡도 및 가용성 저하
  • 프론트, 백엔드, DB가 퍼블릭 서브넷에 위치한 단일 인스턴스에 있었기 때문에 보안 위험도 증가
    • 비정상적인 접근과 봇들의 요청으로 전방위 방어가 힘들다고 판단하여 중요한 정보들을 프라이빗 서브넷에 위치시키기로 함

기술 선정 배경

  • 비즈니스 요구사항: 확장성, 보안, 자동화, 비용 최적화

  • 평가 기준:

    1. 기능 적합성 (3-Tier 분리, HTTPS/CDN 지원)
    2. 확장성 (MIG 기반 오토스케일링)
    3. 안정성 (Cloud Armor, Firewall, DR)
    4. 비용 효율성 (자동 시작/종료로 30% 절감)
    5. 운영 편의성 (Cloud Build/Function 자동화)
  • 대안 비교:

    대안 장점 단점
    단일 GCE 인스턴스 단순 구성, 즉시 배포 확장·보안·자동화 한계
    GKE (Kubernetes) 관리 자동화, 확장성 우수 운영 복잡도, 러닝 커브
    MIG 기반 3-Tier Web Architecture 모듈화·자동화·비용 최적화 초기 구성 작업량 필요

01. 아키텍처 개요

image

  • React 정적 사이트: GCS + HTTPS Load Balancer + Cloud CDN + Cloud DNS
  • Spring Boot API: GCE Managed Instance Group (MIG) + Instance Template
  • Database: Cloud SQL(MySQL 8) + Cloud SQL Proxy
  • 네트워크: VPC(Shared) + Subnet 분리(Frontend/Backend/DB/Proxy) + Cloud NAT
  • 보안: Firewall + Cloud Armor + WireGuard VPN
  • CI/CD: GitHub Actions → Artifact Registry → MIG 롤링 업데이트
  • 운영 자동화: Cloud Function + Cloud Build + Cloud Scheduler → Discord 알림

02. 환경 구성

  1. VPC & Subnet

    • Shared VPC (10.0.0.0/16)

    • Subnet

      • frontend: 10.0.10.0/24 (public)
      • backend: 10.0.20.0/24 (private)
      • db-proxy: 10.0.30.0/24 (private)
      • db: 10.0.40.0/24 (private)
  2. Managed Instance Group

    • Zone: asia-northeast3-a,b,c
    • Instance Template: E2 vCPU1, RAM1GB, Balanced PD 30GB
    • Autoscaling: CPU 60% 기준 최대 4개
  3. Load Balancer

    • HTTPS 프록시 + SSL 인증서 (Managed)
    • Backend: MIG (TCP:8080), Health Check (TCP:8080)
  4. Cloud SQL & Proxy

    • Cloud SQL(MySQL 8, db-custom-1-3840)
    • Proxy VM 배포 (E2 small, Public IP)
  5. 기타 서비스

    • GCS (정적 호스팅, 객체 버전 관리)
    • Cloud Scheduler (Start/Stop 트리거)
    • Cloud Build (runner: Self-hosted, Flyway migration)
    • WireGuard VPN (AWS ↔ GCP)

03. 보안 설계

  • Cloud Armor 정책

    • 지리적 허용: 대한민국(kr) only
    • API 차단: /api/* 인증되지 않은 요청 전부 Block
    • OWASP Top10 방어 기본 탑재
  • 방화벽 규칙 (prod 기준)

    이름 방향 프로토콜/포트 출발지/목적지 대상
    allow-lb-http Ingress TCP 80 0.0.0.0/0 HTTPS Load Balancer
    allow-lb-https Ingress TCP 443 0.0.0.0/0 HTTPS Load Balancer
    allow-healthcheck Ingress TCP 8080 35.191.0.0/16,130.211.0.0/22 Backend MIG
    allow-backend-api Ingress TCP 8080 Load Balancer 프록시 IP Backend MIG
    allow-sql-proxy Ingress TCP 3307 10.0.20.0/24 Proxy VM
    allow-ssh-runner Ingress TCP 22 GitHub Runner 공인 IP Proxy VM
    allow-wireguard Ingress UDP 51820 AWS VPN 피어 IP WireGuard VM
    default-deny-all Ingress All 0.0.0.0/0 All Instances

04. 재해 복구 및 백업

  • Cloud SQL 자동 백업: 일일 백업, 7일 보관
  • 인스턴스 스냅샷: 주간 디스크 스냅샷(균형형 PD)
  • GCS 버전 관리: 객체 버전 보관 활성화
  • 설정 저장소: Terraform 상태 파일 S3/DynamoDB 백엔드

05. 운영 가이드

  1. 배포

    • GitHub Actions PR 병합 → Artifact Registry 빌드 → MIG 롤링 업데이트
  2. 자원 제어

    • Cloud Function HTTP /start, /stop 호출 또는 Scheduler 자동 실행
  3. 모니터링

    • Cloud Monitoring(Compute/SQL 지표), SigNoz APM 연동
    • Slack/Discord 알림 채널 확인
  4. 긴급 복구

    • Cloud SQL point-in-time 복원
    • MIG 인스턴스 Template 교체 후 재배포

06. 사용 도구 및 버전

  • Terraform v1.5.7
  • gcloud SDK 427.0.0
  • GitHub Actions Runner 2.308.0
  • Flyway Community Edition 9.17.1
  • WireGuard 1.0.20210225
  • Cloud SQL Proxy 1.32.0

07. GCP 비용 정리 (예상 총합: $313.50 / 약 43만 원)

백엔드 서버 (BE 인스턴스)

자원 항목 설명 사용량 가격 (USD)
E2 vCPU vCPU 1개 × 270시간 270시간 $7.57
E2 메모리 RAM 1GB × 1080시간 1080GB-시간 $4.04
디스크 (Balanced PD) SSD 디스크 30GB 30GB $3.90
소계 $15.51

AI 서버 (CPU 인스턴스)

자원 항목 설명 사용량 가격 (USD)
E2 vCPU 1개 × 1080시간 1080시간 $30.27
E2 메모리 1GB × 4320시간 4320GB-시간 $16.15
디스크 (Balanced PD) SSD 디스크 30GB 30GB $3.90
소계 $50.32

AI 서버 (GPU 인스턴스)

자원 항목 설명 사용량 가격 (USD)
N1 vCPU vCPU 1개 × 1068시간 1068시간 $43.38
N1 메모리 RAM 1GB × 4005시간 4005GB-시간 $21.70
NVIDIA Tesla T4 GPU GPU 1개 × 267시간 267시간 $98.79
디스크 (PD) HDD 디스크 100GB 100GB $5.20
소계 $169.07

Cloud SQL (MySQL)

자원 항목 설명 사용량 가격 (USD)
vCPU 1개 × 540시간 540시간 $28.998
메모리 1GB × 2025시간 2025GB-시간 $18.43
스토리지 표준 스토리지 27,000GB 27,000GB $8.17
소계 $55.60

Cloud Storage

자원 항목 설명 사용량 가격 (USD)
표준 스토리지 GCS 스탠다드 1000GB 1000GB $23.00
소계 $23.00

최종 합계: $313.50 (약 43만 원/월)

참고 링크

⚠️ **GitHub.com Fallback** ⚠️