본문 바로가기
MSA

Service Discovery ( + Netflix Eureka )

by YoonJong 2024. 3. 24.
728x90

해당 게시글은 아래 MSA 강의를 참고하였다. ( 섹션 1 , Service Discovery )

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard

 

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의 - 인프런

Spring framework의 Spring Cloud 제품군을 이용하여 마이크로서비스 애플리케이션을 개발해 보는 과정입니다. Cloud Native Application으로써의 Spring Cloud를 어떻게 사용하는지, 구성을 어떻게 하는지에 대해

www.inflearn.com

 

Service Discovery 는 Load Balancer 을 통해 request가 들어올 경우 어느 서비스 인스턴스에게 전달할지에 대한 역할을 한다.

따라서, Service Discovery 를 구성하기 위해서는 관리할 인스턴스들의 정보를 등록해야한다.

 

프로젝트 생성 시, Dependencies 는 Eureka Server 만 추가한다.

 

 

 

기본설정

@SpringBootApplication
@EnableEurekaServer // Eureka 설정
public class DiscoveryserviceApplication {

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

}

 

yml 설정

1. 포트변경

2. Application-name 설정

3. Eureka 설정 변경

server:
  port: 8761

spring:
  application:
    name: discoveryservice

# 자신의 정보를 자신에게 등록하기 때문에 의미없음. 디폴트 : true
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

 


Client-Server 생성

프로젝트를 생성 - 아래 dependencies 

 

기본설정

Client 이기 때문에, @EnableDiscoveryClient 를 사용한다.

@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {

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

}

 

yml 설정

server:
  port: 9001

spring:
  application:
    name: user-service

#Eureka 서버로부터 인스턴스들의 정보를 주기적으로 가져올 건지 선택하는 설정
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

 

Eureka Server 와 Client Server 가 잘 연결되어 있는지 확인.

2개의 프로젝트 모두 실행 중 이어야 한다.

 

 

Application 이름은 설정해준대로 user-service(대문자) 로 되어있으며 포트 번호또한 9001 로 정상적으로 연결된 것을 볼 수 있다.

Status 가 up 이면 연결상태이다. ( 반대는 down )


이후 3~4개의 서비스를 만들어준다.

port 만 변경해서 9001, 9002, 9003, 9004 를 만들어주었다.

 

하지만, 계속해서 포트번호를 부여하는 것은 비효율적이다.

따라서, 실행 시 자동으로 랜덤한 포트 번호를 정해주는 방법으로 수정한다.

yml 수정 

server:
  port: 0 # 랜덤 PORT

spring:
  application:
    name: user-service

#Eureka 서버로부터 인스턴스들의 정보를 주기적으로 가져올 건지 선택하는 설정
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

 

실행 결과 

실제 포트는 아래 영문자+숫자 형식으로 나오지 않는다.

 


 

+ API Gateway 를 통해서 바로 호출 할 수 있지 않을까?

API Gateway 에서 바로 서비스 인스턴스를 호출 할 수 있지만, 도메인을 사용하는 것이 아닌 IP 를 사용하는 경우 추가로 설정하거나 IP 를 수정하는 등 여러 번거로움이 있을 수 있다. Service Discovery 를 이용하면 인스턴스의 ID 나 name 으로 호출 할 수 있기 때문에 효율적이다.

예를 들어 핸드폰에 전화번호를 등록할 때 이름(Service Discovery) 와 전화번호(Service Instance) 를 함께 등록한다. 이후에 전화번호가 변경되면 이름은 수정하지 않고 전화번호만 간단히 바꾸어주면 사용자는 이름으로만 검색해서 전화할 수 있다.ㅇ

728x90

'MSA' 카테고리의 다른 글

SOA 와 MSA 의 차이  (0) 2024.03.23

댓글