프로그래밍 언어/JAVA, SPRING

[SPRING BOOT] 스프링 클라우드(Spring Cloud)

doomole 2024. 7. 22. 15:31
728x90

개요

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

https://many.tistory.com/98

 

[SPRING] 유레카(Eureka)

개요Eureka는 Netflix가 개발한 서비스 등록 및 발견 도구로, 마이크로서비스 아키텍처에서 서비스 인스턴스들을 등록하고, 이들을 다른 서비스들이 발견할 수 있도록 돕는 역할을 합니다. 주로 클

many.tistory.com

https://many.tistory.com/99

 

[SPRING] Hystrix

개요Hystrix는 Netflix가 개발한 라이브러리로, 분산 시스템에서 서킷 브레이커 패턴을 구현하여 시스템의 복원력을 높입니다. Hystrix는 마이크로서비스 간의 의존성에서 발생할 수 있는 장애 전파

many.tistory.com

https://many.tistory.com/100

 

[SPRING] Sleuth

개요Spring Cloud Sleuth는 분산 시스템에서 트랜잭션을 추적하고, 각 서비스 간의 요청을 모니터링하는 도구입니다. Sleuth는 각 서비스 호출에 고유한 트레이스 ID와 스팬 ID를 추가하여 분산 추적을

many.tistory.com

 

 

문의사항이나 피드백은 댓글로 남겨주세요.

 

 

'프로그래밍 언어 > 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