With AI

Spring Cloud Eureka란?

  • -
반응형

 

Spring Eureka는 Spring Cloud의 구성 요소 중 하나로, 서비스 디스커버리 기능을 제공합니다. 즉, 마이크로서비스 아키텍처에서 서비스들이 서로를 동적으로 인식하고 통신할 수 있도록 도와줍니다. Eureka는 Netflix의 Eureka 서버를 기반으로 하며, 이를 사용하면 마이크로서비스 간의 통신을 효율적으로 관리할 수 있습니다.


Eureka는 두 가지 주요 역할을 합니다:

  1. Eureka 서버 (Service Registry): 클라이언트 서비스가 자신을 등록하고, 다른 서비스의 정보를 검색할 수 있는 중앙 저장소 역할을 합니다.
  2. Eureka 클라이언트 (Service Discovery): 서비스가 Eureka 서버에 자신을 등록하고, 다른 서비스에 대한 정보를 찾기 위해 Eureka 서버에 요청을 보냅니다.

 

  • Eureka Server: 서비스들이 등록될 중앙 서비스 디스커버리 서버입니다. Eureka 서버는 모든 서비스 정보를 관리하며, 클라이언트가 요청할 수 있도록 정보를 제공합니다.
  • Eureka Client: 서비스가 Eureka 서버에 등록되거나, 다른 서비스를 찾을 때 사용되는 클라이언트입니다. 클라이언트는 자신을 Eureka 서버에 등록하고, 다른 서비스들의 정보를 조회할 수 있습니다.

 

Eureka 서버는 Spring Cloud Netflix에 포함되어 있으며, @EnableEurekaServer 어노테이션을 사용하여 활성화합니다.

1. application.yml 설정

server: port: 8761 # Eureka Server 포트 eureka: client: registerWithEureka: false # 이 서버는 클라이언트가 아니므로 false fetchRegistry: false # 다른 서버의 레지스트리를 가져오지 않음 server: waitTimeInMsWhenSyncEmpty: 0 # 초기화 대기 시간 설정

 

2. EurekaServerApplication.java

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

서비스가 Eureka 서버에 자신을 등록하려면, @EnableEurekaClient 어노테이션을 사용하여 Eureka 클라이언트로 설정합니다.

1. application.yml 설정

spring: application: name: my-service # 이 서비스의 이름 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ # Eureka Server URL

 

2. EurekaClientApplication.java

@EnableEurekaClient @SpringBootApplication public class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); } }
 
  • 서비스 등록: Eureka 클라이언트는 애플리케이션이 시작될 때 자동으로 Eureka 서버에 자신의 정보를 등록합니다. 이때, spring.application.name 속성이 서비스의 이름이 됩니다.
  • 서비스 검색: 다른 서비스는 Eureka 서버에 등록된 서비스 목록을 조회하여 특정 서비스의 위치를 동적으로 찾을 수 있습니다. 예를 들어, RestTemplate을 사용해 @LoadBalanced와 함께 서비스 검색을 할 수 있습니다.
@LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); }
 

이렇게 하면 RestTemplate을 사용하여 Eureka 서버에 등록된 서비스의 이름을 통해 자동으로 서비스 인스턴스를 찾아서 통신할 수 있습니다.

@Autowired private RestTemplate restTemplate; public String callOtherService() { return restTemplate.getForObject("http://my-service/endpoint", String.class); }

 

위 예시에서 my-service는 Eureka 서버에 등록된 서비스의 이름입니다.

  • Heartbeat: Eureka 클라이언트는 일정 간격으로 Eureka 서버에 생존 신호를 보냅니다. 클라이언트가 일정 시간 동안 생존 신호를 보내지 않으면 Eureka 서버는 해당 클라이언트를 "down" 상태로 표시하고, 다른 서비스들이 이 정보를 통해 해당 서비스를 호출하지 않게 됩니다.
  • Self-Registration: 클라이언트는 자체적으로 서비스를 등록하며, 이는 Spring Cloud에서 기본적으로 제공됩니다. 다른 서비스가 실패할 경우 자동으로 대체 서비스를 선택할 수 있습니다.
  • 서비스 상태 관리: Eureka는 각 서비스의 상태를 UP, DOWN, STARTING, OUT_OF_SERVICE 등으로 관리할 수 있으며, 서비스의 상태를 기반으로 서비스들을 선택적으로 호출할 수 있습니다.

 

Eureka와 함께 사용되는 @LoadBalanced 어노테이션은 클라이언트에서 로드 밸런싱을 제공하는 Ribbon과 통합됩니다. 이를 통해 여러 인스턴스가 있는 서비스 중 하나를 자동으로 선택하여 호출할 수 있습니다.

 

Eureka 클라이언트는 장애가 발생한 서비스를 자동으로 제거하고, 다른 가용한 서비스를 선택하도록 설계되어 있습니다. 클라이언트가 등록된 서비스의 상태를 감시하고, 문제가 생기면 해당 서비스의 정보를 제거하여, 다른 서비스가 호출될 수 있도록 합니다.

  1. 자동 서비스 등록과 발견: 마이크로서비스 아키텍처에서 서비스 간의 동적인 연결을 자동으로 처리할 수 있습니다.
  2. 가용성 관리: 서비스 상태를 모니터링하고, 장애가 발생한 서비스를 제외하여 다른 서비스에 트래픽을 전송합니다.
  3. 로드 밸런싱: 여러 인스턴스를 가진 서비스에서 자동으로 로드 밸런싱을 처리할 수 있습니다.
  1. 중앙 집중식 서비스 관리: Eureka 서버가 다운되면 서비스 디스커버리 기능이 중단될 수 있습니다. 이를 보완하기 위해 Eureka 서버의 복제다중 서버 설정이 필요할 수 있습니다.
  2. 성능 문제: 서비스가 많아질수록 서버의 부하가 커질 수 있기 때문에 Eureka 서버의 성능을 고려한 설정이 필요합니다.

Spring Eureka는 서비스 디스커버리자동화된 서비스 등록 기능을 제공하여, 마이크로서비스 아키텍처에서 서비스를 동적으로 관리할 수 있게 해줍니다. 클라이언트는 자신을 Eureka 서버에 등록하고, 다른 서비스들의 위치를 쉽게 찾을 수 있습니다. 이 기능은 Spring Cloud와 잘 통합되어 마이크로서비스 환경을 구축하는 데 중요한 역할을 합니다.

반응형

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.