2024. 9. 9. 22:15ㆍ스프링 클라우드
2024/09/09
※ Spring Cloud란?

▶ Spring Cloud 개요
● 정의
○ 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
▶ Spring Cloud 주요 모듈
1️⃣ 서비스 등록 및 디스커버리
📍 Eureka
넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리
● 주요 특징
○ 서비스 레지스트리 : 모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소
○ 헬스 체크(Health check) : 서비스 인스턴스의 상태를 주기적으로 확인하여 가용성을 보장
2️⃣ 로드 밸런싱
📍 Ribbon
넷플릭스가 개발한 클라이언트 사이드 로드 밸런서로, 서비스 인스턴스 간의 부하를 분산
● 주요 특징
○ 서버 리스트 제공자 : Eureka로부터 서비스 인스턴스 리스트를 제공받아 로드 밸런싱에 사용
○ 로드밸런싱 알고리즘 : 라운드 로빈, 가중치 기반 등 다양한 로드 밸런싱 알고리즘 지원
○ Failover : 요청 실패 시 다른 인스턴스로 자동 전환
3️⃣ 서킷 브레이커
📍 Hystrix
넷플릭스가 개발한 서킷 브레이커 라이브러리로, 서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지
● 주요 특징
○ 서킷 브레이커 상태 : 클로즈드, 오픈, 하프-오픈 상태를 통해 호출 실패를 관리
○ Failback : 호출 실패 시 대체 로직을 제공하여 시스템 안정성 확보
○ 모니터링 : Hystrix Dashboard를 통해 서킷 브레이커 상태 모니터링
📍 Resilience4j
Resilience4j는 자바 기반의 경량 서킷 브레이커 라이브러리로, 넷플릭스 Hystrix의 대안으로 개발
● 주요 기능
○ 서킷 브레이커 : 호출 실패를 감지하고 서킷을 열어 추가적인 호출을 차단하여 시스템의 부하를 줄임
○ Failback : 호출 실패 시 대체 로직을 실행하여 시스템의 안정성을 유지
○ 타임아웃 설정 : 호출의 응답 시간을 설정하여 느린 서비스 호출에 대응할 수 있음
○ 재시도 : 재시도 기능을 지원하여 일시적인 네트워크 문제 등에 대응할 수 있음
▶ Spring Cloud 구성 요소의 활용
1️⃣ API 게이트웨이
📍 Zuul
넷플릭스가 개발한 API 게이트웨이로, 모든 서비스 요청을 중앙에서 관리
● 주요 특징
○ 라우팅 : 요청 URL에 따라 적절한 서비스로 요청 전달
○ 필터 : 요청 전후에 다양한 작업을 수행할 수 있는 필터 체인 제공
○ 모니터링 : 요청 로그 및 메트릭을 통해 서비스 상태 모니터링 할 수 있음
📍 Cloud Gateway
클라우드 게이트웨이는 스프링 클라우드에서 제공하는 API 게이트웨이로, 마이크로서비스 아키텍처에서 필수적인 역할
● 주요 특징
○ 루팅 및 필터링 : 요청을 받아 특정 서비스로 라우팅하고 필요한 인증 및 권한 부여를 수행
○ 보안 : 외부 요청으로부터 애플리케이션을 보호하고, 보안 정책을 적용함
○ 효율성 : 마이크로서비스 아키텍처에서 필요한 요청 처리 및 분산 환경의 관리를 효율적으로 수행
2️⃣ 구성 관리
📍 Spring Cloud Config
Spring Cloud Config는 분산된 환경에서 중앙 집중식 설정 관리를 제공
● 주요 특징
○ Config 서버 : 중앙에서 설정 파일을 관리하고 각 서비스에 제공
○ Config 클라이언트 : Config 서버에서 설정을 받아서 사용하는 서비스
○ 설정 갱신 : 설정 변경 시 서비스 재시작 없이 실시간으로 반영
▶ Spring Cloud의 적용 사례

● 배경
○ 넷플릭스는 2000년대 후반 데이터 베이스 장애를 통해 심각한 서비스 장애를 겪게 된다.
○ 사용자가 급격히 증가 함에 따라 기존 모놀리틱 아키텍처로는 빠르게 증가하는 트래픽과 사용자 요구를 감당하기 어려워졌다.
○ 또한 신뢰성 높고 수평 확장이 가능한 클라우드 시스템으로 이전할 필요성을 느꼈다.
○ 폭발적인 사용자 증가, 빈번한 서비스 장애, 인프라 확장의 어려움, 빠른 기능 배포의 필요성, 클라우드 전환 등의 계기로 인해 MSA 전환이 시작됐다.
● MSA로의 전환 이유
○ 확장성(Scalability) : 넷플릭스는 글로벌 서비스를 제공하며, 수백만 명의 사용자가 동시 접속할 수 있는 인프라가 필요했다.
○ 신뢰성(Reliability) : 한 부분의 장애가 전체 시스템에 영향을 미치지 않도록 해야 했다.
○ 개발 속도(Speed of Development) : 새로운 기능을 빠르게 배포하고, 독립적인 팀이 동시에 작업할 수 있는 환경이 필요했다.
● 전환 과정
○ 서비스 분리 : 넷플릭스는 기존 모놀리식 애플리케이션을 여러 개의 독립적인 마이크로서비스로 분리했다.
○ 자동화 도구 도입 : CI/CD 파이프라인을 구축하여 코드의 빌드, 테스트, 배포 과정을 자동화했다. 이를 통해 개발 속도를 크게 향상시켰다.
○ 자체 도구 개발 : 넷플릭스는 Hystrix, Eureka, Ribbon 등의 도구를 개발하여 서비스 간 통신, 장애 복구, 로드 밸런싱 등을 효율적으로 처리했다.
○ 클라우드 인프라 활용 : AWS와 같은 클라우드 인프라를 활용하여 서비스 확장성을 높였다.
● 결과
○ 향상된 확장성 : 넷플릭스는 MSA 전환 이후 수천 개의 마이크로서비스를 운영하며, 글로벌 사용자 증가에 유연하게 대응할 수 있었다.
○ 높은 가용성 : 서비스 장애 시 다른 서비스에 영향을 미치지 않고 독립적으로 복구할 수 있어, 사용자에게 지속적인 서비스를 제공할 수 있었다.
○ 빠른 배포 주기 : 새로운 기능을 신속하게 개발하고 배포할 수 있어, 사용자 요구에 빠르게 대응할 수 있었다.
'스프링 클라우드' 카테고리의 다른 글
스프링 클라우드 - 컨피그 서버(Spring Cloud Config) (1) | 2024.09.23 |
---|---|
스프링 클라우드 - API 게이트웨이 (8) | 2024.09.13 |