• 검색 결과가 없습니다.

4. SPRING CLOUD 기반 마이크로 서비스 활용

4.2 S PRING C LOUD 의 컴포넌트 활용

4.2.3 Service Registry – Eureka

Eureka 는 MSA 의 장점 중 하나인 동적인 서비스 증설 및 축소를 위하여 필수적으로 필요한 서비스의 자가 등록, 탐색 및 부하 분산에 사용될 수 있는 라이브러리이다.

마이크로 서비스들의 정보를 레지스트리 서버에 등록할 수 있도록 기능을 제공한다.

Eureka 는 Eureka 서버와 클라이언트로 구성된다.

Eureka 서버는 Eureka 클라이언트에 해당하는 마이크로 서비스들의 상태 정보가 등록되어 있는 레지스트리 서버이다.

Eureka 클라이언트는 서비스가 시작 될 때 Eureka 서버에 자신의 정보를

등록하고 이후 주기적으로 자신의 가용 상태(health check)를 알리며, 일정 횟수 이상의 ping 이 확인되지 않으면 Eureka 서버에서 해당 서비스를 제외시킨다.

또한, Eureka 는 Ribbon 과 결합하여 사용할 수 있으며 이를 통해 서버 목록을 자동으로 관리 및 갱신한다.

4.2.3.1 Eureka 서버 서비스 작성

전자정부 표준프레임워크의 개발환경을 활용하여 Eureka 서버를 아래와 같이 생성한다.

(v3.10 기준)

New > Project > Spring Boot > Spring Starter Project 를 선택 후 아래와 같이

입력한 후 Next 를 선택한다.

Service URL : https://start.spring.io Use default location : 체크 (기본 프로젝트 경로 변경을 원하면 해제 후 지정)

Type : Maven Packaging : Jar Java Version : 8 Language : Java

Group : egovframework.msa.sample Artifact : EurekaServer

Version : 1.0.0

Description : MSA Sample Project

Group Id : egovframework.msa.sample

다음 단계는 프로젝트의 Dependency 를 추가하는 단계인데 여기서는 선택하지 않는다.

(이 가이드에서는 의존관계를 pom.xml 에 직접 등록하는 방법으로 진행한다.)

Next > Finish 또는 Finish 를 바로 선택하여 프로젝트를 생성한다.

Eureka 서버는 서비스 레지스트리 이외의 별도의 작업이 없으므로 모든

egovframework 라이브러리를 제거하고 아래와 같이 Eureka 서버 라이브러리만 등록한다.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.2.6.RELEASE</version>

<relativePath />

</parent>

<groupId>egovframework.msa.sample</groupId>

<artifactId>EurekaServer</artifactId>

<version>1.0.0</version>

<name>EurekaServer</name>

<description>MSA Sample Project</description>

<properties>

<java.version>1.8</java.version>

<spring.cloud.version>2.2.5.RELEASE</spring.cloud.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

<exclusions>

<exclusion>

<groupId>org.junit.vintage</groupId>

<artifactId>junit-vintage-engine</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

<version>${spring.cloud.version}</version>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>

4.2.3.2 EurekaServer 프로젝트 디렉터리 구조 EurekaServer 서비스의 디렉터리 구조는 다음과 같다.

파일명 패키지 명 구분 비고

Pom.xml / 의존성 관리 파일

Application.yml src/main/resources Resource 파일 SpringBoot 설정 파일

EurekaServerApplicati on.java

egovframework.msa.sample.eureka 클래스 파일 애플리케이션 구동 파일

4.2.3.3 EurekaServerApplication.java 작성

EurekaServerApplication 클래스에 @SpringBootApplication 과

@EnableEurekaServer 어노테이션을 추가한다.

package egovframework.msa.sample;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication

@EnableEurekaServer

public class EurekaServerApplication { public static void main(String[] args) {

SpringApplication.run(EurekaServerApplication.class, args);

} }

4.2.3.4 EurekaServer 의 Application.yml 파일 작성 Eureka 서버의 포트와 서버이름을 설정한다.

server:

port: 8761

spring:

application:

name: EurekaServer

4.2.3.5 Eureka 서버 구동 및 테스트

EurekaServerApplication.java 파일을 java application 으로 실행하고 아래의 URL 로 접속한다.

URL : http://localhost:8761/

Eureka 서버가 정상적으로 작동하면 위와 같이 Eureka 서버의 현황을 볼 수 있는 대쉬보드 화면을 만날 수 있다. 또한, 등록된 서비스와 현황을 조회할 수도 있다.

4.2.3.6 Eureka Client 서비스 작성

기존의 Catalogs 서비스와 Customers 서비스를 Eureka Client 로 적용하여 Eureka 서버에 서비스를 등록할 수 있도록 작성한다.

4.2.3.6.1 Catalogs 서비스에 Eureka Client 적용

1. Catalogs 서비스에 Eureka Client 라이브러리를 적용한다.

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

<version>${spring.cloud.version}</version>

</dependency>

2. CatalogsApplication.java 에 @EnableEurekaClient 를 추가한다.

@ComponentScan("egovframework.*")

@EnableCircuitBreaker

@EnableEurekaClient

@SpringBootApplication

public class CatalogsApplication { ...

}

3. application.yml 파일을 아래와 같이 수정한다.

Ribbon 의 listOfServers 목록은 Eureka 적용으로 불필요하여 주석처리 한다.

server:

port: 8081 spring:

application:

name: catalog

#customer:

#ribbon:

#listOfServers: localhost:8082

eureka:

instance:

prefer-ip-address: true client:

service-url:

defaultZone: http://localhost:8761/eureka # default address

4.2.3.7 Customers 서비스에 Eureka Client 적용

1. Customers 서비스에 Eureka Client 라이브러리를 적용한다.

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

<version>${spring.cloud.version}</version>

</dependency>

2. CustomersApplication.java 에 @EnableEurekaClient 를 추가한다.

@ComponentScan("egovframework.*")

@EnableEurekaClient

@SpringBootApplication

public class CustomersApplication { ...

}

3. Application.yml 파일을 아래와 같이 수정한다.

server:

port: 8082 spring:

application:

name: customer eureka:

instance:

prefer-ip-address: true client:

service-url:

defaultZone: http://localhost:8761/eureka # default address

4. Eureka Server 에 모든 서비스가 등록되어 있는지 확인한다.