[MSA] Spring Cloud

박원준·2026년 3월 19일

MSA

목록 보기
2/9

1️⃣ Spring Cloud란?

Spring Cloud란 마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장입니다. MSA를 쉽게 구현하고 운영할 수 있도록 도움을 줍니다.

쉽게 말해 Spring Cloud는 MSA에서 발생하는 서비스 탐색, 부하 분산, 장애 대응, 설정 관리 등을 해결해주는 도구 모음입니다.

이런 Spring Cloud의 주요 기능은 아래와 같습니다.

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

2️⃣ Spring Cloud 주요 모듈

🔹 서비스 등록 및 디스커버리

  • 서비스 등록 및 디스커버리(Service Registration & Discovery)
    • 서비스 등록: 각 마이크로서비스가 자신의 위치(IP, Port 등)를 디스커버리 서버에 등록하는 과정
    • 서비스 디스커버리: 다른 서비스가 디스커버리 서버를 통해 특정 서비스의 위치 정보를 조회하는 과정
    • 목적: 서비스 간 통신 시 IP/Port를 직접 관리하지 않고, 서비스 이름 기반으로 동적으로 호출하기 위함
  • Eureka
    • 넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리
    • 주요 특징:
      • 서비스 레지스트리 : 모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소
      • 헬스 체크(Health check) : 서비스 인스턴스의 상태를 주기적으로 확인하여 가용성을 보장

🔹 로드 밸런싱

  • 로드밸런싱(Load Balancing)
    • 여러 서비스 인스턴스에 요청을 분산하여 부하를 줄이는 기술
    • 서비스 디스커버리를 통해 조회한 인스턴스 목록 중 하나를 선택하여 호출
  • Ribbon
    • 넷플릭스가 개발한 클라이언트 사이드 로드 밸런서로, 서비스 인스턴스 간의 부하를 분산
    • 주요 특징:
      • 서버 리스트 제공자 : Eureka로부터 서비스 인스턴스 리스트를 제공받아 로드 밸런싱에 사용
      • 로드 밸런싱 알고리즘 : 라온드 로빈, 가중치 기반 등 다양한 로드 밸런싱 알고리즘 지원
      • Failover : 요청 실패 시 다른 인스턴스로 자동 전환

클라이언트 사이드 방식

* 클라이언트 사이드 로드 밸런서란? 클라이언트가 직접 서버를 선택해서 요청 보내는 방식
기존 방식의 경우 Client → Load Balancer → Server1 / Server2 / Server3 이런식으로 로드밸런서(Nginx, AWS ELB)가 중간에서 분산합니다. 이걸 서버 사이드 로드밸런싱이라고 합니다.
하지만 클라이언트 사이드 방식은 아래와 같습니다.

Client(Service A)
   ↓
"Service B 인스턴스 목록 조회 (Eureka)"
   ↓
"내가 직접 선택"
   ↓
Service B-1 호출

👉 즉, 중간 LB 없이 클라이언트가 직접 고릅니다.

  1. 서비스 목록 → Eureka에서 가져옴
  2. 로드밸런싱 → Ribbon/Spring Cloud LoadBalancer가 처리

코드 관점에서 보면

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}
restTemplate.getForObject("http://payment-service/pay", String.class);

payment-service는 실제 URL이 아닙니다.

