OPEN HYPER STEP
← 목록으로 (Java+Spring)
JAVA · 97 / 99
java
CHAPTER 97 / 99
읽기 약 2
FUNCTION

헬름 차트: K8s 패키지 관리


핵심 개념

Helm install/upgrade/rollback·values.yaml — Spring 마이크로서비스 Helm 차트.

본문

Helm 기본

BASH📋 코드 (16줄)
# 설치
brew install helm  # 또는 OS별

# 차트 검색
helm search repo bitnami/postgresql

# 추가 + 설치
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-postgres bitnami/postgresql --namespace ohs-prod

# 업그레이드
helm upgrade my-postgres bitnami/postgresql --set auth.password=newpass

# 롤백
helm history my-postgres
helm rollback my-postgres 1

차트 구조

📋 코드 (14줄)
ohs-backend/
├── Chart.yaml          # 차트 메타데이터
├── values.yaml         # 기본값
├── values-prod.yaml    # 환경별 오버라이드
├── values-dev.yaml
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   ├── configmap.yaml
│   ├── secret.yaml
│   ├── hpa.yaml
│   └── _helpers.tpl
└── charts/             # 의존 차트

Chart.yaml

YAML📋 코드 (15줄)
apiVersion: v2
name: ohs-backend
description: OHS Backend
type: application
version: 1.0.0
appVersion: "1.0.0"
dependencies:
  - name: postgresql
    version: "13.4.0"
    repository: https://charts.bitnami.com/bitnami
    condition: postgresql.enabled
  - name: redis
    version: "18.6.0"
    repository: https://charts.bitnami.com/bitnami
    condition: redis.enabled

values.yaml — 기본값

YAML📋 코드 (44줄)
replicaCount: 3

image:
  repository: myorg/ohs-backend
  tag: "1.0.0"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80
  targetPort: 8080

ingress:
  enabled: true
  hosts:
    - host: api.openhyperstep.com
      paths:
        - path: /
          pathType: Prefix

resources:
  requests:
    memory: "512Mi"
    cpu: "250m"
  limits:
    memory: "1Gi"
    cpu: "1000m"

autoscaling:
  enabled: true
  minReplicas: 3
  maxReplicas: 20
  targetCPUUtilizationPercentage: 70

postgresql:
  enabled: true
  auth:
    database: ohsdb

redis:
  enabled: true

env:
  SPRING_PROFILES_ACTIVE: prod

templates/deployment.yaml

YAML📋 코드 (31줄)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "ohs-backend.fullname" . }}
  labels:
    {{- include "ohs-backend.labels" . | nindent 4 }}
spec:
  {{- if not .Values.autoscaling.enabled }}
  replicas: {{ .Values.replicaCount }}
  {{- end }}
  selector:
    matchLabels:
      {{- include "ohs-backend.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "ohs-backend.selectorLabels" . | nindent 8 }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: {{ .Values.service.targetPort }}
          env:
            {{- range $key, $val := .Values.env }}
            - name: {{ $key }}
              value: {{ $val | quote }}
            {{- end }}
          resources:
            {{- toYaml .Values.resources | nindent 12 }}

templates/_helpers.tpl

YAML📋 코드 (15줄)
{{- define "ohs-backend.fullname" -}}
{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 -}}
{{- end -}}

{{- define "ohs-backend.labels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
app.kubernetes.io/managed-by: helm
{{- end -}}

{{- define "ohs-backend.selectorLabels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}

환경별 배포

BASH📋 코드 (10줄)
# 개발
helm install ohs-backend ./ohs-backend \
    -f values.yaml -f values-dev.yaml \
    --namespace ohs-dev --create-namespace

# 프로덕션
helm upgrade --install ohs-backend ./ohs-backend \
    -f values.yaml -f values-prod.yaml \
    --namespace ohs-prod \
    --set image.tag=1.1.0

CI/CD에서 사용

YAML📋 코드 (8줄)
- name: Deploy to K8s
  run: |
    helm upgrade --install ohs-backend ./helm/ohs-backend \
        -f ./helm/values-${{ env.ENVIRONMENT }}.yaml \
        --set image.tag=${{ github.sha }} \
        --namespace ohs-${{ env.ENVIRONMENT }} \
        --wait \
        --timeout 5m

다음 챕터

CH.29 "12-Factor App" — 클라우드 네이티브 원칙.


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 Spring 코드의 Helm 차트 부분을 분석해서
템플릿 안전성·재사용와 개선 우선순위를 알려줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

Helm 차트 vs 다른 패턴 비교를
실전 사례 5개로 보여주고 Helm vs Kustomize를 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 코드베이스 전체를 분석해서
Helm 차트 관련 Helm 안티패턴를 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 한국 기업의 Helm 차트 채택률과
한국 K8s 사용자 Helm 채택률를 솔직히 알려줘.

⭐ 이것만 기억하세요
헬름 차트: K8s 패키지 관리 이 3가지만 확실히 잡으세요
1.Helm은 K8s 매니페스트의 패키지·템플릿·버전 관리
2.values.yaml로 환경별 설정 분리 + dependencies로 PostgreSQL/Redis 통합
3.다음 챕터 CH.29에서 12-Factor App — 클라우드 네이티브 원칙


공유하기
진행도 97 / 99