Skip to content

Repository files navigation

Upbit Clone Hybrid-Cloud Project

발표 예정일: 2026-01-09

1. 프로젝트 개요

이 프로젝트는 노트북(회사/외부)과 데스크탑(집)을 Tailscale VPN으로 연결하여 구축한 하이브리드 쿠버네티스 클러스터 기반의 업비트 클론 서비스입니다. 프론트엔드와 백엔드 서비스의 개발보다는 인프라 구성, 컨테이너화, 컨테이너 오케스트레이션 및 CI/CD 자동화 파이프라인 구축에 초점을 맞추었습니다.

2. 아키텍처 및 인프라 구성

🐳 Docker & 컨테이너화

  • Dockerfile 구성: frontend/backend/ 각각에 최적화된 Dockerfile을 작성하여 어플리케이션을 컨테이너 이미지로 빌드합니다.
  • 로컬 개발 환경: docker-compose.yml을 사용하여 로컬 환경에서 TimescaleDB(PostgreSQL), Backend(FastAPI), Frontend 서비스를 통합하여 손쉽게 띄우고 테스트할 수 있습니다.
  • 이미지 레지스트리: 빌드된 이미지는 Docker Hub(skdtmr/upbit-clone-back, skdtmr/upbit-clone-front)를 통해 관리됩니다.

☸️ Kubernetes (K8s) 클러스터

  • 하이브리드 클러스터 접속: 서로 다른 물리적 네트워크에 있는 노드(집, 외부)들을 Tailscale VPN을 이용해 하나의 내부망처럼 묶어 K8s v1.31 클러스터를 구축했습니다 (k8s/init-node.sh 활용). Containerd를 런타임으로 사용합니다.
  • 매니페스트 구성 (k8s/ 디렉토리):
    • frontend.yaml, backend.yaml, market-service.yaml: 각 애플리케이션의 Deployment 및 Service 구성
    • timescaledb.yaml, timescaledb-ha.yaml: 데이터베이스 배포
    • ingress.yaml, metallb.yaml: 외부 트래픽을 클러스터 내부 서비스로 라우팅하기 위한 Ingress 및 L2 로드밸런서 설정
    • configmap.yaml, secrets.yaml: 환경 변수 및 민감한 정보 관리
    • hpa.yaml: 트래픽 부하에 따른 파드 오토스케일링(Horizontal Pod Autoscaling) 설정
    • pv-ha.yaml, storage-class.yaml: 영구 볼륨(Persistent Volume) 및 스토리지 클래스 관리
  • 배포 스크립트: deploy.sh 스크립트를 통해 K8s 리소스 통합 배포, Docker 빌드 및 푸시, 상태 확인 등 운영 편의성을 제공합니다.

🔄 CI/CD 파이프라인 (GitHub Actions)

코드가 main 또는 master 브랜치에 푸시 혹은 PR 될 때마다 .github/workflows/ci.yaml을 통해 전체 파이프라인이 자동 실행됩니다.

  1. 자동화 빌드: 변경된 코드를 기반으로 Docker Buildx를 사용하여 백엔드 및 프론트엔드 Docker 이미지를 새롭게 빌드합니다. 빠른 빌드를 위해 캐시(buildcache) 옵션을 적극 활용합니다.
  2. 자동화 푸시: 빌드된 이미지를 Docker Hub로 안전하게 푸시합니다. 이미지 태그는 최신 커밋 해시값(github.sha)으로 고유하게 지정됩니다.
  3. 자동화 배포(GitOps 방식 반영): 파이프라인 내에서 k8s/backend.yamlk8s/frontend.yaml 파일의 이미지 태그 부분을 새로 생성된 커밋 해시에 맞춰 sed 명령어로 자동 교체한 후, 변경된 Manifest를 다시 Git 저장소에 Commit & Push 합니다. 이로써 K8s 환경에서 선언적인 배포가 이루어지도록 유도합니다.

System Architecture

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages