블로그 목록

admin-als 프론트엔드 배포 프로세스 — Jenkins → PV → Kubernetes Nginx

2025-08-084 min read
KubernetesJenkinsnginxGitOpsDevOpsCI/CD

사내 백오피스 신규 구축

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에서 수행하는 작업:
    1. Git에서 소스코드 pull
    2. 환경 변수 및 CodeArtifact 인증 설정
    3. pnpm install로 의존성 설치
    4. 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. 최종 흐름도

설정 Repositoryalssolution/gitops-als파일 위치scm-admin/admin.yaml · deployment.yamlKubernetesadmin-als builddist 폴더 생성dist 폴더를서버 폴더에 복사dist(frontend build 결과물)Pod (nginx)호스트: admin.alssolution.co.krpvPV 마운트저장/usr/share/nginx/htmlpv 경로: /var/lib/rancher/k3s/storage/pvc-82befe59-3a3e-4d0c-8d96-d239a754d74c_scm_acm-admin-pvc

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로 이어지는 경로가 명확해 장애 시 어느 단계에서 끊겼는지 추적하기 쉽다.