빅토리 코딩
article thumbnail
Published 2023. 3. 8. 17:04
Spring Cloud Eureka Spring/Spring Cloud
728x90
반응형

개요

Spring Cloud Eureka는 서비스 디스커버리를 위한 라이브러리입니다. 이를 사용하면 마이크로서비스 아키텍처에서 각 서비스의 위치와 상태를 관리할 수 있습니다.
Spring Cloud Eureka는 서비스 디스커버리 서버와 클라이언트로 구성됩니다. Eureka 서버는 각 서비스의 위치와 상태 정보를 저장하고, Eureka 클라이언트는 자신을 등록하고 주기적으로 서버에 상태를 보고합니다

주요 기능

1. 서비스 등록 및 발견

Eureka 클라이언트는 서비스를 등록하고, Eureka 서버는 등록된 서비스 정보를 저장합니다. 다른 서비스에서는 Eureka 서버에서 서비스 정보를 조회하여 해당 서비스를 호출할 수 있습니다.

2. 서비스 상태 확인

Eureka 클라이언트는 주기적으로 서비스 상태를 Eureka 서버에 보고하며, Eureka 서버는 이 정보를 기반으로 서비스의 상태를 확인할 수 있습니다. 이를 통해 서비스의 가용성을 높일 수 있습니다.

3. 부하 분산

Eureka 서버는 서비스 정보를 여러 개의 서버에 저장하므로, 각 서비스에서는 이 중 하나의 서버를 선택하여 서비스를 호출할 수 있습니다. 이를 통해 부하 분산 기능을 구현할 수 있습니다.

4. 클라이언트 측 로드 밸런싱

Eureka 클라이언트는 서비스 정보를 주기적으로 조회하여 로컬 캐시에 저장합니다. 이를 통해 클라이언트 측에서 로드 밸런싱을 구현할 수 있습니다.

부하분산 및 로드 밸런싱은 "spring-cloud-starter-netflix-eureka-client"를 사용해야 하므로 구현 단계에선 안 보여


구현

eureka server

1.pom.xml 설정

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.8</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	...
	<properties>
		<java.version>11</java.version>
		<spring-cloud.version>3.1.5</spring-cloud.version>
	</properties>
	<dependencies>
		<!-- Spring boot  -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-client</artifactId>
			<version>${spring-cloud.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-bootstrap</artifactId>
			<version>${spring-cloud.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
			<version>${spring-cloud.version}</version>
		</dependency>
		<!-- Spring boot  -->
	</dependencies>
	 ...

2. @EnableEurekaServer 어노테이션을 사용하여 Eureka Server를 활성화

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

3. application.yml 설정

server:
  port: 8761

spring:
  application:
    name: eureka-server

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false

eureka client

1. pom.xml 설정

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.8</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
...
	<properties>
		<java.version>11</java.version>
		<spring-cloud.version>3.1.5</spring-cloud.version>
	</properties>
	<dependencies>
...
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
			<version>${spring-cloud.version}</version>
		</dependency>
	</dependencies>

2. @EnableDiscoveryClient 어노테이션을 사용하여 Eureka Client를 활성화

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {

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

3. application.yml 설정

server:
  port: 8081

spring:
  application:
    name: springBoot01

eureka:
  instance:
    prefer-ip-address: true
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

 

나는 spring boot를 2개 띄어서 연결해보았다.

먼저 Eureka 서버 접속 시

정상적으로 2개의 spring boot가 연결되었다.

 

Eureka의 서비스의 구분값은 application name이라고 알고 있어 springboot02를 yml에서 springboot01로 바꾸어 보았다.

 

 

같은 서비스로 2개가 적혀 있는 모습을 볼 수 있다.

 

만약 eureka로 로드밸런싱을 처리한다면 같은 서비스를 저렇게 여러 개 띄어서 무중단 시스템도 가능 할꺼같다.

Github

https://github.com/victory940209/spring-cloud

 

GitHub - victory940209/spring-cloud

Contribute to victory940209/spring-cloud development by creating an account on GitHub.

github.com

 

728x90
반응형

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

Spring Cloud Gateway  (0) 2023.03.08
Spring Cloud Config  (0) 2023.03.08
Spring Cloud MSA  (0) 2022.01.25
profile

빅토리 코딩

@빅토리 코딩

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그