개발 무지렁이

[Arch.] 마이크로서비스를 검색하고 동적으로 관리하는 Service Discovery (Spring Cloud Netflix Eureka) 본문

Backend/Architecture

[Arch.] 마이크로서비스를 검색하고 동적으로 관리하는 Service Discovery (Spring Cloud Netflix Eureka)

Gaejirang-e 2023. 10. 10. 10:27

𐂂 Service Discovery
외부에서 마이크로서비스들을 검색하기 위해서 사용되는 개념이다.
컴퓨터 네트워크 환경에서 사용가능한 마이크로서비스위치구성을 자동으로 찾고 식별하는 프로세스를 말한다.
특정 마이크로서비스가 가동되는 '서버의 이름'Key값이 되고,
마이크로서비스'가동되는 위치'Value값이 된다.

마이크로서비스Eureka Server(service discovery)에 자신을 등록한다.
클라이언트특정 마이크로서비스검색하고 싶으면 API Gateway와 같은 서비스를 통해
요청정보Eureka Server에 전달한다.

Eureka Server등록된 마이크로서비스 정보를 조회하여, 클라이언트가 찾고자하는 마이크로서비스를 검색하고
해당 마이크로서비스가 발견되면, 해당 마이크로서비스위치(호스트포트)클라이언트에게 제공한다.

🍩 서비스 식별
: 네트워크상에 존재하는 마이크로서비스고유 식별자를 제공한다.
(클라이언트는 이를 통해 필요한 마이크로서비스식별해 찾을 수 있다.)

🍩 동적 서비스 관리
: 마이크로서비스가 추가되거나 제거되는 경우에도 즉시 업데이트된 정보를 제공한다.
(🧩 확장성, 🧩 유연성)

🍩 로드밸런싱
: 요청을 여러 서버로 분산시키는 로드밸런싱을 수행할 수 있다.
(트래픽균형적으로 분산되고, 서비스의 🧩 가용성과 성능을 향상)

🍩 자동화 및 유연성
: 수동적인 설정 및 관리 작업을 최소화하고, 자동화된 환경에서 마이크로서비스를 관리한다.

⚙ Eureka Server Setting

📜 DiscoveryserviceApplication.java

  @EnableEurekaServer
  @SpringBootApplication
  public class DiscoveryserviceApplication {
      public static void main(String[] args) {
          SpringApplication.run(DiscoveryserviceApplication.class, args);
      }
  }

🔧 application.yml

  server:
      port: 8761

  spring:
      application:
          name: discoveryservice #Eureka MicroService의 고유한 이름(id)

  eureka:
      client:
          register-with-eureka: false # 현재 server를 Eureka Client로 등록하지 않음(Eureka Server이기 때문)
          fetch-registry: false # 현재 server가 Eureka Server로부터 인스턴스들의 정보를 주기적으로 가져올지 여부: 해제(Eureka Server이기 때문)
𖠃 @EnableEurekaClient vs @EnableDiscoveryClient
@EnableEurekaClient
consul, zookeeper와 같은 외부 라이브러리들이 구현되어 있다.
MSAEureka 기반으로 구성하지 않은 경우 권고.

@EnableDiscoveryClient
eureka 관련 라이브러리만 의존하므로
MSAEureka 기반으로 구성할 경우 권고.

⚙ Eureka Client Setting

📜 DiscoveryserviceApplication.java

  @EnableDiscoveryClient
  @SpringBootApplication
  public class DiscoveryserviceApplication {
      public static void main(String[] args) {
          SpringApplication.run(DiscoveryserviceApplication, args);
      ]
  }

🔧 application.yml

  server:
      port: 9001

  spring:
      application:
          name: user-service

  eureka:
      client:
          register-with-eureka: ture
          fetch-registry: ture
          service-url:
              defaultZone: http://127.0.0.1:8761/eureka # 통신할 Eureka Server의 위치를 지정, Eureka Server에 Eureka Client를 등록
Comments