이 영역을 누르면 첫 페이지로 이동
일반인의 웹 개발일기 블로그의 첫 페이지로 이동

일반인의 웹 개발일기

페이지 맨 위로 올라가기

일반인의 웹 개발일기

웹 개발과 관련된 모든 이야기

[MSA] Service Discovery 구축하기 - Spring Boot + Netflix OSS Eureka Server

  • 2022.12.02 16:10
  • 개발 이야기/MSA
반응형

이전 글에서 이야기했듯이 MSA에서는 기본적으로

여러 서비스를 등록하고 등록한 서비스의 검색을 수행하는

서비스 디스커버리 서버(Service Discovery Server)가 필요하다.

 

디스커버리 서버 Client-Side 방식 중에서

가장 유명하고 구현이 쉬운

Netflix OSS Eureka 서버를 구축해보려 한다.


1. Service Discovery Server 프로젝트 생성

1-1. Service Discovery 프로젝트 생성

ServiceDiscovery 프로젝트를 생성하고

dependency 선택창에서 eureka를 검색해서 Eureka Server를 추가한다.

ServiceDiscovery 프로젝트

1-2. application.yml 설정

생성된 프로젝트 src/main/resources 폴더 하위에

application.properties 파일명을 application.yml로 변경한다.

 

해당 파일을 열어서 아래 내용을 추가한다.

server:
  port: 8761

spring:
  application:
    name: service-discovery

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

 

  • register-with-eureka : 유레카 서비스에 등록 여부
  • fetch-registry : 레지스트리 정보 캐싱 여부

1-3. Eureka Server 어노테이션 추가

아래와 코드와 같이 @EnableEurekaServer 어노테이션을 추가한다.

package com.discovery.exam;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class ServiceDiscoveryApplication {

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

}

 

2. Eureka Server 실행하기

이제 유레카 서버를 한번 실행해 보자.

Eureka Server

정상적으로 서버가 실행되어 http://localhost:8761로 접속하면

위 사진과 같이 Eureka 메인 화면이 나오게 된다.

 

이제 서비스를 만들어 유레카 서버에 등록해보자😀

 

3. Eureka Server에 Service 등록하기

3-1. Service 프로젝트 생성

EurekaService 프로젝트를 생성하고

dependency 선택창에서 eureka를 검색해서

Eureka Discovery Client를 추가하고 Spring Web도 추가한다.

EurekaService 프로젝트

3-2. application.yml 설정

동일하게 application.properties 파일명을 application.yml로 변경한다.

 

해당 파일을 열어서 아래 내용을 추가한다.

server:
  port: 8090
 
spring:
  application:
   name: eureka-service

eureka:
  instance:
    prefer-ip-address: true
  client:
    registryFetchIntervalSeconds: 5
    disable-delta: true
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

 

  • prefer-ip-address : 유레카 서버에 애플리케이션 이름에 매핑되는 호스트명 등록 여부
  • registryFetchIntervalSeconds : 유레카 서버에게 서비스 정보를 가져오는 주기
  • disable-delta : 유레카 서버에게 서비스 정보를 가져올 때 변경된 내용만 가지고 올지에 대한 여부

3-3. Eureka Client 어노테이션 추가

아래와 코드와 같이 @EnableDiscoveryClient 어노테이션을 추가한다.

package com.eureka.exam;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaServiceApplication {

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

}

 

3-4. Service 서버 실행

EurekaService 서버를 실행하고 http://localhost:8761로 접속하면

아래와 사진과 같이 EUREKA-SERVICE가 추가된 것을 확인할 수 있다.

(눈치챈 사람도 있겠지만 EUREKA-SERVICE는 application.yml의 spring.application.name 값이다.)

Service 등록

혹시나 아래와 같은 오류가 발생한다면

***************************
APPLICATION FAILED TO START
***************************

Description:

Field optionalArgs in org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration required a bean of type 'com.netflix.discovery.AbstractDiscoveryClientOptionalArgs' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'com.netflix.discovery.AbstractDiscoveryClientOptionalArgs' in your configuration.

dependency에 Spring Web을 추가하지 않아서 발생하는 오류다.

 

build.gradle 파일을 열어 아래와 같이 추가하고

프로젝트 선택하고 마우스 우클릭 Gradle > Refresh Gradle Project 하면 된다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
    	...생략
}

간단한 이론에 이어 실습을 해봤는데

구현 자체는 그리 어렵지 않게 구현이 가능했다😊

 

이어서 API Gateway도 구현해 볼 생각이다.

반응형

'개발 이야기 > MSA' 카테고리의 다른 글

[MSA] 모니터링 (Monitoring, Logging, Tracing)  (0) 2022.12.12
[MSA] API Gateway 구축하기 - Spring Boot + Spring Cloud Gateway  (0) 2022.12.02
[MSA] Config Server 이해하기 - Spring Cloud Config (4)  (0) 2022.11.22
[MSA] Service Discovery Server 이해하기 (3)  (0) 2022.11.22
[MSA] API Gateway 이해하기 - Spring Cloud Gateway (2)  (0) 2022.11.21

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [MSA] 모니터링 (Monitoring, Logging, Tracing)

    [MSA] 모니터링 (Monitoring, Logging, Tracing)

    2022.12.12
  • [MSA] API Gateway 구축하기 - Spring Boot + Spring Cloud Gateway

    [MSA] API Gateway 구축하기 - Spring Boot + Spring Cloud Gateway

    2022.12.02
  • [MSA] Config Server 이해하기 - Spring Cloud Config (4)

    [MSA] Config Server 이해하기 - Spring Cloud Config (4)

    2022.11.22
  • [MSA] Service Discovery Server 이해하기 (3)

    [MSA] Service Discovery Server 이해하기 (3)

    2022.11.22
다른 글 더 둘러보기

정보

일반인의 웹 개발일기 블로그의 첫 페이지로 이동

일반인의 웹 개발일기

  • 일반인의 웹 개발일기의 첫 페이지로 이동
반응형

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (47)
    • 사이드 프로젝트 (3)
      • 크롤링 (2)
    • 개발 이야기 (18)
      • MSA (7)
      • Spring Boot (3)
      • JPA (0)
      • Docker (1)
      • Javascript (2)
      • AWS (Amazon Web Services) (5)
      • Jenkins (0)
    • Database (4)
      • PostgreSQL (2)
      • MySQL (1)
      • Oracle (1)
    • 에러 정리 (4)
      • Docker (1)
      • JPA (1)
      • Python (1)
      • PostgreSQL (1)
    • 운영체제 (3)
      • Linux (3)
    • 게임 (8)
      • 마인크래프트(Minecraft) (2)
      • 팰월드(PalWorld) (6)
    • 워킹홀리데이 (6)
      • 일본 워킹 홀리데이 (6)

공지사항

인기 글

최근 글

정보

흔하디흔한개발자의 일반인의 웹 개발일기

일반인의 웹 개발일기

흔하디흔한개발자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 흔하디흔한개발자. Designed by Fraccino.

티스토리툴바