본문 바로가기

개발일지/JAVA

Spring Cloud Netflix Eureka 적용

📍  Spring Cloud Netflix Eureka

  • 마이크로서비스 아키텍처(MSA)에서 서비스 디스커버리(Service Discovery) 를 제공하는 도구
  • 마이크로서비스 간의 통신을 쉽게 하기 위한 서비스 레지스트리 (Service Registry) 역할 수행
  • Netflix에서 배포한 오픈 소스
  • Spring Cloud Eureka는 서비스 레지스트리와 서비스 디스커버리를 지원하는 라이브러리이며, Eureka ServerEureka Client로 구성됨
  • 모든 마이크로서비스는 Eureka Server에 자신을 등록하여 관리됨

 

1.  Service DiscoveryService Registry

1-1) Service Discovery

  • 외부에서 다른 어떤 서비스들이 Microservice를 검색하기 위해서 사용. 일종의 전화번호 책
  • client가 load balancer / api gateway에 요청을 하게 되면 필요한 서비스가 어디있는지 알려주는 역할

1-2) Service Registry

  • 각각의 서비스가 자신의 위치(Ip, Port) 정보를 특정 서버에 등록(Registry)하는 작업
  • Eureka Server가 서비스 레지스트리 역할을 수행

 

2.  Eureka Server Eureka Client 

2-1) Eureka Server

  • Service Registry 역할
  • 모든 마이크로서비스가 자신을 등록하고, 다른 서비스의 위치를 조회하는 중앙 서버
  • 모든 Eureka Client에서 레지스트리 정보를 복제하여 사용
  • 30초마다 서비스 목록을 갱신
  • 일정 간격으로 클라이언트의 Heartbeat(상태 확인 신호)를 수신하여 가용성을 관리
  • 일정 횟수 이상 Heartbeat을 받지 못하면 해당 클라이언트를 레지스트리에서 제거
  • 로드 밸런싱 지원: 서비스 이름을 기준으로 탐색하며, 내부적으로 Ribbon을 사용하여 로드 밸런싱 수행

2-2) Eureka Client 

  • Service Discovery 역할
  • 서비스 시작 시 자동으로 Eureka Server에 자신의 정보를 등록
  • 주기적으로 Heartbeat을 전송하여 자신의 가용 상태를 알림
  • Eureka Server에서 다른 서비스의 위치 정보를 조회하여 통신 수행
  • 예시: user-service, order-service 등이 Eureka Client로 동작하며, 필요할 때 서로의 정보를 조회하여 통신

 

📍  Eureka Service Discovery 생성

 

* Dependency - eureka server 추가

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

 

 

* application.yml

server:
  port: 8761

spring:
  application:
    name: discoveryservice

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

eureka.client.serveUrl.defaultZone :

eureka는 여러 instance를 운영할수 있음. 한 개의 Eureka Server가 다운되더라도 Eureka Server에서 정보를 가져올 수 있도록 연동

eureka.client.register-with-eureka :

clientEureka Server에 등록할지를 결정. 기본값이 true이므로 false로 설정

eureka.client. fetch-registry 

Eureka Server에서 주기적으로(기본 30초) 서비스 목록을 가져와 캐싱할지 여부. 기본값이 true이므로 false로 설정

 

 

* DiscoveryserviceApplication.java

package com.example.discoveryservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer             //eureka server로 등록하는 annotation 추가
@SpringBootApplication
public class DiscoveryserviceApplication {

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

 

 

 


나의 ecommerce 프로젝트에서  User Service, Product Service, Order Service를 각각 독립적인 microservice로 운영한다.

클라우드 환경에서는 인스턴스가 동적으로 할당되므로 IP 주소와 포트 정보가 변경될 수 있어 관리가 복잡해지기 때문에 이를 해결하기 위해 Eureka를 사용하여 해결하려고 한다.

 

 

 

 

 

 

 

 

 

 

📚 참고자료

https://cloud.spring.io/spring-cloud-netflix/reference/html/#configuration-properties

 

Spring Cloud Netflix

This project provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations you can quickly enable and configure the common pat

cloud.spring.io

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard

 

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의 | Dowon Lee - 인프런

Dowon Lee | Spring framework의 Spring Cloud 제품군을 이용하여 마이크로서비스 애플리케이션을 개발해 보는 과정입니다. Cloud Native Application으로써의 Spring Cloud를 어떻게 사용하는지, 구성을 어떻게 하는

www.inflearn.com

 

https://tester-1.tistory.com/234

 

[Spring Cloud Netflix Eureka] 기본 개념 정리 및 사용 방법

1. Spring Cloud Netflix Eureka Netflix에서 배포한 오픈 소스입니다. MSA 아키텍쳐를 구성 할 때 Client Side에서 각 서버의 Service를 연동하고 관리하는 것은 한 서버의 서비스 IP 또는, VM IP가 바뀌었을때 마다

tester-1.tistory.com

 

https://velog.io/@korea3611/Spring-BootSpring-Cloud-Netflix-Eureka-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-MSA1

 

[Spring Boot]Spring Cloud Netflix Eureka 서버 만들기-MSA(1)

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)를 수강하면서 작성한 글입니다.REST API를 이용해서 다른 서비스를 호출할 때는 다른 서비스 인스턴스가 있는 곳의 네트워크 정보를 알아

velog.io