
마이크로 서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리하고 찾아주는 기능
spring-cloud-starter-netflix-eureka-client 의존성 추가spring: application: name 지정 되어있어야 함
Eureka ServerEureka Discovery Client + Spring Web@EnableEurekaServerEureka-clientOpenFeign@EnableFeignClientsOrder 서비스가 Product 서비스 호출하여 상품 정보 가져옴
Order 서비스 인스턴스 1 / Product 서비스 인스턴스 3
- Order 서비스 실행 : Eureka 서버에서 Product 서비스 인스턴스 목록 가져옴
- Product 서비스 호출 : FeignClient를 사용하여 호출
- Ribbon을 통한 로드밸런싱 : FeignClient는 Ribbon을 통해 3개의 Product 인스턴스 중 하나를 선택하여 호출, RR 알고리즘을 사용하여 요청을 순차적으로 분배
- 응답 처리 : 선택된 Product 인스턴스에서 응답을 받아 Order서비스에 반환, 최종적으로 클라이언트에 응답


마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴
Resilience4j 의존성은 Srping starter에서 추가 X
dependencies { implementation 'io.github.resilience4j:resilience4j-spring-boot3:2.2.0' implementation 'org.springframework.boot:spring-boot-starter-aop' }
- 스프링 스타터에서 제공하는 Resilience4j에는 추상화 계층을 포함
- 실제 구현체가 포함되어있지 않음, 추상화 계층에 맞춰 구현체를 만들어야 함
외부 서비스 호출 실패 시 대체 로직을 제공하는 메서드
@Service
public class MyService {
@CircuitBreaker(name = "myService", fallbackMethod = "fallbackMethod")
public String myMethod() {
// 외부 서비스 호출
return externalService.call();
}
public String fallbackMethod(Throwable t) {
return "Fallback response";
}
}
Spring Boot ActuatorPrometheusimplementation 'io.github.resilience4j:resilience4j-spring-boot3:2.2.0'implementation 'org.springframework.boot:spring-boot-starter-aop'
클라이언트 요청을 받아 백엔드 서비스로 라우팅하고 다양한 부가 기능을 제공하는 중간 서버
application.yml
spring:
cloud:
gateway:
discovery:
locator:
enabled: true # 서비스 디스커버리를 통해 동적으로 라우트를 생성하도록 설정
routes:
- id: users-service # 라우트 식별자
uri: lb://users-service # 'users-service'라는 이름으로 로드 밸런싱된 서비스로 라우팅
predicates:
- Path=/users/** # /users/** 경로로 들어오는 요청을 이 라우트로 처리
- id: orders-service # 라우트 식별자
uri: lb://orders-service # 'orders-service'라는 이름으로 로드 밸런싱된 서비스로 라우팅
predicates:
- Path=/orders/** #/orders/** 경로로 들어오는 요청을 이 라우트로 처리
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
GlobalFilter or GatewayFilter 인터페이스 구현 -> filter 메서드 오버라이드
Reactive GatewaySpring Boot ActuatorEureka Discovery Client


