심화/MSA

[Spring Cloud] Spring Cloud 란?

annovation 2025. 10. 24. 12:32

Spring Cloud

 

💡 Spring Cloud 란?

  • MSA 개발을 위해 다양한 도구와 서비스를 제공하는 Spring Framework의 확장
  • 분산 시스템 개발에 필요한 공통 패턴들을 쉽게 구현할 수 있도록 도와주며, MSA를 효과적으로 운영할 수 있는 환경을 제공한다.

💡 주요 기능

  • 서비스 디스커버리 : Eureka, Consul, Zookeeper
  • 로드 밸런싱 : Ribbon, Spring Cloud LoadBalancer
  • 서킷 브레이커 : Hystrix, Resilience4j
  • API 게이트웨이 : Zuul, Spring Cloud Gateway
  • 구성 관리 : Spring Cloud Config
  • 분산 추적 : Spring Cloud Sleuth, Zipkin
  • 메시징 : Spring Cloud Stream

Spring Cloud 주요 기능 사용 예시

 

Spring Cloud의 각 주요 기능들이 실제로 어떻게 동작하는지 전자상거래 주문 시스템을 통해 살펴보자

 

💡 전자상거래 주문 시스템 예시

 

🔎 시나리오

 

고객이 상품을 주문하면 다음과 같은 처리가 필요하다.

  • 주문 정보 확인
  • 상품 정보 조회 및 재고 확인
  • 주문한 고객 정보 확인

이를 MSA로 구성하면 Order(주문), Product(상품), User(사용자) 세 개의 독립적인 애플리케이션으로 분리된다.

 

1) 로드 밸런싱 - Ribbon

 

이 애플리케이션을 통해서 주문을 처리한다고 하면, 가장 먼저 각 서비스 간의 통신이 필요하다.

주문이 들어오면 누가 어떤 상품을 주문했는지 상품(Product)을 호출해야 하고, 어떤 유저가 주문했는지 유저(User)를 호출해야 한다.

 

요청이 많아져서 애플리케이션을 하나만 관리할 수 없는 상태가 된다면?

  • Ribbon이 어떤 상품이랑 연결되어야 하는지를 컨트롤한다.
  • 실제 호출은 Feign Clinet를 통해서 한다.

2) 서비스 디스커버리 - Eureka

 

주문이 들어오면, Order가 Product를 호출할지 User를 호출할지 알아야한다.

각 마이크로서비스가 서로를 찾기 위해서는 서비스의 위치(Host, Port) 정보가 필요하다. 이걸 관리하기 위해 Eureka 서버를 만들어 준다.

각 서비스의 정보를 Eureka 서버에 저장해주고, 원하는 서비스를 호출하고자 할 때 사용할 수 있다.

서비스 디스커버리 - Eureka

  • Order, Product, User와 같은 모든 마이크로서비스는 Eureka Client가 된다.
  • Eureka Client는 실행 시 자신의 Host/Port 정보를 Eureka Server에 등록하고, 주기적으로 자신의 상태(Health)를 알리는 Heartbeat를 보낸다.
  • 다른 서비스를 호출해야 할 때는 Eureka Server에서 해당 서비스의 현재 위치 정보를 조회하여 사용한다.

3) API 게이트웨이

 

Order, Product, User를 서비스를 각각 호출할 때마다 다른 Host로 호출하는 번거로움을 해결하기 위해 API 게이트웨이를 모든 서비스의 앞단에 세운다.

API 게이트웨이

  • /order, /product, /user 등의 엔드포인트를 호출하면, API 게이트웨이가 엔드포인트를 보고 알맞은 서비스 쪽으로 요청을 전달(라우팅) 해준다.
  • API 게이트웨이 Filter에서 로그인한 유저인지 체크하거나 인증/인가 등의 보안 및 필터링 작업을 처리할 수 있다.

4) 서킷 브레이커 - Resilience4j

한 서비스(ex. Product)에 오류가 발생하거나 응답이 지연될 때, 이 오류가 전체 시스템으로 확산되는 것을 방지하기 위해 서킷 브레이커 패턴을 적용한다.

서킷 브레이커 - Resilience4j

  • 오류 상황에서는 서킷 브레이커인 Resilience4j를 통해 에러 처리를 한다.
  • Resilience4j는 호출 실패를 감지하여 서킷을 열어 추가 호출을 차단함으로써 시스템의 부하를 줄이고, 실패 시 대체 로직인 Failback을 실행하여 안정성을 유지한다.

5) 구성 관리 - Spring Cloud Config

 

각 애플리케이션의 yml 파일과 같은 설정 정보를 개별적으로 관리하는 대신, 중앙에서 효율적으로 관리하기 위해 Config 서버를 만든다.

  • Config 서버에 모든 설정 파일을 저장하고, 각 서비스(Config 클라이언트)는 Config 서버에서 설정을 받아 사용한다.
  • 설정 변경 시 서비스 재시작 없이 실시간으로 반영하는 설정 갱신 기능도 지원한다.

6) 분산 추적 - Zipkin

 

MSA 환경에서는 여러 서비스가 순차적 또는 병렬적으로 호출되므로, 요청이 들어왔을 때 어떻게 각 서비스들이 호출되고 응답 시간이 얼마나 걸리는지 확인하기 어렵다.

 

ex. Order -> Product -> User

  • 분산 추적을 통해서 요청의 전체 흐름을 모니터링하고 확인할 수 있다.
  • 서비스 호출의 전체적인 과정을 파악하고 병목 구간을 찾을 수 있다.

참고 자료

https://www.cncf.co.kr/blog/spring-cloud-intro/

 

Spring Cloud 란 무엇인가요? MSA 필수 기술 구현

Spring Cloud 는 MSA(마이크로서비스 아키텍처) 구축을 위한 핵심 프레임워크입니다. 서비스 디스커버리(Eureka), 분산 구성(Config Server), API Gateway, 서킷 브레이커(Resilience4J) 등을 제공합니다.

www.cncf.co.kr