스프링 클라우드(Spring Cloud)는
스프링 프레임워크 기반의 클라우드 네이티브 애플리케이션을 개발하기 위한 프로젝트입니다.
스프링 클라우드는 분산 시스템에서 필요한 다양한 기능들을 추상화하여 제공하고 있으며, 마이크로서비스 아키텍처를 구현할 때 유용하게 사용됩니다.
<스프링 클라우드 아키텍처>
출처 스프링 공식 문서
스프링 클라우드는 다음과 같은 기능들을 제공합니다.
서비스 디스커버리(Service Discovery): 서비스 디스커버리는 마이크로서비스 환경에서 서비스를 검색하고 호출하기 위한 기능입니다. 스프링 클라우드는 Netflix OSS의 Eureka, Apache ZooKeeper, Consul 등 다양한 서비스 디스커버리 툴과 통합되어 있습니다.
API 게이트웨이(API Gateway): API 게이트웨이는 여러 개의 마이크로서비스에서 제공하는 API를 단일 진입점으로 노출시켜 주는 역할을 합니다. 스프링 클라우드는 Netflix OSS의 Zuul, Spring Cloud Gateway 등 다양한 API 게이트웨이를 제공합니다.
분산 설정(Distributed Configuration): 분산 설정은 마이크로서비스에서 필요한 설정 정보를 중앙에서 관리하고, 변경사항을 런타임 중에 적용할 수 있는 기능입니다. 스프링 클라우드는 분산 환경에서의 설정 관리를 위한 Spring Cloud Config를 제공합니다.
분산 추적(Distributed Tracing): 분산 추적은 분산 시스템에서의 트랜잭션 추적을 위한 기능입니다. 스프링 클라우드는 분산 추적을 위한 Spring Cloud Sleuth와 Zipkin을 제공합니다.
로드 밸런싱(Load Balancing): 로드 밸런싱은 여러 개의 인스턴스에서 제공되는 서비스를 균등하게 분산시켜 주는 기능입니다. 스프링 클라우드는 Ribbon을 사용한 로드 밸런싱을 제공합니다.
회로 차단기(Circuit Breaker): 회로 차단기는 마이크로서비스에서 일시적으로 문제가 발생하여 서비스가 다운될 때, 다운된 서비스에 대한 요청을 차단하고 다른 대체 서비스를 호출하는 기능입니다. 스프링 클라우드는 Netflix OSS의 Hystrix를 사용한 회로 차단기를 제공합니다.
위와 같은 기능을 제공하는 스프링 클라우드는 마이크로서비스 아키텍처에서 필수적 Spring Cloud는
분산 시스템을 구축하고 운영하기 위한 일련의 프레임워크와 라이브러리를 제공하는 오픈 소스 프로젝트입니다. Spring Cloud는 여러 마이크로서비스를 각각의 독립적인 애플리케이션으로 개발하고, 이러한 애플리케이션들을 효과적으로 관리하고 운영하기 위한 여러 가지 기능을 제공합니다.
Spring Cloud는 Netflix OSS 프로젝트에서 시작한 것으로, Eureka, Ribbon, Hystrix, Zuul 등 다양한 서비스를 포함하고 있습니다.
이러한 Spring Cloud의 기능들은 분산 시스템에서 필요한 기능들을 효과적으로 제공하며, 마이크로서비스 아키텍처의 개발 및 운영을 더욱 쉽고 편리하게 만듭니다.
Spring Cloud는 Spring Boot와 밀접하게 연관되어 있어서, Spring Boot를 기반으로 하는 애플리케이션에서 Spring Cloud 기능을 쉽게 활용할 수 있습니다. Spring Cloud는 Netflix OSS와 함께 Spring 프레임워크의 강력한 개발 생태계를 구성하고 있습니다.
더 이해하기 쉽게 설명하자면
Spring Cloud Config는 중앙 집중식으로 애플리케이션의 설정 정보를 관리할 수 있도록 해주는 프레임워크입니다.
이를 통해, 애플리케이션의 설정 정보를 손쉽게 수정하고 배포할 수 있습니다.
Config 서버는 Git, Subversion, Vault 등 다양한 백엔드를 지원하며,
애플리케이션의 환경마다 다른 설정 정보를 저장하고 관리할 수 있습니다.
Spring Cloud Gateway는 API 게이트웨이 역할을 합니다.
API 게이트웨이는 클라이언트의 요청을 받아서 애플리케이션으로 전달하고,
애플리케이션의 응답을 클라이언트에게 반환합니다.
Gateway를 사용하면, 여러 개의 서비스를 하나의 엔드포인트로 노출하거나, 요청의 라우팅, 필터링, 트래픽 제어 등을 수행할 수 있습니다.
Gateway는 이를 위해 다양한 라우팅 방식을 제공합니다.
예를 들어, URI, Hostname, Path, Query parameter 등을 이용한 라우팅 방식이 있습니다.
Spring Cloud Discovery는 서비스 디스커버리 역할을 합니다.
서비스 디스커버리란, 분산 시스템에서 서비스 인스턴스의 위치와 상태를 검색하고 사용할 수 있는 기능을 의미합니다.
Discovery를 사용하면, 서비스 인스턴스의 위치와 상태를 추적하고, 클라이언트가 서비스 인스턴스를 검색하고 사용할 수 있습니다.
이를 위해 Discovery 클라이언트는 Eureka, Consul, Zookeeper 등 다양한 백엔드를 지원하며, 서비스 인스턴스의 상태를 추적하고, 이를 Config 서버에 등록하여 동적으로 구성 정보를 업데이트할 수 있습니다.
이들 프레임워크를 함께 사용하면,
Config 서버에서 구성 정보를 가져와서 Gateway를 구성하고, Discovery를 사용하여 서비스 인스턴스를 검색하여 Gateway에 등록할 수 있습니다.
이를 통해, 여러 개의 서비스 인스턴스를 투명하게 제공하고, 높은 가용성과 확장성을 보장할 수 있습니다.
예를 들어, Config 서버에서 포트 정보를 가져와서 Gateway의 라우팅 규칙을 동적으로 업데이트하거나,
Discovery를 사용하여 서비스 인스턴스의 상태를 추적하여 Gateway의 로드밸런싱 규칙을 동적으로 업데이트할 수 있습니다.
감사합니다.😀
관련 Doc.
https://spring.io/projects/spring-cloud
https://github.com/spring-cloud
2023.11.23 추가
읽어볼만 한 글
전 GitHub CTO, "지난 10년간 가장 큰 아키텍처 실수는 풀 마이크로서비스로 전환한 것
https://news.hada.io/topic?id=7839
스프링 클라우드 유레카,콘픽,게이트웨이 스켈레톤코드
https://github.com/DongJu-Na/spring-cloud-sample