1. Spring Cloud Netflix란?
마이크로 서비스 아키텍처(Microservices Architecture, MSA)를 구현하기 위하여 Netflix OSS(Open Source Software)에서 제공하는기술을 기반으로 만들어졌다.
Spring Cloud Netflix에서 제공하는 기능은 다음 아래와 같다.
Eureka : 서비스 발견을 위한 서버 및 클라이언트
Eureka는 마이크로서비스 아키텍처에서 서비스 간 통신을 가능하게 하는 레지스트리 역할을 한다. 서비스가 시작될 때 Eureka 서버에 등록되고, 클라이언트는 Eureka 서버에서 서비스를 찾아 통신한다.
Ribbon : 클라이언트 측 부하 분산을 위한 라이브러리
Ribbon은 서비스 간의 통신을 관리하고, 요청을 여러 인스턴스로 분산시켜 서비스의 가용성을 높이는 역할을 한다.
Hystrix : 회로 차단 패턴을 구현한 라이브러리
Hystrix는 서비스 간의 통신에서 발생할 수 있는 장애를 관리하고, 장애가 발생한 서비스에 대한 요청을 회로를 차단하여 빠르게 실패하도록 만든다. 이를 통해 전체 시스템의 안정성을 유지하고 부하를 분산시킨다.
Feign : RESTful 웹 서비스 클라이언트를 작성하기 위한 라이브러리
Feign은 인터페이스 정의를 통해 RESTful 서비스에 대한 클라이언트를 작성할 수 있다. 이를 통해 클라이언트 개발자는 서비스 간의 통신을 쉽게 할 수 있다.
2. 사용방법
아래의 Spring.io에서 제공하는 Spring Cloud Netflix(Eureka)의 Doc으로 참고하여 작성하였다.
Spring Cloud Netflix
This project provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations you can quickly enable and configure the common pat
cloud.spring.io
Eureka는 크게 Server와 Client로 나눠서 구현한다.
1) Eureka Server 사용 방법
① dependency 추가하기
build.gradle 의 경우 의존성을 위하여 아래와 같이 추가 한다.
ext {
set('springCloudVersion', "2023.0.1")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
pom.xml의 경우 의존성을 위하여 아래와 같이 추가한다.
<properties>
<java.version>17</java.version>
<spring-cloud.version>2023.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencyManagement>
② Eureka서버 명시하기
@EnableEurekaServer 어노테이션을 Application의 main메서드가 있는 class에 아래와 같이 붙여준다.
@SpringBootApplication
@EnableEurekaServer // Eureka Server임을 명시함
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
③ application.yml 작성하기
서버의 경우 eureka.client 이하의 2개의 옵션의 default 값이 true로 제공되어, false로 바꿔줘야한다.
server:
port: 8761 # default port가 8761이다.
eureka:
client:
# 아래의 설정들은 default가 true 이기 때문에 false설정을 한다.
registerWithEureka: false
fetchRegistry: false
④ 서버 실행하기
위의 단계를 마치고 서버를 실행하면 http://localhost:8761을 통하여 Eureka서버의 현황을 볼 수 있다.
2) Eureka Client 사용 방법
① dependency 추가하기
build.gradle 의 경우 의존성을 위하여 아래와 같이 추가 한다.
ext {
set('springCloudVersion', "2023.0.1")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
pom.xml의 경우 의존성을 위하여 아래와 같이 추가한다.
<properties>
<java.version>17</java.version>
<spring-cloud.version>2023.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencyManagement>
② application.yml 작성하기
서버의 경우 eureka.client 이하의 2개의 옵션의 default 값이 true로 제공되어, false로 바꿔줘야한다.
#유레카 설정
eureka:
instance:
# server의 포트를 랜덤으로 설정하였기에 random.value로 한다.
instance-id: ${spring.cloud.client.ip-address}:${random.value}
client:
service-url:
defaultZone: http://localhost:8761/eureka # 유레카 서버 주소 (다중화 할경우 콤마(,)를 사용하여 연속 입력)
register-with-eureka: true # eureka server를 registry에 등록하지 여부
fetch-registry: true # registry에 있는 정보들을 가져올지 여부
server:
port: 0 # 0값을 입력해주면 랜덤하게 포트번호를 부여한다.
③ 서버 실행하기
위와 같이 설정을 맞친 클라이언트를 이전에 설정한 Eureka서버를 실행한 뒤 clinet를 실행하면 http:/localhost:8761을 통하여 client의 정보를 확인 할 수 있다.
'개발 > Java' 카테고리의 다른 글
Spring Cloud Gateway(SCG)로 MAS 구현하기 (0) | 2024.04.19 |
---|