자바/스프링(Spring)

Spring Eureka (스프링 유레카) 간단 실습 및 예제

류창 2023. 3. 28. 19:05
반응형

 

 

스프링 유레카란?

 

"스프링 유레카"는 스프링 프레임워크에서 사용되는 서비스 디스커버리(Service Discovery) 서버 중 하나입니다.

스프링 유레카를 사용하는 이유는 분산 시스템에서 서비스 간의 통신을 위해 필요한 서비스 디스커버리, 로드 밸런싱, 장애 감지 및 회복 등을 쉽게 구현할 수 있기 때문입니다.

스프링 유레카를 사용하면 각각의 서비스들이 등록되고, 이를 조회하여 사용할 수 있습니다. 이를 통해 높은 가용성과 확장성을 가진 분산 시스템을 구성할 수 있습니다.

또한 스프링 유레카는 클라우드 환경에서 서비스를 배포하고 관리하기 쉽도록 지원합니다. 클라우드 네이티브 아키텍처에서 많이 사용되는 기술 중 하나이며, 스프링 부트와 같이 사용하면 더욱 편리하게 구성할 수 있습니다.

 

 

 

여기서 서비스 디스커버리란..?

 

서비스 디스커버리(Service Discovery)는 분산 시스템에서 서비스들을 찾아서 연결하는 기능을 말합니다. 분산 시스템에서 각각의 서비스들은 자신의 인스턴스를 등록하고, 다른 서비스들의 인스턴스들을 찾아서 연결하게 됩니다.

서비스 디스커버리는 각 서비스들이 동적으로 변화할 수 있는 클라우드 환경에서 특히 중요한 역할을 합니다. 예를 들어, 트래픽이 급격하게 증가하면 새로운 서비스 인스턴스가 추가되고, 서비스 인스턴스가 제거될 수 있습니다. 이때, 서비스 디스커버리는 새로운 인스턴스를 등록하고, 제거된 인스턴스를 감지하여 이를 알리는 역할을 수행합니다.

서비스 디스커버리는 다양한 방법으로 구현될 수 있습니다. 일반적으로는 서비스 레지스트리에 서비스 인스턴스 정보를 등록하고, 서비스 디스커버리 클라이언트에서 이 정보를 조회하여 사용합니다. 스프링 클라우드에서는 "스프링 유레카"와 같은 서비스 디스커버리 서버를 제공합니다.

 

 

 

스프링 유레카 vs 스프링 클라우드 게이트웨이

 

"스프링 유레카"와 "스프링 클라우드 게이트웨이"는 스프링 클라우드 프로젝트에서 제공하는 서버 사이드의 분산 시스템 구성을 위한 서비스입니다.

 

스프링 유레카는 서비스 디스커버리를 위한 서버이며, 클라이언트에서는 스프링 클라우드에서 제공하는 "스프링 클라우드 로드밸런서"와 같은 기술을 이용하여 유레카 서버에 등록된 서비스들을 조회하여 사용할 수 있습니다.

 

반면에 스프링 클라우드 게이트웨이는 마이크로서비스 아키텍처에서 API 게이트웨이로 사용되며, 클라이언트가 요청한 API 요청을 받아서 필요한 인증, 로깅, 로드 밸런싱, 라우팅 등의 기능을 수행한 후에 서비스로 요청을 전달하는 역할을 합니다.

즉, 스프링 유레카는 서비스 디스커버리를 위한 서버이고, 스프링 클라우드 게이트웨이는 API 게이트웨이 역할을 수행하는 서버입니다. 두 기술은 서로 보완적으로 사용될 수 있습니다.

 

 

https://www.inflearn.com/questions/553519/gateway%EC%99%80-eureka-%EA%B0%9C%EB%85%90

 

Gateway와 eureka 개념 - 인프런 | 질문 & 답변

