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 를 왜 사용하는지와 사용하는 에시에 대해서 공부해볼 생각이다.
'SpringBoot > Spring Cloud' 카테고리의 다른 글
Spring Cloud Gateway - 간단하게 알아보자 (0) | 2024.02.27 |
---|---|
Spring Eureka | Service Discovery | Service Registry (1) | 2024.02.15 |