개발 일기

[Spring Cloud] Service Discovery를 위한 Spring Cloud Netflix Eureka 본문

Back-End/Spring Cloud + MSA + Kubernetes

[Spring Cloud] Service Discovery를 위한 Spring Cloud Netflix Eureka

개발 일기장 주인 2025. 2. 9. 03:18

https://cloud.spring.io/spring-cloud-netflix/reference/html/#netflix-eureka-client-starter

 

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

쿠버네티스를 도입하려다가 데드라인이 얼마 남지 않기도 했고 처음 MSA를 도입하려고 하다보니 러닝 커브 및 로컬에서 쿠버네티스 환경을 구축하는 것이 쉽지 않은 것 같아 우선 Eureka으로 MVP를 운영하고 나서 다음 달에 Kubernetes로 refactoring하기로 했다.

그래서 우선 Service Discovery를 위한 Spring Cloud Netflix Eureka에 대해서 확실히 알아야 아키텍처를 잘 구성할 수 있을 것 같아 블로그를 작성하게 됐다.

 


마이크로서비스 아키텍처에서는 수많은 서비스들이 서로 통신하며 동작한다.
서비스 간 통신 시 서비스 위치 (포트, 호스트) 가 정적이던 전통적인 아키텍처와는 달리 주소가 동적으로 변화하고 (클라우드 환경, 오토 스케일링, 컨테이너 기반의 배포 등) 서비스 역시 무수히 많은 마이크로서비스에서는 서비스 위치에 대한 관리가 많이 복잡해지게 되는데, 이를 해결하기 위해 Service Registry & Service Discovery Pattern 등장

Service Discovery는 이러한 문제를 해결하기 위해, 서비스들이 동적으로 서로를 찾을 수 있도록 도와주는 메커니즘이다.

서비스 디스커버리(Service Discovery): 클라이언트가 서비스 레지스트리를 통해 필요한 서비스의 위치를 동적으로 조회하는 과정
서비스 레지스트리(Service Registry):
서비스 디스커버리의 핵심 컴포넌트로, 모든 서비스 인스턴스의 위치 정보를 등록하고 관리

Eureka는 넷플릭스(Netflix)에서 개발한 서비스 디스커버리 도구로, Spring Cloud와의 통합을 통해 쉽게 사용!

Spring Cloud Netflix Eureka

Spring Cloud Netflix Eureka는 마이크로서비스 아키텍처에서 서비스 디스커버리(Service Discovery)를 구현하기 위한 라이브러리이다. Eureka는 Netflix에서 개발한 오픈 소스 프로젝트로, Spring Cloud에서 이를 통합하여 사용할 수 있도록 지원한다.

 

Eureka는 서비스 인스턴스의 Registration과 Discovery을 관리하는 Server와 Client로 구성된다.

실제로 Spring Cloud 공식 문서를 보면 `Eureka is the Netflix Service Discovery Server and Client`라고 되어있다.

 

 

  • Eureka Server
    • Eureka는 REST API 기반으로 동작한다. 아래 등록, 조회, 상태 갱신, 제거 각각에 대한 REST API가 존재한다.
    • 서비스 등록(Registration): 마이크로서비스 인스턴스가 시작되면 Eureka Server에 자신의 정보(예: IP 주소, 포트, 상태 페이지 URL 등)를 등록한다.  Service Registry역할
    • 서비스 상태 관리: Eureka Client는 주기적으로 하트비트(heartbeat)를 보내어 자신이 활성 상태임을 알린다. Eureka Server는 이를 통해 서비스 인스턴스의 상태를 추적한다.
    • 서비스 조회(Discovery): 클라이언트(다른 마이크로서비스 또는 API Gateway)는 Eureka Server에 특정 서비스의 인스턴스 목록을 요청할 수 있다.
    • 서비스 제거(Eviction): 일정 시간 동안 하트비트를 받지 못한 서비스 인스턴스는 레지스트리에서 자동으로 제거된다.
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'

 

 

 

  • Eureka Client
    • 아래 dependency가 추가 된 경우
    • 서비스 등록: 마이크로서비스 인스턴스가 시작되면 Eureka Server에 자신의 정보를 등록한다.
    • 서비스 조회: 다른 서비스의 인스턴스 목록을 Eureka Server로부터 조회한다.
    • 하트비트 전송: 주기적으로(기본적으로 30초마다) Eureka Server에 하트비트를 보내어 자신이 활성 상태임을 알다.
    • 로드 밸런싱: Eureka Client는 서비스 인스턴스 목록을 받아 로드 밸런싱을 수행할 수 있다.
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'