1. RestTemplate 요청 (http://payment-service/pay)
2. 인터셉터가 가로챔
3. Eureka에서 인스턴스 목록 조회 (payment-service →
								[
								  10.0.0.1:8080,
								  10.0.0.2:8080,
								  10.0.0.3:8080
								])
4. LoadBalancer가 하나 선택 (10.0.0.2:8080)
5. 실제 IP로 변환 (http://10.0.0.2:8080/pay)
6. 요청 실행

하지만 여기서 매 요청마다 Eureka를 호출하는 것이 아닙니다.

[서비스 시작 시]

클라이언트 → Eureka 서버
→ "payment-service 목록 줘"
→ 받아서 로컬 캐시에 저장

--------------------------------

[이후 요청]

RestTemplate 호출
→ 캐시에 있는 인스턴스 목록 사용
→ LoadBalancer 선택
→ 요청

👉 로드밸런싱과 서버 선택은 클라이언트 내부에서 수행되며, 인스턴스 목록은 Eureka로부터 받아와 로컬 캐시에 저장한 뒤 사용합니다.


🔹 서킷 브레이커

  • 서킷 브레이커(Circuit Breaker)
    • 장애가 발생한 서비스 호출을 차단하여 시스템 전체로 장애가 전파되는 것을 방지하는 기술
    • 실패율이 일정 기준을 넘으면 호출을 중단하고 fallback 로직을 수행
    • 일정 시간 후 일부 요청을 통해 서비스 상태를 다시 확인
  • Hystrix
    • 넷플릭스가 개발한 서킷 브레이커 라이브러리로, 서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지
    • 주요 특징:
      • 서킷 브레이커 상태: CLOSED (정상 상태), OPEN (차단 상태), HALF-OPEN (시험 상태)
      • Fallback: 호출 실패 시 대체 로직을 제공하여 시스템 안정성 확보
      • 모니터링: Hystrix Dashboard를 통해 서킷 브레이커 상태 모니터링
  • Resilience4j
    • Resilience4j는 자바 기반의 경량 서킷 브레이커 라이브러리로, 넷플릭스 Hystrix의 대안으로 개발
    • 주요 특징:
      • 서킷 브레이커: 호출 실패를 감지하고 서킷을 열어 추가적인 호출을 차단하여 시스템의 부하를 줄임
      • Fallback : 호출 실패 시 대체 로직을 제공하여 시스템 안정성 유지
      • 타임아웃 설정: 호출의 응답 시간을 설정하여 느린 서비스 호출에 대응할 수 있음
      • 재시도: 재시도 기능을 지원하여 일시적인 네트워크 문제 등에 대응할 수 있음

3️⃣ Spring Cloud 구성 요소의 활용

🔹 API 게이트웨이

클라이언트는 각 서비스의 엔드포인트 대신 API Gateway로 요청을 보내게 되며, 요청을 받은 API Gateway는 설정에 따라 각 엔드포인트로 클라이언트를 대신하여 요청하고, 응답을 받으면 다시 클라이언트에게 전달하는 프록시(proxy) 역할을 합니다.

클라이언트와 직접적으로 요청을 주고받는 것이 API Gateway입니다. 이는 내부 서비스의 아키텍처를 외부에 감추는 캡슐화로도 볼 수 있으며, 정보 은폐의 측면에서 장점으로 적용됩니다.

  • API Gateway
    • 클라이언트의 요청을 단일 진입점에서 받아 내부 서비스로 라우팅하는 컴포넌트
    • 인증/인가, 로깅, CORS 등 공통 기능을 처리
    • 서비스 디스커버리 및 로드밸런싱과 연계하여 동적으로 서비스 호출
  • Zuul
    • 넷플릭스가 개발한 API 게이트웨이로, 모든 서비스 요청을 중앙에서 관리
    • 주요 특징:
      • 라우팅: 요청 URL에 따라 적절한 서비스로 요청 전달
      • 필터: 요청 전후에 다양한 작업을 수행할 수 있는 필터 체인 제공
      • 모니터링: 요청 로그 및 메트릭을 통해 서비스 상태 모니터링 할 수 있음
  • Spring Cloud Gateway
    • 스프링 클라우드에서 제공하는 API 게이트웨이로, MSA에서 필수적인 역할
    • 주요 특징:
      • 루팅 및 필터링: 요청을 받아 특정 서비스로 라우팅하고 필요한 인증 및 권한 부여를 수행
      • 보안: 외부 요청으로부터 애플리케이션을 보호하고, 보안 정책을 적용함
      • 효율성: MSA에서 필요한 요청 처리 및 분산 환경의 관리를 효율적으로 수행

🔹 구성 관리

  • Spring Cloud Config
    • Spring Cloud Config는 분산된 환경에서 중앙 집중식 설정 관리를 제공
    • 주요 특징:
      • Config 서버: 중앙에서 설정 파일을 관리하고 각 서비스에 제공
      • Config 클라이언트: Config 서버에서 설정을 받아서 사용하는 서비스
      • 설정 갱신: 설정 변경 시 서비스 재시작 없이 실시간으로 반영

지금까지 Spring Cloud의 구성요소에 대해 간단하게 알아봤습니다.
다음에는 하나씩 자세하게 소개하겠습니다.

0개의 댓글