개요
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
문의사항이나 피드백은 댓글로 남겨주세요.
'프로그래밍 언어 > JAVA, SPRING' 카테고리의 다른 글
[SPRING] Hystrix (0) | 2024.07.22 |
---|---|
[SPRING] 유레카(Eureka) (0) | 2024.07.22 |
[SPRING BOOT] DevTools (0) | 2024.07.22 |
[SPRING BOOT] 유효성 검사(Validation) (1) | 2024.07.17 |
[SPRING BOOT] 스케줄링(Scheduling) (0) | 2024.07.17 |