[Spring-cloud] SpringBoot MSA를 위한 Eureka
in Spring on Spring
Eureka란?
Msa에서 Eureka는 마이크로서비스 아키텍처(MSA)에서 중요한 역할을 하는 서비스 디스커버리 서버이다. 쉽게 말해서, 각 마이크로서비스가 서로를 찾고 통신할 수 있도록 도와주는 전화번호부 같은 역할을 한다.
내가 이해한 바로는, 마이크로서비스는 독립적으로 배포되고 실행되기 때문에, 각 서비스의 위치(IP 주소나 포트 번호)가 동적으로 변할 수 있다. 이때 Eureka가 각 서비스의 위치 정보를 중앙에서 관리해준다.
서비스가 시작될 때 Eureka에 자신을 등록하고, 다른 서비스가 필요할 때 Eureka를 통해 위치 정보를 얻는 방식이다.
이렇게 하면 서비스 간의 통신이 유연해지고, 새로운 서비스가 추가되거나 기존 서비스가 이동해도 쉽게 대응할 수 있다. Eureka는 Netflix에서 개발한 오픈 소스 프로젝트로, Spring Cloud Netflix에서 많이 사용하고 있다.
Eureka 서버
Eureka 서버 의존성
스프링부트기준으로 Eureka 의존성을 추가한다.
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
}
yml 설정
server:
port: 8761
spring:
application:
name: discoveryservice
eureka:
client:
register-with-eureka: false
fetch-registry: false
- spring.application.name: discoveryservice: 이 항목은 애플리케이션의 이름을 지정한다. 여기서는 애플리케이션 이름을 discoveryservice로 설정하고 있다. 이 이름은 Eureka 대시보드에서 서비스 목록을 볼 때 사용된다.
- eureka.client.register-with-eureka: false: 이 항목은 현재 애플리케이션이 다른 Eureka 서버에 자신을 등록할지 여부를 설정한다. 여기서는 false로 설정되어 있어서, 이 애플리케이션은 다른 Eureka 서버에 자신을 등록하지 않는다. 이는 주로 Eureka 서버 자체를 설정할 때 사용된다.
- eureka.client.fetch-registry: false: 이 항목은 현재 애플리케이션이 Eureka 서버로부터 레지스트리를 가져올지 여부를 설정한다. 여기서는 false로 설정되어 있어서, 이 애플리케이션은 다른 서비스의 정보를 가져오지 않는다. 역시 Eureka 서버 자체를 설정할 때 사용된다.
SpringBoot Main 설정
@SpringBootApplication
@EnableEurekaServer
public class ServiceDiscoveryApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceDiscoveryApplication.class, args);
}
}
기동 시켜서 확인해 보자
Eureka Client
Eureka Client 의존성
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}
SpringBoot Main 설정
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
yml 설정
server:
port: 0
spring:
application:
name: user-service
eureka:
instance:
instance-id: ${spring.cloud.client.ip-address}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
- port: 0 은 랜덤 포트로 실행시 랜덤하게 포트가 적용 된다. Eureka서버에서 인스턴스의 구분을 위해 인스턴스 ID값을 상기와 같이 고유 값으로 설정해 인스턴스 중복을 피할 수 있다.