IT 개발 관련/[Spring]

[Spring] Eureka Server (Discovery Server) 생성

Baileyton 2024. 6. 28. 16:53
728x90

Eureka란?

Eureka는 Neflix에서 제공한 MSA를 위한 클라우드 오픈 소스이다.

Eureka는 Load Balancer와 Middle-tier server에 에러 대응을 위한 Rest 기반 서비스이다.

로드 밸런서에 연결 정보 등록에 대한 문제점과 에러 처리를 유연하게 처리하기 위한 기술이다.Eureka는 등록과 해지를 곧바로 적용할 수 있게 도와줍니다.

 

- Discovery : 다른 서비스의 연결 정보를 찾는 것이다.

- Registry : 서비스의 연결 정보를 등록하는 것이다.

- Eureka 구성

  - Eureka Server : Eureka Client를 관리하는 서버이다.

  - Eureka Client : 각각의 서비스에 해당하는 모듈이라고 생각하면 됩니다.

 

실제 흐름 예시로

1. Eureka Client 서비스가 시작 될 때 Eureka Server에 자신의 정보를 등록

2. Eureka Client는 Eureka Server로 부터 다른 Client의 연결정보가 등록되어 있는 Registry를 받고 자신의 Local에 저장한다.

3. 30초 마다 Eureka Server로 부터 변경 사항을 갱신 받는다.

4. 30초 마다 ping을 통하여 자신이 동작하고 있다는 신호를 보낸다. 신호를 보내지 못하면 Eureka Server가 보내지 못한 Client를 Registry에서 제외시킨다.

 

다음은 구현 예제입니다.

 

1.build.gralde

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.3.0'
	id 'io.spring.dependency-management' version '1.1.5'
}

group = 'com'
version = '0.0.1-SNAPSHOT'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

repositories {
	mavenCentral()
}

ext {
	set('springCloudVersion', "2023.0.2")
}

dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

tasks.named('test') {
	useJUnitPlatform()
}

 

2. EurekaApplication.java

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {

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

}

@EnableEurekaServer 어노테이션 Eureka Server임을 선언하는 것입니다.

 

3. application.yml

server:
  port: 8761 #포트번호 지정

spring:
  application:
    name: eureka # 서비스 ID

eureka:
  client:
    register-with-eureka: false # default : true
    fetch-registry: false # default : true

 

EurekaApplication을 실행 하고 localhost:8761로 들어가면

 

이미지와 같은 화면을 확인 할 수 있습니다.

 

서비스 등록하기

다음 user 서비스를 추가하는 방법과정입니다.

 

1. build.gradle

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.3.0'
	id 'io.spring.dependency-management' version '1.1.5'
}

group = 'com'
version = '0.0.1-SNAPSHOT'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

repositories {
	mavenCentral()
}

ext {
	set('springCloudVersion', "2023.0.2")
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

tasks.named('test') {
	useJUnitPlatform()
}

 

2. UserApplication.java

@SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {

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

}

 

@EnableDiscoveryClient 어노테이션 애플리케이션이 Eureka 서버의 클라이언트임을 선언하는 것입니다.

 

3. application.yml

server:
  port: 0

spring:
  application:
    name: user-service

eureka:
  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

 

UserApplication을 실행하면

(EureakApplication도 실행이 된 상태여야합니다.)

 

 

서비스가 등록되어있는걸 확인 할 수 있습니다.

 

 

728x90