2 분 소요

개요

스크린샷 2022-09-24 오전 1 45 04

위 사진은 하나의 마이크로 서비스가 세 개의 인스턴스에 의해 확장돼서 개발되는 경우이다.
일종의 로드밸런서 역할을 하는 것처럼 부하 분산 처리가 되어있다고 가정하자.

가지고 있는 PC가 한 대일 경우에는 (=IP가 하나일 경우) 여러 개의 서비스를 동시에 실행하기 위해서 반드시 포트를 분산시켜 실행해야 한다.
-> http://localhost:8080, http://localhost:8081, http://localhost:8082

만약, 가용할 수 있는 PC가 한 대 이상이라면 (=IP가 여러 개일 경우) 같은 포트로 사용할 수 있다.
-> http://my-server1:8080, http://my-server2:8080, http://my-server2:8080

나는 하나의 서버만 사용할 것이기 때문에 하나의 IP Address에서 여러 포트를 사용하는 첫 번째 방식을 사용할 것이다.

우리가 만드는 모든 마이크로 서비스들을 Spring Cloud Netflix Eureka 제품에 먼저 “등록” 해야한다.
이 때, Eureka가 해주는 역할을 “Service Discovery”라고 한다.
Service Discovery는 마이크로 서비스르 등록하거나, 외부에서 다른 서비스들이 마이크로 서비스를 검색하기 위해 사용되는 개념이다.
일종의 전화번호부로 볼 수 있으며, 어떠한 서비스가 어느 위치에 있는지 key, value의 형태로 저장되어 있다.

  1. 개발한 마이크로 서비스를 Eureka 서버에 등록한다.
  2. 해당 마이크로 서비스를 사용하고 싶은 클라이언트는 API Gateway에 자신이 필요한 요청 정보를 전달한다.
  3. 해당 요청 정보가 서비스 디스커버리에 전달되며, 서비스 디스커버리는 클라이언트가 필요한 서비스의 위치를 알려준다.
  4. 클라이언트는 해당 서비스에 요청해 응답을 받을 수 있다.


EcommerceDiscoveryService

EcommerceDiscoveryService라는 이름의 유레카 프로젝트를 생성하자.
전체적으로 구성할 마이크로 서비스들은 아래와 같다.

  • 사용자 서비스
  • 상품 서비스
  • 주문 서비스

위와 같은 서비스들을 갖는 간단한 온라인 쇼핑몰(Ecommerce) 예제를 구현해보자.
(각각의 마이크로 서비스들이 등록/검색에 사용할 디스커버리 서비스가 EcommerceDiscoveryService가 되는 것이다.)

프로젝트 생성

스크린샷 2022-09-24 오전 3 16 03
Java 버전은 8 이상을 사용하면 된다.

Dependencies

스크린샷 2022-09-24 오전 2 20 09

  • Spring Boot > 2.4.1 (pom.xml에서 변경해주었다.)
  • Spring Cloud Discovery > Eureka Server

디펜던시를 Eureka Server 하나만 추가하면, 이 Eureka 서버를 기동함과 동시에 EcommerceDiscoveryService는 서비스 디스커버리 역할을 하게된다.

pom.xml을 변경했다면?

  1. pom.xml에서 우클릭 -> Add as Maven Project 클릭
  2. 왼쪽 Maven View에서 Reload All Maven Project 클릭

스크린샷 2022-09-24 오전 2 38 55

스크린샷 2022-09-24 오전 2 39 16

EcommerApplication.java

현재 프로젝트가 유레카 서버 역할을 하기 위해 @EnableEurekaServer를 추가한다. (서버의 자격으로 등록)

@SpringBootApplication
@EnableEurekaServer
public class EcommerceApplication {

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

}

application.yml

server:
  port: 8761

spring:
  application:
    name: discoveryservice

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

첫 번째로, 서버의 포트 번호는 8761으로 설정했는데,
이는 유레카 서버가 웹 서비스의 성격으로 기동됨에 있어서 사용할 포트 번호이다.

두 번째로, 마이크로 서비스를 담당하는 스프링 부트라는 프레임 워크에서 각각의 마이크로 서비스에 고유한 ID를 부여해야하는데,
그 ID의 역할로 discoveryservice라는 application.name을 등록한 것이다.

마지막으로, eureka.client 설정이다.
우리는 서버를 기동하고 있는데 왜 클라이언트 설정을 할까?
유레카 라이브러리가 포함된 채 스프링 부트가 기동하게 되면 기본적으로 유레카 클라이언트 역할로써 어딘가에 등록하게 된다.
그런데, register-with-eurekafetch-registry를 설정하지 않으면 기본적으로 true로 설정되는데,
그렇게 되면 앞서 말한 전화번호부(디스커버리 서비스)에 자동으로 등록이 되는 것이다. (자신의 정보를 자신에게 등록하는 현상)
의미없는 작업이기 때문에 false로 설정해준다.

실행

스크린샷 2022-09-24 오전 3 02 14
상단에 있는 Run 버튼을 클릭하면 실행할 수 있다.

스크린샷 2022-09-24 오전 3 04 08
성공적으로 실행되었다면 위 사진과 같이 나올 것이고,
http://localhost:8761로 접속하면 아래와 같은 화면을 확인할 수 있을 것이다.
스크린샷 2022-09-24 오전 3 09 13
이 때, 분홍색으로 표시한 부분에서 해당 디스커비리 서비스에 등록된 마이크로 서비스들이 보여질 것이다.

다음 글에서 유레카 서버에 여러 인스턴스들을 등록해보자.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기