Eureka Serve & Eureka Client 어플리케이션 만들어보기 | Eureka YML 설정

2024. 2. 16. 13:16

REFERENCE

 

들어가기 전에

Spring Eureka 에 대한 이해를 기반으로 한 실습해 본 것 입니다. 이쁘게 봐주세요

 

Eureka Server |  Develop Environment

java version : 17  
springboot : 3.2.2  

 

Eureka Server |  dependency

- netflix-eureka-server  ( 해당 dependency 만 필요 )
- lombok  
dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

Eureka Server |  @EnableEurekaServer 추가 

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

@EnableEurekaServer
@SpringBootApplication
public class ServerApplication {

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

}
해당 어플리케이션이 EurekaServer 

 

Eureka Server |  application.yml 파일 설정 ( application.properties 를 변경 )

server:
  port: 8761

# 해당 application 이름을 다음과 같이 변경 
spring:
  application:
    name: playground-eureka-server

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  server:
    enable-self-preservation: false 
    response-cache-update-interval-ms: 5000
    eviction-interval-timer-in-ms: 10000

 

register-with-eureka 
- Eureka 서버에 자신을 서비스로 등록 여부를 설정하는 옵션 

- 즉, 서비스 레지스트리에 등록할지 정하는 옵션 
- default 값이 True 이다. standalone ( Eureka Server Application 이 1개 ) 일 때 peering 예외가 발생함으로 false


fetch-registry
- Eureka 서버에 등록 된 서비스 목록을 가져올지에 대한 여부 설정  
- default 값이 true 
- 활성화 하면 30초 마다 Eureka Registry 변경 여부를 재확인한다 
- Eureka Server 를 호출하는 대신 레지스트리가 로컬로 캐싱됨 
- 마찬가지로 Server가 자신임으로 false 


enable-self-preservation
- 일시적 네트워크 장애로 인해 서비스 인식이 안되는 것을 방지하기 위한 설정 
- 기본값 true , HeartBeat 가 오지 않는 경우에도 해당 서비스를 레지스트리에 유지 
- 운영환경에서 true 로 설정되어 있는 것을 권장 
- false 로 설정했다 하더라도, client 에서 heartbeat 설정으로 인해 일정 시간 후 서비스 등록이 해제 된다.

response-cache-update-interval-ms 
- Eureka 서버의 캐싱 업데이트 주기를 설정하는 옵션 

eviction-interval-timer-in-ms
- 클라이언트로 부터 하트비트가 수신 되었는지 점검 하는 주기를 설정하는 옵션 

 

Eureka Server |  실행 결과 

eviction-interval-timer-in-ms 설정으로 클라이언트로 부터 하트비트가 수신되는지 10초 마다 점검 

Eureka 서버가 잘 작동하는 것을 볼 수 있다.

Eureka Client |  Develop Environment

java version : 17  
springboot : 3.2.2  

 

Eureka Client |  Dependency

- netflix-eureka-client ( 해당 dependency 만 필요 )
- lombok  
- spring-web
- devtools

 

Eureka  Client |  @EnableDiscoveryClient  추가 

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


@EnableDiscoveryClient
@SpringBootApplication
public class ClientApplication {

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

}

 

Eureka  Client |  application.yml 파일 설정 ( application.properties 를 변경 )

server:
  port: 0 # 동적으로 어플리케이션을 생성하기 위해서 0 번 포트 사용 

spring:
  application:
    name: playground-eureka-client


eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    registry-fetch-interval-seconds: 5000
    disable-delta: true
    service-url:
      defaultZone: http://localhost:8761/eureka # Eureka Server URI 정보를 설정 
  instance:
    #lease-expiration-duration-in-seconds
    #lease-renewal-interval-in-seconds
    instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}} # instance-id 를 설정

 

client:
  register-with-eureka

- Eureka 서버에 헤딩 서비스를 등록할 지 정하는 옵션 ( 서비스 레지스트리에 등록할지 정하는 옵션 )

client:
  fetch-registry: true

- Eureka 서버에 등록 된 서비스 목록을 가져 올 것인지에 대한 여부 옵션 
- default 값이 true : 이 경우 30 초 마다 레지스트리에 변경 사항을 확인

client:
  registry-fetch-interval-seconds: 5000

- 서비스 레지스트리 목록을 캐싱하는 주기를 설정하는 옵션 

client:
  disable-delta

- 서비스 레지스트리 목록을 캐싱할 때 변경된 부분만 업데이트 할 것 인지에 대한 여부 설정 

instance:
  lease-renewal-interval-in-seconds

- Eureka 서버로 HeartBeat 보내는 시간 주기기 설정 ( 기본 값 30 초 )
- 내부 로직에 영향을 미칠 수 있기 때문에 가급적이면 수정 지양

instance:
  lease-expiration-duration-in-seconds

- 마지막 heartbeat 로 부터 서비스가 레지스트리에서 되기 까지 만료 시간을 설정 
- 내부 로직에 영향을 미칠 수 있기에 가급적 수정을 지양
- instance.lease-renewal-interval-in-seconds 여기에서 설정한 값보다 반드시 커야한다.


client:
  service-url:
    defaultZone
- Eureka 서버의 위치를 지정하는 옵션 


instance:
  instance-id
- 해당 application 의 인스턴스 아이디를 설정하는 옵션 

 

Eureka  Client |  Eureka 서버가 실행되고 있을 때 Client 실행

서비스가 레지스트리에 등록

Eureka 서버에서도 확인이 가능

 

Eureka  Client |  2개의 서비스가 등록되어 있는 상태에서 서비스 1개를 지우기

위의 설정대로 할때
서베어서 캐싱 정보를 5초 마다 업데이트 하고 
서비스의 하트비트 점검을 10초 마다 한다.
이후 서비스가 종료 되더라도 종료된 서비스에서 설정된 lease-renewal-interval-in-seconds 에서
설정한 값 만큼 기다리고, 그럼에도 HeartBeat가 발생하지 않으면 lease-expiration-duration-in-seconds 설정한 값 만큼 시간이 지난 후에 레지스트리에서 해당 서비스 정보를 제거한다.

그렇기 때문에 바로 지워지지 않는 것을 볼 수 있다.

 

 

후기 

Spring Eureka Server 와 Client  생성을 하며 
YML 설정 값 까지 간략하게 알아봤다. 
다음에는 GATE WAY 를 왜 사용하는지와 사용하는 에시에 대해서 공부해볼 생각이다.

 

BELATED ARTICLES

more