발표 예정일: 2026-01-09
이 프로젝트는 노트북(회사/외부)과 데스크탑(집)을 Tailscale VPN으로 연결하여 구축한 하이브리드 쿠버네티스 클러스터 기반의 업비트 클론 서비스입니다. 프론트엔드와 백엔드 서비스의 개발보다는 인프라 구성, 컨테이너화, 컨테이너 오케스트레이션 및 CI/CD 자동화 파이프라인 구축에 초점을 맞추었습니다.
- Dockerfile 구성:
frontend/와backend/각각에 최적화된 Dockerfile을 작성하여 어플리케이션을 컨테이너 이미지로 빌드합니다. - 로컬 개발 환경:
docker-compose.yml을 사용하여 로컬 환경에서 TimescaleDB(PostgreSQL), Backend(FastAPI), Frontend 서비스를 통합하여 손쉽게 띄우고 테스트할 수 있습니다. - 이미지 레지스트리: 빌드된 이미지는 Docker Hub(
skdtmr/upbit-clone-back,skdtmr/upbit-clone-front)를 통해 관리됩니다.
- 하이브리드 클러스터 접속: 서로 다른 물리적 네트워크에 있는 노드(집, 외부)들을
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 빌드 및 푸시, 상태 확인 등 운영 편의성을 제공합니다.
코드가 main 또는 master 브랜치에 푸시 혹은 PR 될 때마다 .github/workflows/ci.yaml을 통해 전체 파이프라인이 자동 실행됩니다.
- 자동화 빌드: 변경된 코드를 기반으로 Docker Buildx를 사용하여 백엔드 및 프론트엔드 Docker 이미지를 새롭게 빌드합니다. 빠른 빌드를 위해 캐시(
buildcache) 옵션을 적극 활용합니다. - 자동화 푸시: 빌드된 이미지를 Docker Hub로 안전하게 푸시합니다. 이미지 태그는 최신 커밋 해시값(
github.sha)으로 고유하게 지정됩니다. - 자동화 배포(GitOps 방식 반영): 파이프라인 내에서
k8s/backend.yaml과k8s/frontend.yaml파일의 이미지 태그 부분을 새로 생성된 커밋 해시에 맞춰sed명령어로 자동 교체한 후, 변경된 Manifest를 다시 Git 저장소에 Commit & Push 합니다. 이로써 K8s 환경에서 선언적인 배포가 이루어지도록 유도합니다.
