Kubernetes/Kubernetes Basics

📌 Monolithic vs. Microservices: Kubernetes가 왜 마이크로서비스와 잘 맞을까?

ygtoken 2025. 3. 2. 20:37
728x90

 

1️⃣ Monolithic 아키텍처란?

 

과거 대부분의 애플리케이션은 모놀리식(Monolithic) 아키텍처로 개발되었습니다.

모놀리식 아키텍처는 모든 기능이 하나의 애플리케이션 내부에서 동작하는 구조를 의미합니다.

 

✅ Monolithic 구조 예시

 

하나의 애플리케이션이 다음과 같은 기능을 포함하고 있다고 가정해 봅시다.

 

📌 쇼핑몰 애플리케이션

+-------------------------+
| 🛒 쇼핑몰 애플리케이션   |
|-------------------------|
| 🔍 상품 검색           |
| 🛍️ 장바구니            |
| 💳 결제 시스템         |
| 📦 주문 관리           |
+-------------------------+

✅ 모든 기능이 하나의 코드베이스에서 동작합니다.

✅ 하나의 배포 파일(예: shoppingmall.jar)로 패키징됩니다.

 

🔴 Monolithic의 문제점

 

모놀리식 아키텍처는 간단한 초기 개발에는 좋지만, 애플리케이션이 커질수록 유지보수와 확장이 어려워집니다.

 

배포가 어렵다

전체 애플리케이션을 한꺼번에 배포해야 합니다.

작은 기능 하나만 수정해도 전체 서비스를 다시 배포해야 합니다.

 

확장이 비효율적이다

특정 기능(예: “결제 시스템”)에만 트래픽이 많아도, 전체 애플리케이션을 함께 확장해야 합니다.

 

유지보수가 복잡하다

코드가 커질수록 개발자 간의 충돌이 많아집니다.

하나의 코드베이스에서 여러 팀이 협업하기 어려워집니다.

 


 

2️⃣ Microservices 아키텍처란?

 

이러한 문제를 해결하기 위해 등장한 것이 마이크로서비스(Microservices) 아키텍처입니다.

마이크로서비스는 각 기능을 독립적인 서비스로 분리하는 방식을 의미합니다.

 

✅ Microservices 구조 예시

 

위의 쇼핑몰 애플리케이션을 마이크로서비스로 변경하면 다음과 같이 구성할 수 있습니다.

 

📌 마이크로서비스 기반 쇼핑몰

+-------------------------+
| 🛒 쇼핑몰 API Gateway   |
|-------------------------|
| ➡️ 상품 검색 서비스      |
| ➡️ 장바구니 서비스      |
| ➡️ 결제 서비스         |
| ➡️ 주문 관리 서비스    |
+-------------------------+

각 기능이 독립적인 서비스로 분리됨

각 서비스는 개별적으로 배포 가능

필요한 서비스만 확장 가능

🟢 Microservices의 장점

 

서비스별 독립적 배포 가능

결제 서비스만 업데이트하고 싶다면?

payment-service만 배포하면 됨!

 

확장이 유연함

트래픽이 많은 “결제 서비스”만 10배 더 확장할 수 있음.

 

팀별 독립적 개발 가능

상품 검색팀, 결제팀, 주문 관리팀이 각자 독립적으로 개발할 수 있음.

 

다양한 기술 스택 사용 가능

검색 서비스는 Elasticsearch + Node.js

결제 서비스는 Spring Boot + MySQL

주문 서비스는 FastAPI + MongoDB

서로 다른 기술을 유연하게 활용 가능!

 


 

3️⃣ Kubernetes가 Microservices와 잘 맞는 이유

 

마이크로서비스는 컨테이너 기반으로 운영될 때 가장 효과적입니다.

그리고 컨테이너 관리를 자동화하는 Kubernetes가 마이크로서비스 아키텍처에 최적화된 플랫폼입니다. 🚀

 

✅ Kubernetes가 Microservices에 적합한 이유

기능설명Kubernetes 역할

독립적 배포 각 서비스별 개별 배포 kubectl apply -f deployment.yml
자동 확장 트래픽이 많은 서비스만 확장 가능 HorizontalPodAutoscaler
로드 밸런싱 서비스 간 네트워크 트래픽 자동 분배 Service 오브젝트
서비스 복구 장애 발생 시 자동으로 컨테이너 재시작 restartPolicy 설정
다양한 기술 사용 언어와 프레임워크 제한 없음 Docker 컨테이너 활용

👉 Kubernetes는 마이크로서비스가 원활하게 운영될 수 있도록 자동화된 인프라를 제공합니다.

 


 

4️⃣ Kubernetes를 활용한 Microservices 배포 예제

 

이제 실제로 마이크로서비스 환경에서 Kubernetes를 활용하는 간단한 예제를 살펴보겠습니다.

 

📌 1. 상품 검색 서비스 (Node.js)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: search-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: search
  template:
    metadata:
      labels:
        app: search
    spec:
      containers:
      - name: search
        image: myrepo/search-service:latest
        ports:
        - containerPort: 3000

✅ 상품 검색 서비스를 3개의 컨테이너(Pod)로 확장

✅ 새로운 기능이 추가되면 검색 서비스만 업데이트 가능

 

📌 2. 서비스 간 통신 (Kubernetes Service)

apiVersion: v1
kind: Service
metadata:
  name: search-service
spec:
  selector:
    app: search
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
  type: ClusterIP

✅ 다른 서비스에서 search-service로 트래픽을 보낼 수 있도록 설정

ClusterIP를 사용해 내부에서만 접근 가능하도록 제한

 

📌 결론: Kubernetes는 Microservices 운영에 최적화된 플랫폼

 

🔥 모놀리식 아키텍처는 유지보수와 확장성이 어려운 반면,

🔥 마이크로서비스 아키텍처는 유연하지만 효율적인 관리가 필요합니다.

🔥 Kubernetes는 마이크로서비스 환경에서 최적의 컨테이너 운영 솔루션을 제공합니다! 🚀

 

✅ Kubernetes를 사용하면?

각 서비스별 독립적인 배포 가능 🏗

자동 확장(Auto-Scaling)으로 트래픽 대응 가능 📈

장애 발생 시 자동 복구(Self-Healing) 지원 🔄

로드 밸런싱을 통해 서비스 간 네트워크 최적화 🌐

 

 

728x90