[사진]         안녕하세요 강사님 강의 진짜 잘 듣고 있습니다! 설명 너무나 잘 해주시는데, 제가 이해 한걸 확인 좀 하고 싶어서 질문 합니다. spring MSA가 유레카서버(eureak server)에서 각 모듈(eur

www.inflearn.com

 

 

 

본격적으로 스프링 유레카를 경험해보자!

 

 

1.유레카 서버 프로젝트 생성하기

 

 

start.spring.io 에서  Eureka Server 의존성만 추가한뒤, 프로젝트를 실행하자

 

유레카 서버 메인

 

유레카 서버 프로젝트는 @EnableEurekaServer를 작성해 인식시키자.

 

(유레카 서버 프로젝트) Application.yml

들어오면 Application.yml을 작성한다

 

프로퍼티로도 충분히쓸수있지만,  yml이 중복을 없애니 yml로 작성했다.

 

유레카 서버의 고정 포트는 8761포트이므로 설정해줍시다.

 

중요한 요소는, eureka.client의   register , fetch 가 False 부분이다.

 

이 부분은 유레카 클라이언트만 True해줘야한다.

서버는 클라이언트가 아니니 false로 해주자.

 

 

서버는 이정도만해줘도 끝이다! 이런뒤 실행버튼을 누르고

localhost:8761 포트로 이동해보자.

 

 이런 화면이 나오면 성공!

 

필자는 이미, Eureka 인스턴스를 2개 등록해놔서  First 서비스, Second서비스가 연결되어있다.

원래라면  두 서비스가 없어야하는게 정상이다.

 

 

 

2. 유레카 클라이언트 프로젝트 생성

 

유레카 클라이언트는  2개만 해도된다.

 

Spring Web,  Eureka Discovery Client 라이브러리 이다.

 

필자는, 이 의존성으로  Fisrt Service,  Second Service  두 프로젝트를 만들었다.

 

 

 

First Service, Second Service의 yml

 

Fisrt service yml
Second Service

 

1. 두 프로젝트의 포트는 겹치지만 않게 설정해도 된다.

 

2.  Application의 이름은  기능의 맞는 이름을 작성하자.

 

3. instace의 이름또한,  기능의 맞는 인스턴스 이름을 작성하자.

 

4. 아까 유레카 서버와는 달리,   client의 등록과 fetch를 true로 하였다.  그리고,  유레카서버의 url를 등록한다.

 

 

서비스 vs 인스턴스 ?

"서비스"는 분산 시스템에서 특정 기능을 수행하는 논리적인 단위를 말합니다.

예를 들어, 사용자 인증 서비스, 주문 처리 서비스, 결제 서비스 등이 있을 수 있습니다. 각 서비스는 독립적으로 구성되어 있으며, 다른 서비스와 상호작용합니다.

"인스턴스"는 서비스를 구성하는 실제 실행 가능한 단위를 말합니다. 예를 들어, 사용자 인증 서비스는 여러 대의 서버에서 실행될 수 있습니다. 이때, 각 서버는 사용자 인증 서비스의 "인스턴스"로 간주됩니다.

서비스와 인스턴스는 다음과 같은 특징을 가집니다.

  • 서비스는 논리적인 단위, 인스턴스는 물리적인 단위입니다.
  • 하나의 서비스는 여러 개의 인스턴스를 가질 수 있습니다.
  • 인스턴스는 각각 고유한 주소와 식별자를 가지며, 다른 인스턴스와 구분됩니다.

분산 시스템에서 서비스 디스커버리를 구현할 때는 각 서비스의 인스턴스 정보를 등록하고, 이를 조회하여 사용합니다. 이때, 각 서비스의 인스턴스 정보는 호스트 이름, IP 주소, 포트 번호 등으로 구성됩니다.

 

 

 

First Service, SecondService의  구현

 

두 프로젝트에   @EnableDiscoveryClient를 선언해 유레카 클라이언트임을 인식시킨뒤,

 

간단하게,  유레카 서비스에서 접근하면  포트번호를 반환하는지 확인해보자!

 

인스턴스를 클릭

 

 

잘 된다! !

 

 

반응형