[SPRING BOOT] 스프링 클라우드(Spring Cloud)
개요
Spring Cloud는 분산 시스템 개발에 필요한 구성 관리, 서비스 등록 및 발견, 라우팅, 로드 밸런싱, 서킷 브레이커, 분산 메시징 등의 기능을 제공합니다. Spring Cloud는 마이크로서비스 아키텍처를 위한 다양한 도구와 기능을 제공하여 애플리케이션 개발과 운영을 단순화합니다.
구성 요소
Spring Cloud Config : 분산 시스템을 위한 중앙 집중식 구성 관리 도구입니다.
Spring Cloud Netflix : 넷플릭스 OSS 도구를 Spring Boot와 통합합니다. Eureka, Hystrix, Ribbon, Zuul 등이 포함됩니다.
Spring Cloud Gateway : API 게이트웨이로, 라우팅과 필터링 기능을 제공합니다.
Spring Cloud Sleuth : 분산 추적을 위한 도구로, Zipkin과 통합하여 사용됩니다.
Spring Cloud Stream : 분산 메시징을 지원하는 프레임워크입니다.
Config 설정
서버역할 프로젝트의 Main method에 Annotation을 추가합니다.
ConfigServerApplication.java
package com.example.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
application.properties
server.port=8888
spring.cloud.config.server.git.uri=https://github.com/your-repo/config-repo
클라이언트 역할 프로젝트의 Main method에 Annotation을 추가합니다.
ConfigClientApplication.java
package com.example.configclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.client.ConfigClientAutoConfiguration;
import org.springframework.cloud.context.config.annotation.RefreshScope;
@SpringBootApplication
@RefreshScope
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
bootstrap.properties
spring.application.name=config-client
spring.cloud.config.uri=http://localhost:8888
Eureka 서버 설정
Eureka를 사용하여 서비스 등록 및 발견을 관리합니다.
EurekaServerApplication.java
package com.example.eurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
application.properties
spring.application.name=eureka-server
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
Hystrix를 통한 서킷 브레이커 설정
Hystrix를 사용하여 서킷 브레이커 패턴을 구현합니다.
HystrixDemoApplication.java
package com.example.hystrixdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@SpringBootApplication
@EnableHystrix
public class HystrixDemoApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDemoApplication.class, args);
}
}
DemoService.java
package com.example.hystrixdemo;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.stereotype.Service;
@Service
public class DemoService {
@HystrixCommand(fallbackMethod = "fallbackMethod")
public String serviceMethod() {
// 호출되는 서비스 로직
return "Service Response";
}
public String fallbackMethod() {
return "Fallback Response";
}
}
Spring Cloud Gateway 설정
Spring Cloud Gateway를 사용하여 API 게이트웨이를 설정합니다.
GatewayApplication.java
package com.example.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("path_route", r -> r.path("/get")
.uri("http://httpbin.org"))
.build();
}
}
application.properties
spring.cloud.gateway.routes[0].id=example-route
spring.cloud.gateway.routes[0].uri=http://httpbin.org:80
spring.cloud.gateway.routes[0].predicates[0]=Path=/get
Spring Cloud Sleuth 및 Zipkin 설정
Spring Cloud Sleuth와 Zipkin을 사용하여 분산 추적을 설정합니다.
SluethDemoApplication.java
package com.example.sleuthdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.sleuth.zipkin2.ZipkinAutoConfiguration;
@SpringBootApplication(exclude = ZipkinAutoConfiguration.class)
public class SleuthDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SleuthDemoApplication.class, args);
}
}
application.properties
spring.zipkin.baseUrl=http://localhost:9411
spring.sleuth.sampler.probability=1.0
설정된 eureka, hystrix, sleuth 에 대한 설명은 아래 글을 참고해주세요. :D
[SPRING] 유레카(Eureka)
개요Eureka는 Netflix가 개발한 서비스 등록 및 발견 도구로, 마이크로서비스 아키텍처에서 서비스 인스턴스들을 등록하고, 이들을 다른 서비스들이 발견할 수 있도록 돕는 역할을 합니다. 주로 클
many.tistory.com
[SPRING] Hystrix
개요Hystrix는 Netflix가 개발한 라이브러리로, 분산 시스템에서 서킷 브레이커 패턴을 구현하여 시스템의 복원력을 높입니다. Hystrix는 마이크로서비스 간의 의존성에서 발생할 수 있는 장애 전파
many.tistory.com
[SPRING] Sleuth
개요Spring Cloud Sleuth는 분산 시스템에서 트랜잭션을 추적하고, 각 서비스 간의 요청을 모니터링하는 도구입니다. Sleuth는 각 서비스 호출에 고유한 트레이스 ID와 스팬 ID를 추가하여 분산 추적을
many.tistory.com
문의사항이나 피드백은 댓글로 남겨주세요.