How to build a cloud-native microservice

2025. 3. 2. 13:00Spring Microservice

☁️ 클라우드 네이티브 마이크로서비스 구축 방법

클라우드 환경에서 확장 가능하고 유지보수하기 쉬운 마이크로서비스를 설계하는 모범 사례를 이해하는 것은 필수적입니다.
이 섹션에서는 Cloud-Native와 Cloud-Ready의 차이
그리고 Twelve-Factor App 원칙을 적용한 마이크로서비스 구축 방법을 설명합니다.

🔹 1. 클라우드 애플리케이션의 유형

클라우드 환경에서 실행되는 애플리케이션은 크게 Cloud-ReadyCloud-Native로 구분됩니다.

✅ 1.1 Cloud-Ready 애플리케이션

  • 원래 온프레미스(사내 서버)에서 실행되던 애플리케이션을 클라우드 환경에서 실행할 수 있도록 변환한 것.
  • 환경별 설정(개발, 테스트, 운영)이 코드에 포함되어 있는 경우가 많음 → 설정을 외부화하여 해결 가능.
  • 배포는 클라우드에서 가능하지만, 확장성과 가용성이 제한될 수 있음.

📌 Cloud-Ready로 전환하기 위한 핵심 조치

  • 환경 변수를 활용하여 설정(Config)을 외부화.
  • 클라우드 환경에서 자동 확장(Auto-Scaling)이 가능하도록 수정.
  • 스토리지 및 데이터베이스를 클라우드 네이티브 서비스(예: AWS RDS, Azure SQL)로 전환.

✅ 1.2 Cloud-Native 애플리케이션

  • 처음부터 클라우드 환경을 고려하여 설계된 애플리케이션.
  • 마이크로서비스 아키텍처를 따르며, 컨테이너, DevOps, 지속적 배포(CD) 등을 활용.
  • 오토스케일링(Auto-Scaling), 장애 복구(Failover), 서비스 디스커버리(Service Discovery) 등의 기능을 갖춤.

📌 Cloud-Native의 4가지 핵심 요소

출처 : Spring Microservices in Action 2nd Edition

 

요소  설명 
DevOps  개발(Development)과 운영(Operations)의 협업을 통해 자동화된 배포 및 운영 관리
Microservices  작고 독립적인 서비스로 분리하여 관리, 서비스 간 낮은 결합도 유지
Continuous Delivery (CD) 자동화된 빌드, 테스트, 배포로 지속적인 변경 적용 가능
Containers  가상머신 대신 Docker, Kubernetes 같은 컨테이너 기반 환경에서 실행

 

📌 Cloud-Native vs Cloud-Ready 비교

특징  Cloud-Ready Cloud-Native
개발 방식 기존 애플리케이션을 클라우드로 전환 처음부터 클라우드 환경을 고려하여 설계
확장성  제한적  오토스케일링 지원
구성 관리 설정이 코드에 포함될 가능성 높음 설정을 환경 변수 또는 중앙 설정 서버(Spring Cloud Config)에서 관리
배포 방식 수동 또는 부분 자동화 CI/CD를 활용한 완전 자동화된 배포

🔹 2. Twelve-Factor App 원칙

마이크로서비스 개발 시, Heroku에서 제안한 Twelve-Factor App 원칙을 따르면 클라우드 환경에서 더욱 안정적이고 확장 가능한 애플리케이션을 구축할 수 있습니다.

출처 : Spring Microservices in Action 2nd Edition

 

📌 Twelve-Factor App의 12가지 원칙

번호 원칙 설명
1 Codebase (코드베이스) 하나의 코드 저장소(Git)에서 여러 환경(개발, 테스트, 운영)으로 배포해야 함.
2 Dependencies (의존성) 모든 의존성을 빌드 도구(Maven, Gradle)에서 명시적으로 선언해야 함.
3 Config (구성) 설정 정보를 코드에서 분리하고 환경 변수 또는 설정 서버를 활용해야 함.
4 Backing Services (외부 서비스) DB, 캐시, 메시지 큐 같은 외부 서비스를 애플리케이션에서 독립적으로 취급.
5 Build, Release, Run (빌드, 배포, 실행) 빌드(코드 컴파일), 릴리즈(설정 적용), 실행(실행 환경 반영)을 분리.
6 Processes (프로세스) 모든 실행 단위를 독립적인 프로세스로 유지해야 함.
7 Port Binding (포트 바인딩) 애플리케이션은 자체적으로 HTTP 서버를 내장하여 실행해야 함.
8 Concurrency (동시성) 애플리케이션을 확장 가능한 프로세스로 설계해야 함.
9 Disposability (일회성) 빠르게 시작하고 정상적으로 종료할 수 있도록 설계해야 함.
10 Dev/Prod Parity (개발/운영 환경 일치) 개발, 스테이징, 운영 환경 간 차이를 최소화해야 함.
11 Logs (로깅) 모든 로그는 이벤트 스트림으로 출력하여 중앙 집중식 로깅 시스템(ELK, Grafana)과 연계해야 함.
12 Admin Processes (관리 프로세스) 유지보수 작업(DB 마이그레이션, 배치 작업 등)은 독립적으로 실행.

 

📌 Twelve-Factor App 원칙을 따르면 다음과 같은 이점을 얻을 수 있음:
✅ 환경 간 일관성 유지 → 개발, 테스트, 운영 환경이 동일한 방식으로 동작
✅ 확장 가능성 → 프로세스를 독립적으로 실행하여 컨테이너 기반 확장 가능
✅ 배포 자동화 → CI/CD 및 DevOps 프로세스와 쉽게 연계

 

📌 결론: Cloud-Native 마이크로서비스를 구축하는 핵심 원칙

1️⃣ Twelve-Factor App 원칙을 준수하여 마이크로서비스를 설계
2️⃣ Cloud-Ready와 Cloud-Native의 차이를 이해하고, 목표에 맞는 구조를 선택
3️⃣ DevOps, CI/CD, 컨테이너 기반 배포 모델을 활용하여 자동화된 운영 환경 구축
4️⃣ 설정(Config)을 외부화하고, 환경 변수 또는 Spring Cloud Config를 활용하여 설정 관리
5️⃣ 마이크로서비스는 개별적으로 배포 가능해야 하며, 독립적으로 실행 가능해야 함

 

🔹 이를 통해 확장 가능하고 유지보수성이 뛰어난 클라우드 네이티브 마이크로서비스를 구축할 수 있습니다! 🚀

'Spring Microservice' 카테고리의 다른 글

Codebase  (0) 2025.03.02
Config  (0) 2025.03.02
Spring Cloud by example  (1) 2025.03.02
What is Spring Cloud?  (0) 2025.03.02
2.Exploring the microservices world with Spring Cloud  (0) 2025.03.02