Netflix Eureka는 마이크로서비스 아키텍처(MSA)에서 서비스 디스커버리 기능을 제공하는 오픈 소스 미들웨어입니다.
넷플릭스가 개발하여 Spring Cloud 프로젝트에 기여하였으며, 다양한 서비스의 정보를 저장하고 관리하여 서비스의 위치(예: IP와 포트)를 외부 요청에 맞게 전달해주는 역할을 합니다.
서비스 등록 및 검색: 각 서비스 인스턴스는 Eureka 서버에 자신의 정보를 등록하며, 클라이언트는 이 정보를 바탕으로 서비스 인스턴스에 접근할 수 있습니다.
서비스 상태 모니터링: Eureka 서버는 등록된 서비스의 상태를 주기적으로 확인하고, 상태가 비정상인 경우 서비스 목록에서 제거합니다.
로드 밸런싱: Eureka는 클라이언트 측에서 로드 밸런싱을 지원하여, 여러 서비스 인스턴스 중에서 적절한 인스턴스를 선택할 수 있게 합니다.
Service Discovery는 클라이언트가 서비스의 위치(즉, IP와 PORT)를 알아내어 호출할 수 있도록 서비스 정보를 저장하고 관리하는 기능입니다.
Service Discovery는 두 가지 주요 방식으로 구현됩니다
- 작동 방식: 클라이언트가 직접 서비스 레지스트리(예: Eureka)에서 서비스 위치를 조회하고, 해당 위치로 요청을 보냅니다.
장점
구현이 상대적으로 간단합니다.
클라이언트가 사용 가능한 서비스 목록을 알고 있어 개별적인 로드 밸런싱이 가능합니다.
단점
클라이언트와 서비스 레지스트리 간에 의존성이 발생합니다.
클라이언트에서 서비스 발견 로직을 직접 구현해야 합니다.
Spring Cloud의 각 버전은 특정 Spring Boot 버전과 호환됩니다. Spring Cloud 프로젝트의 문서에서 지원되는 Spring Boot 버전을 확인하고, 이에 맞는 버전을 사용하는 것이 중요합니다.
공식 문서는 Spring Cloud의 버전 호환성 문서에서 확인할 수 있습니다.
1. 프로젝트 생성: Spring Initializ를 통해 Maven 프로젝트로 Spring Boot 프로젝트를 생성합니다.
2. 버전 선택: Spring Cloud 버전 2020.0을 사용할 경우, Spring Boot 버전 2.5.x를 선택합니다.
3. 의존성 추가: spring-cloud-starter-netflix-eureka-server 의존성을 추가합니다.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
client:
register-with-eureka: false
fetch-registry: false
server:
wait-time-in-ms-when-sync-empty: 0
4. Peer Awareness 설정
- 여러 개의 Eureka 서버 인스턴스가 서로의 정보를 공유하게 하려면 다음과 같이 설정합니다.
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
client:
register-with-eureka: false
fetch-registry: false
server:
wait-time-in-ms-when-sync-empty: 0
### 4.3 Eureka Client 설정
1. 의존성 추가
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
```
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
### 4.4 애플리케이션 등록 확인
- **서버에서 등록된 애플리케이션 확인:** Eureka 서버의 대시보드에서 등록된 애플리케이션 정보를 확인할 수 있습니다.
기본적으로 http://localhost:8761에서 접근할 수 있습니다.
- **애플리케이션 세부정보 확인:** /eureka/apps 엔드포인트를 통해 등록된 애플리케이션의 세부정보를 조회할 수 있습니다.
### 추가
- **Eureka 서버의 상태 관리:** Eureka 서버는 기본적으로 상태를 메모리에 저장하므로, 서버 재시작 시 상태가 손실될 수 있습니다.
이를 보완하기 위해 외부 데이터베이스와의 연동이나, 스냅샷 저장, 복제 설정 등을 고려할 수 있습니다.
- **서비스 인스턴스의 건강 상태:** 서비스 인스턴스의 건강 상태를 모니터링하고, 상태에 따라 적절히 서비스 레지스트리에서 제거하는 등의 추가적인 구성도 필요할 수 있습니다.