Spring Cloud 개요(feat. Netflix)

이진일·2026년 4월 13일
post-thumbnail

Spring Cloud란?

Spring Cloud는 마이크로서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장이다. 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

서비스 등록 및 디스커버리

서비스 등록 및 디스커버리에서는 주로 Eureka를 사용한다.
Eureka는 넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리한다.

주요 특징

  • 서비스 레지스트리: 모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소
  • 헬스 체크: 서비스 인스턴스의 상태를 주기적으로 확인하여 가용성 보장

로드 밸런싱

로드 밸런싱은 Ribbon을 많이 사용한다.
Ribbon은 넷플릭스가 개발한 클라이언트 사이드 로드 밸런서로 서비스 인스턴스 간의 부하를 분산한다.

주요 특징

  • 서버 리스트 제공자: Eureka로부터 서비스 인스턴스 리스트를 제공받아 로드 밸런싱에 사용
  • 로드밸런싱 알고리즘: 라운드 로빈, 가중치 기반 등 다양한 로드 밸런싱 알고리즘 지원
  • Failover: 요청 실패 시 다른 인스턴스로 자동 전환

서킷 브레이커

서킷 브레이커는 Hystrix, Resilience4j를 많이 사용한다.
Hystrix는 넷플릭스가 개발한 서킷 브레이커 라이브러리로 서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지한다.

주요 특징

  • 서킷 브레이커 상태: 클로즈드, 오픈, 하프-오픈 상태를 통해 호출 실패를 관리
  • Failback: 호출 실패 시 대체 로직을 제공하여 시스템 안정성 확보
  • 모니터링: Hystrix Dashboar를 통해 서킷 브레이커 상태 모니터링

Resilience4j는 자바 기반의 경량 서킷 브레이커 라이브러리로 넷플릭스 Hystrix의 대안으로 개발되었다.

주요 특징

  • 서킷 브레이커: 호출 실패를 감지하고 서킷을 열어 추가적인 호출을 차단하여 시스템의 부하를 줄임
  • Failover: 호출 실패 시 대체 로직을 실행하여 시스템의 안정성을 유지
  • 타임아웃 설정: 호출의 응답 시간을 설정하여 느린 서비스 호출에 대응할 수 있음
  • 재시도: 재시도 기능을 지원하며 일시적인 네트워크 문제 등에 대응할 수 있음

API 게이트웨이

API 게이트웨이는 Zuul, Cloud Gateway를 주로 사용한다.
Zuul은 넷플릭스가 개발한 API 게이트웨어로 모든 서비스 요청을 중앙에서 관리한다.

주요 특징

  • 라우팅: 요청 URL에 따라 적절한 서비스로 요청 전달
  • 필터: 요청 전후에 다양한 작업을 수행할 수 있는 필터 체인 제공
  • 모니터링: 요청 로그 및 메트릭을 통해 서비스 상태 모니터링 할 수 있음

Cloud Gateway는 스프링 클라우드에서 제공하는 API 게이트웨이로 MSA에서 필수적인 역할을 한다.

주요 특징

  • 루팅 및 필터링: 요청을 받아 특정 서비스로 라우팅하고 필요한 인증 및 권한 부여를 수행
  • 보안: 외부 요청으로부터 애플리케이션을 보호하고, 보안 정책을 적용함
  • 효율성: 마이크로서비스 아키텍처에서 필요한 요청 처리 및 분산 환경의 관리를 효율적으로 수행

구성 관리

구성 관리에서는 Spring Cloud Config를 주로 사용한다.
Spring Cloud Config는 분산된 환경에서 중앙 집중식 설정 관리를 제공한다.

주요 특징

  • Config 서버: 중앙에서 설정 파일을 관리하고 각 서비스에 제공
  • Config 클라이언트: Config 서버에서 설정을 받아서 사용하는 서비스
  • 설정갱신: 설정 변경 시 서비스 재시작 없이 실시간으로 반영

Netflix 이야기

MSA관련 도구들 설명에서 왜 자꾸 Netflix가 언급되는거지? Netflix는 OTT보는거 아닌가??

Netflix와 MSA

넷플릭스는 처음에는 비디오 대여 사업으로 시작했다가 2000년대 중반쯤부터 스트리밍 서비스를 제공하기 시작하면서 사용자가 폭발적으로 증가한다!!

여기서부터 문제가 시작되었는데, 2008년 8월 데이터베이스 장애를 통해 심각한 서비스 장애를 겪게 된다. 당시 넷플릭스는 모놀리틱 아키텍처 기반으로 운영되고 있어서 한 곳에서 문제가 발생하면 서비스 전체에 문제가 생기는 구조였다...

이 장애를 계기로 넷플릭스는 자체 데이터센터 운영의 한계를 느끼고, 안정적인 서비스 제공을 위해 퍼블릭 클라우드인 AWS로 인프라를 이전하기 시작했다. 이후 MSA를 도입하여 특정 서버에 장애가 발생해도 저체 서비스에 영향이 없도록 Cloud-native한 설계 방식으로 변경했다.

넷플릭스는 기존 모놀리틱 구조를 여러 개의 독립적인 마이크로서비스로 분리했고, CI/CD 파이프라인을 구축하여 코드의 빌드, 테스트, 배포 과정을 자동화하여 개발 속도를 크게 향상 시켰다. 또한 AWS와 같은 클라우드 인프라를 활용하여 서비스 확장성을 높였다.

이렇게 MSA로 전환하는 과정에서 넷플릭스는 Hystrix, Eureka, Ribbon 등의 자체 도구를 개발하여 서비스 간 통신, 장애 복구, 로드 밸런싱 등을 효율적으로 처리했다.(이게 진짜 위기를 기회로 인가...)

0개의 댓글