📍 Spring Cloud Netflix Eureka
- 마이크로서비스 아키텍처(MSA)에서 서비스 디스커버리(Service Discovery) 를 제공하는 도구
- 마이크로서비스 간의 통신을 쉽게 하기 위한 서비스 레지스트리 (Service Registry) 역할 수행
- Netflix에서 배포한 오픈 소스
- Spring Cloud Eureka는 서비스 레지스트리와 서비스 디스커버리를 지원하는 라이브러리이며, Eureka Server와 Eureka Client로 구성됨
- 모든 마이크로서비스는 Eureka Server에 자신을 등록하여 관리됨
1. Service Discovery 와 Service 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 :
client를 Eureka 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
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
[Spring Boot]Spring Cloud Netflix Eureka 서버 만들기-MSA(1)
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)를 수강하면서 작성한 글입니다.REST API를 이용해서 다른 서비스를 호출할 때는 다른 서비스 인스턴스가 있는 곳의 네트워크 정보를 알아
velog.io
'개발일지 > JAVA' 카테고리의 다른 글
API Gateway & Spring Cloud Gateway (0) | 2025.02.06 |
---|---|
(항해99) Java 문법 종합반 5주차 정리 (0) | 2023.06.15 |
(항해99) Java 문법 종합반 4주차 정리 (0) | 2023.06.12 |
(항해99) Java 문법 종합반 3주차 정리(1) (0) | 2023.05.30 |
(항해99)Java 문법 종합반 2주차 정리(2) (0) | 2023.05.24 |