[Spring-cloud] SpringBoot MSA를 위한 Eureka

Eureka란?

Msa에서 Eureka는 마이크로서비스 아키텍처(MSA)에서 중요한 역할을 하는 서비스 디스커버리 서버이다. 쉽게 말해서, 각 마이크로서비스가 서로를 찾고 통신할 수 있도록 도와주는 전화번호부 같은 역할을 한다.
내가 이해한 바로는, 마이크로서비스는 독립적으로 배포되고 실행되기 때문에, 각 서비스의 위치(IP 주소나 포트 번호)가 동적으로 변할 수 있다. 이때 Eureka가 각 서비스의 위치 정보를 중앙에서 관리해준다.
서비스가 시작될 때 Eureka에 자신을 등록하고, 다른 서비스가 필요할 때 Eureka를 통해 위치 정보를 얻는 방식이다.
이렇게 하면 서비스 간의 통신이 유연해지고, 새로운 서비스가 추가되거나 기존 서비스가 이동해도 쉽게 대응할 수 있다. Eureka는 Netflix에서 개발한 오픈 소스 프로젝트로, Spring Cloud Netflix에서 많이 사용하고 있다.

Eureka 서버

Eureka 서버 의존성

스프링부트기준으로 Eureka 의존성을 추가한다.

img.png

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);
    }

}

기동 시켜서 확인해 보자

img_1.png

Eureka Client

Eureka Client 의존성

img_2.png

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값을 상기와 같이 고유 값으로 설정해 인스턴스 중복을 피할 수 있다.

© 2023 Lee. All rights reserved.