SpringBoot

[Spring Cloud] Netflix Eureka

48965 2024. 4. 4. 16:39

Netflix Eurka란?

Netflix Eureka는 Netflix에서 개발한 서비스 디스커버리(Service Discovery) 솔루션이다. 마이크로서비스 아키텍처에서 각각의 서비스 인스턴스가 어디에 위치하고 있는지를 알 수 있게 해주는 중요한 컴포넌트이다. 해당 서비스 디스커버리 솔루션은 key/value 테이블로 구성되어 있으며, 해당 테이블에 사용하려는 인스턴스를 등록해서 사용하게 된다.

구성

Eureka는 크게 두 부분으로 구성된다.

  1. Eureka Server: 서비스 디스커버리의 중심 역할을 한다. 서비스 인스턴스들이 자신의 정보를 등록하고, 다른 서비스 인스턴스의 정보를 조회할 때 사용된다.
  2. Eureka Client: 각 마이크로서비스 인스턴스에 포함되며, Eureka Server에 자신의 정보를 등록하고, 다른 서비스 인스턴스의 정보를 조회하는 역할을 한다.

특징

  • 자가 보존 모드(Self Preservation Mode): Eureka 서버는 네트워크 문제 등의 일시적인 문제로 인해 클라이언트들로부터 갱신 정보가 오지 않을 경우를 대비해, 일정 시간 동안 클라이언트로부터 갱신 정보가 들어오지 않으면 자동으로 자신을 보존 모드로 전환한다. 이 모드에서는 Eureka 서버는 어떠한 서비스 인스턴스도 제거하지 않는다.
  • 존 기반의 서비스 디스커버리: Eureka는 여러 존에 걸쳐 서비스 디스커버리를 제공할 수 있다. 이를 통해 가용성과 내구성이 향상된다.

Springboot를 사용한 Netflix Eurka 서버 구성 

Eureka 서버 구성을 위해 discoveryservice라는 이름을 가진 SpringBoot 프로젝트를 생성한다.

build.gradle에 netflix eureka 의존성 추가 및 기본 세팅

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'

 

application.yml 구성

server:
  port: 8761

spring:
  application:
    name: discoveryservice

# 자기 자신을 클라이언트로 등록하지 않는 설정. 즉 서버로서의 역할로만 기동
eureka:
  client:
    register-with-eureka: false 
    fetch-registry: false

 

 

최상위 어플리케이션 클래스에 @EnableEurekaServer 추가한다.

package com.example.discoveryservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class DiscoveryserviceApplication {

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

}

 

서버 가동 후 127.0.0.1:8761을 통해 접속하여 확인.

아직 클라이언트로 등록된 것이 없기에 Application에 아무 내용도 뜨지 않는다.

Spring Eureka

클라이언트 등록

클라이언트로 사용할 서비스 생성 후 application.yml 파일을 구성한다.

예제에서는 user-service라는 이름으로 생성하였으며, 포트는 랜덤 포트 사용을 선언하였다.

이후 이전 생성하였던 유레카 서버와 연결하는 작업을 진행한다.

# 랜덤포트 사용 선언
server:
  port: 0

# 인스턴스 이름
spring:
  application:
    name: user-service

# Eureka 클라이언트 설정
eureka:
  instance:
    instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eu

 

이후 UserServiceApplication에 @EnableDiscoveryClient 어노테이션을 선언해준다.

package com.example.userservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {

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

}

 

서버 가동 후 127.0.0.1:8761에 접속하여 user-service가 유레카 서버에 정상적으로 등록되었는지 확인한다.