Java

[Spring Boot/Spring Cloud] MSA - Netflix Eureka 서버/클라이언트 구축

cob 2023. 7. 23. 21:08

 

Spring Cloud Netflix Eureka란?
MSA를 구축하기 위한 Spring Cloud 프로젝트 중 하나로, 서비스 디스커버리(Service Discovery)를 지원하는 도구이다. 마이크로서비스 아키텍처에서는 여러 개의 작은 서비스들로 애플리케이션을 구성하는데, 이러한 서비스들은 서로 독립적으로 배포 및 확장될 수 있어야 한다. 따라서, 각 서비스들은 다른 서비스들과 상호작용을 해야 하며 이를 위해 서비스 디스커버리 메커니즘이 필요하다. 쉽게 말해서 key-value로 각각의 서비스를 등록해 저장하고 있는 정보가 서비스 디스커버이고 이를 효율적으로 사용할 수 있는 도구가 Eureka 라이브러리이다.

 

🔔 서비스 디스커버리
서비스 디스커버리는 MSA의 독립적인 서비스들이 서로 상호작용하고 필요한 서비스를 찾아 통신할 수 있도록 돕는 메커니즘이다. MSA에서는 서비스들이 동적으로 IP 주소와 포트 번호를 할당받기 때문에, 서비스들은 서로의 위치를 미리 알지 못한다. 이때 서비스 디스커버리는 다음과 같은 역할을 수행하게 된다.
1. 서비스 등록
2. 서비스 검색
3. 로드 밸런싱
4. 서비스 상태 모니터링

 

 

 


1. Eureka 서버 생성

1-1) Maven(Eureka Server 추가)

Server가 될 프로젝트에 해당 의존성을 추가한다.
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

 

 

1-2) application.yml

#Eureka 서버가 웹서비스의 성격으로 실행되기 때문에 설정되는 port 번호
server:
  port: 8761

#Spring Cloud에 각각의 Microservice에 고유의 ID를 부여
spring:
  application:
    name: discoveryservice

# 아래의 옵션은 기본적으로 true로 설정되어 Client 역할도 하게 된다. 서버의 역할만 하기 위해 false로 설정한다.
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  • register-with-eureka : 애플리케이션을 Eureka 서버에 등록할지 여부를 결정한다. 'false'로 설정하게 되면 Eureka 서버에 등록하지 않는다.
  • fetch-registry : Eureka 서버로부터 등록된 서비스들의 정보를 가져올지 여부를 결정한다. 'false'로 설정하게 되면 정보를 가져오지 않는다.
이 두가지 옵션은 현재 애플리케이션이 Eureka 클라이언트로 동작하지 않으며, 다른 서비스들의 정보를 필요로 하지 않는 경우에 사용된다. 즉, 해당 애플리케이션이 서비스 디스커버리를 하지 않는 서버 역할로만 기동 된다는 것을 의미한다.

 

 

1-3) Eureka 서버 등록

@SpringBootApplication
@EnableEurekaServer
public class EcomerceApplication {

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

}

 

1-4) 서버 실행

Eureka Server

 

 


2. 디스커버리 서비스에 등록될 Microservice 생성(Client)

2-1)  Maven(Eureka Client 추가)

Client가 될 프로젝트에 해당 의존성을 추가한다.
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

 

 

2-2) 디스커버리 클라이언트 등록

@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {

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

}

 

2-3) application.yml

server:
  port: 9001

spring:
  application:
    name: user-service

#Eureka에 등록 가능하게 설정
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka
  • eureka.client.service-url : Eureka 서버 URL 지정(위에서 만든 Eureka 서버를 지정한다.)

 

 

2-4) 실행

Eureka 서버에서 등록된 Client 정보를 확인할 수 있다.

Eureka

 

반응형