쵼쥬
쵼쥬의 개발공부 TIL
쵼쥬
전체 방문자
오늘
어제
  • 분류 전체보기 (276)
    • 코딩테스트 (192)
      • [알고리즘] 알고리즘 정리 (7)
      • [백준] 코딩테스트 연습 (126)
      • [프로그래머스] 코딩테스트 연습 (59)
    • Spring (71)
      • [인프런] 스프링 핵심 원리- 기본편 (9)
      • [인프런] 스프링 MVC 1 (6)
      • [인프런] 스프링 MVC 2 (4)
      • [인프런] 실전! 스프링 부트와 JPA 활용1 (7)
      • [인프런] 실전! 스프링 부트와 JPA 활용2 (5)
      • [인프런] 실전! 스프링 데이터 JPA (7)
      • [인프런] 실전! Querydsl (7)
      • JWT (5)
      • [인프런] Spring Cloud (17)
      • [인프런] Spring Batch (4)
    • Java (6)
      • [Java8] 모던인자바액션 (4)
      • [부스트코스] 웹 백엔드 (2)
      • [패스트캠퍼스] JAVA STREAM (0)
    • CS (6)
      • 디자인 패턴과 프로그래밍 패터다임 (2)
      • 네트워크 (4)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • BFS
  • 인프런
  • spring
  • 백준
  • 코딩테스트
  • 위클리 챌린지
  • 알고리즘
  • 자바
  • 백분
  • 스프링
  • 타임리프
  • 부스트코스
  • 누적합
  • 프로그래머스
  • jpa
  • 구현
  • MVC
  • Spring Data JPA
  • querydsl
  • 비트마스킹

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쵼쥬

쵼쥬의 개발공부 TIL

Service Discovery
Spring/[인프런] Spring Cloud

Service Discovery

2022. 5. 29. 15:27

Spring Cloud Netflix Eureka

Spring Registry

각 서비스를 Spring Cloud Eureka에 등록

각각의 서비스가 자신의 위치(IP) 정보를 특정 서버에 등록 Registry하는 작업을 말한다. Spring Cloud Eureka client를 사용

 

Service Discovery

Eureka가 해주는 역할을 Service Discovery 라고 함 

각각의 서비스의 위치가 등록된 서버에서 특정 작업을 위한 서버의 위치를 파악하는 작업이다. Spring Cloud eureka server을 사용

외부에서 다른 서비스들이 마이크로 서비스들을 검색하기 위해 사용한는 개념

 

 

 

Eureka Service Discovery - 프로젝트 생성

maven 프로젝트 

java 11

Dependencies로 Spring Cloud Discovery > Eureka Server 추가

 

 

@EnableEurekaServer 어노테이션으로 EurekaServer 자격으로 등록

package com.example.discoveryservice;

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

@SpringBootApplication
@EnableEurekaServer
public class DiscoveryserviceApplication {

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

}

 

application.yml

server:
  port: 8761

spring:
  application:
    name: discoveryservice # 각 마이크로 서비스의 고유한 ID 부여

# eureka 설정
# ture이면 eureka에 등록됨 (자기 자신에게 등록되는 꼴)
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false 

 

http://localhost:8761 -> Eureka 대쉬보드

 

 

 

User Service - 프로젝트 생성

Dependencies

lombok

spring web

spring boot dev tools

Eureka discovery Client

 

 

@EnableDiscoveryClient 추가

@EnalbeEurekaClient 는 @EnableDiscoveryClient를 좀더 상품화(규격화)한 어노테이션

package com.example.userservice;

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

@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {

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

}

 

application.yml

server:
  port: 9001

spring:
  application:
    name: user-service

eureka:
  client:
    register-with-eureka: true
    # Eureka 서버로부터 인스턴스들의 정보를 주기적으로 가져올 것인지를 설정하는 속성
    # true이면 갱신된 정보를 받겠다는 설정
    fetch-registry: true
    # Eureka 서버의 위치 폴더 설정
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

 

http://127.0.0.1:8761 확인

UP 작동 중

DOWN 작동 X

 

 

 

User Service - 등록

edit-configuration에서 동일한 어플리케이션 복사해서 실행

9001번 포트가 이미 실행 중이라서 중지됨 (포트 충돌)

 

해결 : vm Option에 추가

-Dserver.port=9002 => 포트번호를 9002로 변경해서 실행

 

http://127.0.0.1:8761 확인

둘다 정상 작동중 

클라이언트 요청이 오면  Discovery Service 에서 둘 중 어떤 인스턴스가 살아있는지 gateway나 routing service에게 전달해서 분산처리를 하게 됨 

 

 

인텔리제이 커맨드 라인에서 실행

mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003'

 

인스턴스 총 3개

 

터미널에서 실행

mvn compile package

java -jar -Dserver.port=9004 ./target/user-service-0.0.1-SNAPSHOT.jar

 

인스턴스 총 4개

 

하나의 서비스를 여러 포트로 실행하는 것이 귀찮은 작업!!

spring boot에서 간단하게 하는 처리 방법 (random port) 제공

 

 

User Service - Load Balancer

application.yml

server:
  port: 0 # random port 실행함

터미널(port 57848 확인가능)

0번 포트에 마우스 올리면 아래서 확인가능

❯ mvn spring-boot:run 으로 다시 실행 (random port로 옵션 필요 없음)

 

Eureka에서 확인하면 하나로 확인됨

ip + Service Name + port번호로 status가 구성되어 있어서 인스턴스는 한개 밖에 보이지 않게 됨

 

해결 : application.yml 에 추가 

eureka:
  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}

instance-id를 설정해줘서 status에 2개의 인스턴스가 나오게 됨(로드 밸런싱) -> 라운드 로빈방식으로 처리

링크에 마우스 올리면 하단에서 ip와 포트번호 확인가능

 

'Spring > [인프런] Spring Cloud' 카테고리의 다른 글

Catalogs, Orders Microservice  (0) 2022.06.19
Users Microservice  (0) 2022.06.18
E-commerce 어플리케이션  (0) 2022.06.18
API Gateway Service  (0) 2022.06.17
Microservice와 Spring Cloud 소개  (0) 2022.05.28
    'Spring/[인프런] Spring Cloud' 카테고리의 다른 글
    • Users Microservice
    • E-commerce 어플리케이션
    • API Gateway Service
    • Microservice와 Spring Cloud 소개
    쵼쥬
    쵼쥬

    티스토리툴바