Spring Cloud란?

  • MSA 구현을 위한 도구 모음
  • MSA의 개발, 배포, 운영에 필요한 아키텍쳐를 쉽게 구성할 수 있도록 지원하는 Spring Boot 기반 프레임워크
  • 분산 시스템 상에 필요한 여러 패턴들을 표준 패턴화 시켜 손쉽게 개발할 수 있도록 지원함

어떤 서비스가 사용되어야 할까?

  • Spring Cloud Config Server
    • 환경 설정관리를 위함
    • 다양한 마이크로서비스에서 사용하는 정보를 SpringCloudConfigServer를 통해 외부의 저장소에 저장할 수 있다.
    • 유지보수성이 높아진다.
  • Location transparency
    • 서비스 등록과 위치정보 확인 Naming Server(Eureka)
  • Load Distribution(Load Balancing)
    • Ribbon (Client Side)
    • Spring Cloud Gateway(권장)
  • Easier REST Clients
    • 각각의 서비스가 데이터를 주고 받는 방법(RestTemplate , Feign Client)
  • Visibility and monitoring
    • ELK 등등 (로그 추적 및 모니터링)
  • Fault Tolerance
    • Hystrix
      • 서비스의 지연과 장애에 대해 내성을 갖게 해주는 라이브러리

Spring Cloud Netflix Eureka

  • Service Discovery
    • 외부에서 다른 서비스들이 마이크로 서비스를 검색하기 위해 사용되는 일종의 전화번호책이다.
  • API gateway에다가 요청을 보내고 요청 정보가 서비스 디스커버리에 전달되어 필요한 서비스의 위치를 알려준다.

 

  • Eureka 서버 구동 확인 및 application.yml 

server:
  port: 8761

spring:
  application:
    name: discoveryservice

eureka:
  # 이 설정의 default가 true -> 자기 자신을 전화번호부에 등록하는 것은 의미 없는 행위
  client:
    register-with-eureka: false
    fetch-registry: false
  • Eureka 서버에 등록된 userService 구동 확인 및 application.yml 

server:
  port: 9001

spring:
  application:
    name: user-service

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

같은 서비스를 하나 더 띄워보자

  • application.yml 파일 내부의 port설정을 동적으로 추가해주는 코드를 넣고
  • edit configurations에서 환경변수를 추가해주어야 한다
    • 그렇지 않으면 포트번호가 겹치게 되어 실행 오류가 남
server:
  port: ${PORT}

spring:
  application:
    name: user-service

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

 

정상작동 확인

랜덤 포트를 이용해보자

  • port값에 0을 넣고 실행시키면 랜덤으로 포트가 지정이 된다.
  • 두 서비스를 돌리고 유레카 서버를 확인해 보니 하나의 서버만 떠있는 상황!
  • 해당 설정을 추가해주고 돌려주면 해결됨!

server:
  # 0의 의미 랜덤 포트를 사용하겠다는 의미! 포트 충돌을 의식하지 않아도 되는 장점이 있다.
  port: 0

spring:
  application:
    name: user-service

eureka:
  ############해당 설정 ###############
  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
  ############해당 설정 ###############
 client:
    register-with-eureka: true
    # Eureka 서버로 부터 인스턴스들의 정보를 주기적으로 가져올 것인지
    # 설정하는 속성 -> fetch-registry = true 갱신 된 정보를 받겠다는 설정
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka
  • 이러한 기능들을 사용하여 로드밸런싱 등을 쉽게 할 수 있다.

'DevOps > MSA' 카테고리의 다른 글

Apache kafka  (0) 2023.05.24
Spring Cloud Gateway - Load Balancer  (0) 2023.05.15
Spring Cloud Gateway - Filter 적용  (0) 2023.05.14
Spring Cloud Gateway  (0) 2023.05.14

+ Recent posts