admin-als 프로젝트의 프론트엔드 코드를 빌드하여 Kubernetes 환경에서 Nginx를 통해 서비스한다. 이 글은 빌드 산출물이 어떻게 운영 도메인까지 도달하는지 그 배포 경로를 정리한다.
1. 개요
- 빌드 산출물(
dist/)은 Persistent Volume(PV) 에 저장된다. - Nginx Pod가 해당 볼륨을 마운트하여 정적 파일을 제공한다.
- 도메인
admin.alssolution.co.kr은 Ingress를 통해 Nginx 서비스로 연결된다.
별도 이미지를 빌드해 푸시하는 방식이 아니라, 정적 산출물만 PV에 갈아 끼우는 구조라는 점이 핵심이다.
2. 배포 흐름 (Jenkins → Kubernetes)
1단계: Jenkins 빌드
- Repository:
alssolution/admin-als - Jenkins에서 수행하는 작업:
- Git에서 소스코드 pull
- 환경 변수 및 CodeArtifact 인증 설정
pnpm install로 의존성 설치pnpm build로dist/폴더 생성
2단계: 빌드 결과물 전송
- 빌드된
dist/를 PV가 마운트된 빌드 서버 디렉토리에 복사
scp dist/* pv-server:/mnt/data/admin-als/
- 이 PV는 Kubernetes Nginx Pod와 공유된다.
3단계: GitOps 저장소 업데이트
- Repository:
alssolution/gitops-als - 수정 대상 파일:
scm-admin/admin.yaml(Service, Ingress 설정)scm-admin/deployment.yaml(nginx Deployment, PV mount 설정)
- 변경사항 commit & push → ArgoCD 또는 FluxCD가 자동 반영
3. Kubernetes 구성
Persistent Volume (PV) / PVC
Jenkins가 빌드 결과물을 저장하는 공간이며, nginx Pod에서 /usr/share/nginx/html 경로로 마운트한다.
volumes:
- name: frontend-static
persistentVolumeClaim:
claimName: admin-als-pvc
volumeMounts:
- mountPath: /usr/share/nginx/html
name: frontend-static
Nginx Deployment
PV에서 정적 파일을 읽어 서빙한다. 정적 HTML/JS/CSS만 PV에 넣으면 되므로 별도 이미지 빌드가 불필요하다.
Service
nginx Pod를 ClusterIP 또는 NodePort로 노출한다.
Ingress
도메인 admin.alssolution.co.kr을 nginx 서비스로 라우팅한다.
rules:
- host: admin.alssolution.co.kr
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
4. 최종 흐름도
dist 폴더 생성 이후 산출물은 서버 폴더로 복사 → PV에 저장되고, Kubernetes의 Nginx Pod가 그 PV를 /usr/share/nginx/html로 마운트해 admin.alssolution.co.kr로 서빙한다. Pod·PV는 Kubernetes 클러스터 내부에 있으며, 인프라 설정은 alssolution/gitops-als 저장소의 scm-admin/admin.yaml·deployment.yaml이 단일 소스로 관리한다.
정리
- 프론트엔드 배포를 이미지 빌드/푸시 없이 정적 산출물 교체로 단순화한 구조다.
- Jenkins는 빌드와 PV 적재만, 실제 인프라 상태는 GitOps 저장소가 단일 소스로 관리한다.
- 도메인 → Ingress → Service → Nginx Pod → PV로 이어지는 경로가 명확해 장애 시 어느 단계에서 끊겼는지 추적하기 쉽다.