Spring Cloud는 마이크로서비스 아키텍처(MSA)를 구축하기 위해 Spring 생태계에서 제공하는 클라우드 기반 프레임워크 모음이다.

기존의 Spring Boot가 단일 애플리케이션 개발을 쉽게 만드는 프레임워크라면, Spring Cloud는 여러 개의 서비스를 연결하고 운영하는 문제를 해결하기 위해 만들어졌다.

즉 간단히 말하면

Spring Boot = 서비스 하나 만들기

Spring Cloud = 여러 서비스를 연결하고 운영하기
 

마이크로서비스 환경에서는 서비스가 여러 개로 나뉘기 때문에 다음과 같은 문제가 발생한다.

  • 서비스 간 통신
  • 서비스 위치 탐색
  • 설정 관리
  • 장애 대응
  • 로드 밸런싱
  • API Gateway

Spring Cloud는 이러한 문제를 해결하는 다양한 컴포넌트를 제공한다.


마이크로서비스에서 발생하는 문제

모놀리식 아키텍처에서는 하나의 애플리케이션 안에서 모든 기능이 동작한다.

하지만 MSA에서는 시스템이 여러 서비스로 나뉜다.

예를 들어 전자상거래 시스템을 보면 다음과 같이 나눌 수 있다.

User Service
Order Service
Payment Service
Product Service
 

이때 발생하는 문제는 다음과 같다.

서비스 위치는 어떻게 찾는가?
서비스 장애는 어떻게 처리하는가?
설정은 어떻게 관리하는가?
트래픽은 어떻게 분산하는가?
 

이 문제들을 해결하기 위해 등장한 것이 바로 Spring Cloud이다.


Spring Cloud의 주요 구성 요소

Spring Cloud는 여러 컴포넌트로 구성된 생태계이다. 대표적인 구성 요소는 다음과 같다.

1. Config Server

Config Server는 여러 서비스의 설정 파일을 중앙에서 관리하는 기능이다.

MSA 환경에서는 서비스가 여러 개이기 때문에 각각 설정을 관리하기 어렵다.

Spring Cloud Config를 사용하면 설정을 Git 저장소에서 관리할 수 있다.

예를 들어

application-user.yml
application-order.yml
application-payment.yml
 

이렇게 설정을 중앙에서 관리할 수 있다.


2. Service Discovery

마이크로서비스에서는 서비스의 IP가 계속 바뀐다.

그래서 서비스의 위치를 자동으로 찾는 기능이 필요하다.

대표적인 서비스 디스커버리 도구는 다음과 같다.

  • Eureka
  • Consul
  • Kubernetes Service Discovery

서비스 등록 예시

Order Service 등록
User Service 등록
Payment Service 등록
 

서비스는 서로를 서비스 이름으로 호출할 수 있다.


3. API Gateway

API Gateway는 클라이언트 요청을 각 서비스로 라우팅하는 역할을 한다.

즉 모든 요청이 Gateway를 통해 들어온다.

/api/users → User Service
/api/orders → Order Service
/api/payments → Payment Service
 

Spring Cloud Gateway를 사용하면

  • 인증
  • 로깅
  • 트래픽 제어

같은 기능을 중앙에서 처리할 수 있다.


4. Load Balancing

MSA에서는 동일한 서비스가 여러 개 실행될 수 있다.

Order Service 1
Order Service 2
Order Service 3
 

이때 요청을 균등하게 분산해야 한다.

Spring Cloud에서는 Spring Cloud LoadBalancer를 사용해 트래픽을 분산할 수 있다.


5. Circuit Breaker

마이크로서비스 환경에서는 하나의 서비스 장애가 전체 시스템 장애로 이어질 수 있다.

Order Service → Payment Service 호출
Payment Service 장애 발생
Order Service 전체 장애
 

이를 방지하기 위해 Circuit Breaker 패턴을 사용한다.

대표적인 라이브러리는 다음과 같다.

  • Resilience4j
  • Hystrix (과거)

Circuit Breaker는 장애가 발생하면 호출을 차단하고 대체 응답을 제공한다.


Spring Cloud 아키텍처 예시

Spring Cloud 기반 마이크로서비스 구조는 보통 다음과 같다.

Client

API Gateway

Service Discovery

────────────────────
User Service
Order Service
Payment Service
Product Service
────────────────────

Database
 

여기에 Config Server와 Monitoring 시스템이 추가된다.

 

Spring Cloud의 장점

Spring Cloud를 사용하면 다음과 같은 장점이 있다.

1. 마이크로서비스 구축이 쉬워진다

Spring Boot 기반이라 기존 Spring 개발자가 쉽게 사용할 수 있다.

2. 클라우드 환경에 최적화되어 있다

Docker, Kubernetes 환경에서 쉽게 운영할 수 있다.

3. 서비스 운영 기능을 제공한다

서비스 디스커버리, 로드밸런싱, 설정 관리 등을 제공한다.


Spring Cloud의 단점

하지만 Spring Cloud는 다음과 같은 단점도 존재한다.

1. 시스템 복잡도가 증가한다

MSA 구조 자체가 모놀리식보다 복잡하다.

2. 운영 인프라가 필요하다

Gateway, Config Server, Service Registry 등이 필요하다.

3. Kubernetes와 기능이 일부 겹친다

최근에는 Kubernetes가 많은 기능을 대신한다.


마무리

Spring Cloud는 마이크로서비스 아키텍처를 구축하기 위한 핵심 프레임워크이다.

Spring Boot가 단일 애플리케이션 개발을 쉽게 만든 것처럼, Spring Cloud는 여러 서비스가 협력하는 분산 시스템을 구축하는 문제를 해결한다.

특히 다음과 같은 환경에서 유용하다.

마이크로서비스 아키텍처
클라우드 기반 서비스
대규모 트래픽 시스템
 

Spring Boot 개발자가 MSA 환경으로 확장하려면 반드시 이해해야 하는 기술 중 하나가 바로 Spring Cloud이다.

LIST

+ Recent posts