SMALL
Spring Cloud Netflix Eureka
MSA 환경에서는 Service의 Ip, Port 정보가 일정하지 않고 지속적으로 변화할 수 있다.
이러한 환경에서 Service의 정보를 수동으로 입력하고 관리하는 것은 한계가 분명하다.
이를 Service Discovery를 통해 해결할 수 있다.
Eureka의 구성 요소
Service Discovery
- 외부에서 마이크로 서비스의 위치를 찾아주기 위한 기능
Service Registry
- 각각의 서비스가 자신의 위치(Ip, Port) 정보를 특정 버서에 등록(Registry)하는 작업
Eureka 사용 예시
기존에 작성한 포스팅에서 API Gateway를 사용하였다.
(https://joomn11.tistory.com/123)
해당 설정에서 API Gateway의 설정에 각각의 서비스들의 물리적인 정보가 그대로 적혀있다.
이러한 경우 서비스의 물리적 정보가 변경되는 경우 API Gateway도 변경되어야 하는 디펜던시가 생기게 된다.
이러한 상황을 방지하기 위해 Service Discovery를 사용해보자.
Eureka Server
dependency 추가 (build.gradle)
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
}
application.yml 설정
server:
port: 8761
eureka:
client:
register-with-eureka: false
service-url:
default-zone: http://${eureka.instance.hostname}:${server.port}/eureka
fetch-registry: false
instance:
hostname: localhost
Annotation 추가
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
Eureka Client
dependency 추가 (build.gradle)
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}
application.yml 설정
eureka:
instance:
appname: product-service
client:
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
Annotation 추가
@SpringBootApplication
@EnableEurekaClient
public class ProductServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductServiceApplication.class, args);
}
}
API Gateway
위와 같이 Eureka Server, Client를 설정해두면, API Gateway의 설정 정보 중에 물리적인 주소를 하드 코딩한 부분을 수정해 줄 수 있다.
spring:
application:
name: gateway
cloud:
gateway:
routes:
- id: product-service
# uri: http://localhost:8045
uri: lb://PRODUCT-SERVICE
predicates:
- Path=/product/**
- id: cartservice
# uri: http://localhost:8050
uri: lb://CARTSERVICE
predicates:
- Path=/cart/**
LIST
'Spring > spring-cloud' 카테고리의 다른 글
[Spring] Spring Cloud Gateway(SCG) 사용해보기 (0) | 2022.04.12 |
---|---|
[Spring] ActiveMQ - Spring 사용해보기 (0) | 2022.04.10 |
[Spring] Spring Cloud Config-Asymmetric Key Encryption(비대칭키 암호화) (0) | 2022.01.05 |
[Spring] Spring Cloud Config-Symmetric Key Encryption(대칭키 암호화) (0) | 2022.01.03 |
[Spring] Exception 처리(@ControllerAdvice, @ExceptionHandler, @RestControllerAdvice) (0) | 2021.12.29 |