IT Developer/Spring

Spring 기초 <28. Spring Boot와 Kubernetes를 활용한 클라우드 배포 전략>

TEMA_ 2025. 4. 14. 13:33
반응형

스프링 Spring

28. Spring Boot와 Kubernetes를 활용한 클라우드 배포 전략

 

안녕하세요! 태마입니다.

Spring 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

스프링 Spring

포스팅 시작하겠습니다 :)

 

 

 

 


 

1. 주제 간단 정리

 

1. Kubernetes(K8s)란?

Kubernetes(K8s)는 컨테이너화된 애플리케이션을 자동으로 배포, 확장 및 관리하는 오픈소스 오케스트레이션 플랫폼
Docker와 같은 컨테이너 런타임을 활용하여 애플리케이션을 효율적으로 운영 가능

📌 Kubernetes의 주요 특징

특징설명
컨테이너 오케스트레이션 여러 개의 컨테이너를 효과적으로 관리
자동 스케일링(Auto Scaling) 트래픽에 따라 애플리케이션을 자동 확장
서비스 디스커버리 & 로드 밸런싱 여러 Pod 간 트래픽을 자동으로 분배
자체 복구(Self-Healing) 장애 발생 시 자동으로 컨테이너 재시작
CI/CD 통합 가능 DevOps 환경과 쉽게 연동하여 배포 가능

📌 Kubernetes를 사용하면 "대규모 애플리케이션을 안정적으로 운영하고 자동 확장 가능"


2. Docker vs Kubernetes 비교

Docker는 컨테이너 실행 환경이고, Kubernetes는 컨테이너를 관리하는 오케스트레이션 도구

📌 Docker vs Kubernetes 비교

비교 항목DockerKubernetes
주요 역할 컨테이너 실행 컨테이너 오케스트레이션
확장성 단일 컨테이너 관리 여러 컨테이너를 자동 확장
네트워킹 수동 설정 필요 서비스 디스커버리 자동 지원
자동 복구 지원하지 않음 지원 (장애 발생 시 자동 재시작)
로드 밸런싱 기본 기능 없음 내장된 로드 밸런싱 기능 제공

📌 Kubernetes를 활용하면 "컨테이너 기반 애플리케이션을 자동으로 운영 가능"


✅ 여기까지 Kubernetes의 개념과 Docker와의 차이를 배웠습니다!
👉 "그렇다면, Spring Boot 애플리케이션을 Kubernetes에서 어떻게 배포할까?"
✅ 2부에서 Spring Boot를 컨테이너화하고, Kubernetes에서 배포하는 방법을 배워봅시다!

반응형

 


 

2. 상세 주제 정리

 

1. Spring Boot 애플리케이션을 Docker 컨테이너로 만들기

Kubernetes에서 실행하려면 먼저 Spring Boot 애플리케이션을 Docker 컨테이너로 패키징해야 함

📌 1️⃣ Dockerfile 작성 (Dockerfile)

FROM openjdk:17
WORKDIR /app
COPY target/myapp.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

Spring Boot 애플리케이션을 openjdk:17 기반 컨테이너로 실행

📌 2️⃣ Docker 이미지 빌드 및 실행

# Docker 이미지 빌드
$ docker build -t myapp .

# Docker 컨테이너 실행
$ docker run -p 8080:8080 myapp

docker build로 이미지를 생성하고, docker run으로 컨테이너 실행

📌 Docker를 활용하면 "Spring Boot 애플리케이션을 손쉽게 배포 가능"


2. Kubernetes에 Spring Boot 애플리케이션 배포

Kubernetes에서 실행하려면 Deployment 및 Service YAML 파일을 작성해야 함

📌 1️⃣ Deployment 설정 (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myapp:latest
          ports:
            - containerPort: 8080

Kubernetes Deployment는 replicas: 2를 설정하여 2개의 인스턴스를 실행

📌 2️⃣ Service 설정 (service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

LoadBalancer 타입을 사용하여 외부에서 접근 가능하도록 설정

📌 3️⃣ Kubernetes에 배포하기

# Kubernetes 클러스터에 배포
$ kubectl apply -f deployment.yaml
$ kubectl apply -f service.yaml

Kubernetes에 배포 후, 서비스가 자동으로 실행됨

📌 Kubernetes를 활용하면 "Spring Boot 애플리케이션을 손쉽게 확장 및 관리 가능"


3. Kubernetes에서 애플리케이션 자동 확장 (Auto Scaling)

HPA(Horizontal Pod Autoscaler)를 사용하여 트래픽 증가 시 자동으로 확장 가능

📌 HPA 설정 (autoscale.yaml)

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50

CPU 사용률이 50% 이상일 경우 자동으로 확장되도록 설정

📌 HPA 적용 명령어

$ kubectl apply -f autoscale.yaml

트래픽 증가 시 자동으로 Pod를 확장하여 처리량 증가

📌 Kubernetes를 활용하면 "트래픽 변화에 따라 자동으로 확장 가능"


4. Kubernetes에서 애플리케이션 배포 전략

Kubernetes에서는 다양한 배포 전략을 지원하여 무중단 배포 가능

📌 배포 전략 비교

배포 방식설명
Rolling Update 기존 Pod를 점진적으로 교체
Recreate 기존 Pod를 모두 삭제 후 새로운 Pod 생성
Blue-Green Deployment 새로운 버전 배포 후 트래픽 전환
Canary Deployment 일정 비율의 트래픽을 새로운 버전으로 전환

📌 Kubernetes를 활용하면 "무중단 배포 및 빠른 롤백 가능"


✅ 여기까지 Spring Boot를 Kubernetes에서 배포하는 방법을 배웠습니다!
👉 "그렇다면, Spring Cloud 기반 MSA(Microservices) 아키텍처 설계는 어떻게 할까?"
✅ 다음 회차에서 Spring Cloud 기반 MSA(Microservices) 아키텍처 설계를 배워봅시다!

 

 

 

 

 

반응형