본문 바로가기
Spring/Spring Cloud

[Spring Cloud] Eureka

by 유코_ 2024. 3. 6.
Service Discovery(서비스 검색) 는 마이크로서비스 기반 아키텍처의 핵심 원칙 중 하나입니다.
외부에서 다른 어떤 서비스들이 마이크로서비스를 검색하기 위해 사용되는 개념입니다.

 

 

1. Discovery Service

어떠한 서비스가 어디에 위치해 있는지의 정보를 등록하고, 검색에 관련된 작업을 해주는 것이 Discovery Service 입니다.

Netflix의 Euraka라는 제품은 이 기능을 구현해주는 서비스 입니다.

(Eureka는 넷플릭스라는 회사가 가지고 있는 자사의 클라우드 기술들을 자바 스프링 재단에 기부해서 사용할 수 있게 한 제품입니다.)

 

각각의 마이크로 서비스가 전부 다 자신의 위치 정보를 스프링 클라우드 넷플릭스 유레카, 

즉 유레카 서버에 등록 작업을 먼저 해주면 됩니다.

 

그 다음 이 마이크로 서비스를 사용하고 싶은 클라이언트가 로드밸런서나  API Gateway에 필요한 어떤 요청 정보를 전달하게 되면 그 요청 정보가 Service Discovery 서버에 전달이 되어 필요한 정보가 어디에 있는지 물어보는 단계를 거칩니다.

 

Service Discovery가 필요한 서비스의  위치정보를 반환해주고 사용자가 요청한 마이크로 서비스를 호출해 결과값을 응답받는 구조가 됩니다.

 

 

2. Eureka Server

Eureka Server는 서비스 디스커버리 서버로서 다음과 같은 역할을 수행합니다:

  1. 서비스 등록 관리 (Service Registration Management): 마이크로서비스들은 Eureka Server에 자신의 인스턴스를 등록합니다. 이를 통해 Eureka Server는 실행 중인 모든 서비스 인스턴스의 정보를 유지합니다.
  2. 서비스 검색 제공 (Service Discovery Provider): 클라이언트 애플리케이션은 Eureka Server에 등록된 서비스의 위치를 검색할 수 있습니다. Eureka Server는 클라이언트에게 서비스 인스턴스의 호스트 및 포트 정보를 제공하여 통신을 가능하게 합니다.
  3. 서비스 상태 감시 (Health Monitoring): Eureka Server는 주기적으로 등록된 서비스 인스턴스의 상태를 확인하고, 정상적으로 작동하지 않는 인스턴스를 감지합니다. 이러한 상태 감시를 통해 Eureka Server는 클라이언트에게 항상 신뢰할 수 있는 서비스 인스턴스를 제공합니다.

 

  • Gradle에 라이브러리 의존성을 추가해줍니다.
dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
}
  • main 메서드가 정의되어 있는 클래스에 @EnableEurekaServer 어노테이션을 추가해줍니다.
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DiscoveryServerApplication.class, args);
    }

}
  • application.yml 파일에 다음과 같이 설정을 해 줍니다.
server:
  port: 8761

spring:
  application:
    name: discoveryservice

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  1. register-with-eureka: 현재 서비스가 Eureka 서버에 자동으로 등록되어야 하는지 여부를 결정합니다.
    기본값은 true입니다. 만약 이 값을 false로 설정하면, 현재 서비스는 Eureka 서버에 등록되지 않으며, 따라서 다른 서비스들은 이 서비스를 발견할 수 없습니다.

  2. fetch-registry: Eureka 클라이언트가 Eureka 서버로부터 등록된 서비스 목록을 가져와야 하는지 여부를 결정합니다. 기본값은 true입니다. 만약 이 값을 false로 설정하면, 현재 서비스는 Eureka 서버로부터 다른 서비스들의 목록을 가져오지 않습니다.

Discovery Server 역할을 하는 어플리케이션에서는 register-with-eurekafetch-registryfalse로 설정하여, 자신이 Eureka 서버로부터 등록 정보를 가져오거나, 또는 다른 서비스에 대해 등록되는 것을 방지합니다.

이렇게 함으로써, 서버는 다른 서비스들에 대한 관리 및 감시에 집중할 수 있습니다.

 

3. Eureka Client

Eureka Client는 서비스 디스커버리 클라이언트로서 다음과 같은 역할을 수행합니다:

  1. 서비스 등록 (Service Registration): 마이크로서비스는 자신의 Eureka Client를 사용하여 Eureka Server에 자신의 인스턴스를 등록합니다. 이를 통해 Eureka Server는 해당 서비스의 존재를 알 수 있게 됩니다.
  2. 서비스 검색 및 호출 (Service Discovery and Invocation): 클라이언트 애플리케이션은 Eureka Client를 통해 Eureka Server에 등록된 서비스의 위치를 검색할 수 있습니다. 이후 클라이언트는 검색된 서비스 인스턴스에 대한 요청을 보내고 통신을 수행할 수 있습니다.
  3. 로드 밸런싱 (Load Balancing): Eureka Client는 여러 서비스 인스턴스 중 하나를 선택하여 요청을 보냅니다. 이를 통해 로드 밸런싱을 수행하고 서비스의 가용성과 성능을 향상시킵니다.
  4. 서비스 상태 감시 (Health Monitoring): Eureka Client는 자체적으로 서비스 인스턴스의 상태를 주기적으로 감시하고, 이 정보를 Eureka Server에 보고합니다. 이를 통해 Eureka Server는 문제가 있는 서비스 인스턴스를 탐지하고 제외할 수 있습니다.

Spring Boot를 사용한 Eureka Client 구축 방법 입니다.

    •  Gradle에 Eureka Client 관련 라이브러리 의존성을 추가합니다.
dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}

 

 

  • Eureka Client로 등록할 애플리케이션의 main 함수가 있는 클래스에 @EnableDiscoveryClient 어노테이션을 추가해줍니다.
@SpringBootApplication
@EnableDiscoveryClient
public class AuthServiceApplication {

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

}

 

  • application.yml 파일에 다음과 같이 설정 해줍니다.
spring:
  application:
    name: auth-service

server:
  port: 8080

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

 

eureka server에 등록 될 client 애플리케이션 이기 때문에 register-with-eureka, fetch-registry를 true로 설정합니다.

defaultZone은 Eureka Server로 등록한 애플리케이션의 end point를 입력합니다.

 

 

'Spring > Spring Cloud' 카테고리의 다른 글

[Spring Cloud] Spring Cloud Gateway  (0) 2024.03.06