ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Cloud의 주요 모듈
    Spring/Cloud 2024. 8. 9. 17:31

    시작하며

    더보기

      마이크로 서비스 애플리케이션을 Spring Cloud를 사용해서 구현해 보려한다. 그 전에 Spring Cloud가 제공하는 주요 기능들이 무엇이 있고, 어떤 역할을 하는지 정리해 보려고 한다. 이렇게 뼈대를 잡고 들어가는 것이 큰 도움이 되리라 생각한다.

     

    목차

     

     

    1. Spring Cloud란?

      Spring Cloud는 마이크로 서비스 개발을 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장이다. 여러 모듈들을 제공해 마이크로 서비스 아키텍처를 쉽게 구현하고 운영할 수 있도록 도움을 준다.

     

      이제 어떤 기능들을 제공하는지 개인 프로젝트에 필요한 것들을 위주로 정리해보겠다.

     

    2. Spring Cloud의 주요 기능 및 모듈

      스프링이 제공하는 기능 및 모듈들은 다음과 같다. 아래 그림을 보면서 자세하게 설명하겠다.

    • 서비스 등록 및 디스커버리: Eureka, Consul, Zookeeper
    • 로드 밸런싱: Ribbon, Spring Cloud LoadBalancer
    • 서킷 브레이커: Hystrix, Resilience4j
    • API 게이트웨이: Zuul, Spring Cloud Gateway
    • 구성 관리: Spring Cloud Config
    • 분산 추적: Spring Cloud Sleuth, Zipkin
    • 메시징: Spring Cloud Stream

     

    서비스 등록 및 디스커버리: Eureka

      MSA에서는 각 서비스 간 통신을 한다. 따라서 각각의 서비스는 서로의 존재를 알아야 한다. 이를 위해 Eureka를 사용한다.

      Eureka는 각 서비스의 위치를 동적으로 찾아 관리해주는데, 각 서비스는 Eureka Server에 자신의 위치를 등록하고 다른 서비스는 이를 조회하여 통신을 하게 된다. 

     

    로드 밸런싱: Ribbon

      위 그림을 보자. Order App이 Product App을 호출할 때, App1을 호출할지 App2를 호출할지 결정해야 한다. 이것을 Ribbon Server에 어떤 알고리즘을 사용할지를 설정하면 Ribbon이 그에 맞게 로드 밸런싱을 해준다.

      참고로 Ribbon은 클라이언트 사이드 로드밸런서이고 위의 상황에서 Order App이 클라이언트 역할을 한다.

     

    서킷 브레이커: Resilience4j

      서킷 브레이커는 단어 자체에서 유추할 수 있듯이 전체적인 시스템 안정성을 유지하기 위한 패턴이다. 마이크로 서비스 간 호출 실패를 감지하고, 장애를 격리해 다른 서비스에 영향을 미치지 않게 한다. 

      R4j는 closed, open, half-open 이라는 서킷브레이커 상태로 호출 실패를 관리한다.

     

    API 게이트웨이: Spring Cloud Gateway

      API 게이트웨이는 클라이언트와 서비스 간의 단일 진입점 역할을 한다. 클라이언트의 요청을 받아 서버로 라우팅을 해주며 보안 및 요청 필터링 등을 처리한다. 

     

    구성 관리: Spring Cloud Config

      MSA에서는 여러 서비스들이 운영되어 분산돼 있기 때문에 설정 파일들을 관리하기 어렵다. 설정 파일들의 관리를 용이하게 하기 위해 Spring Cloud Config는 중앙 집중식 구성 관리를 제공한다. 각 서비스들의 설정들을 중앙에서 관리하고, 애플리케이션을 재시작하지 않고도 실시간으로 변경사항을 반영할 수 있다.

     

    분산 추적: Zipkin

      MSA에서는 여러 서비스가 협력하여 하나의 요청을 처리한다. 따라서 서비스 간 복잡한 호출 관계로 인해 문제가 발생했을 시 원인을 파악하기 어려울 수 있다. 따라서 분산 추적을 통해 각 서비스의 호출 흐름을 명확히 하고 성능 병목이나 오류를 빠르게 진단할 수 있다.

      Zipkin은 트레이스 데이터를 수집하여 시각화하는 분산 추적 시스템이다. 이를 통해 좀 더 편하고 명확하게 서비스 호출 관계 및 흐름을 파악할 수 있다.

     

    마치며

    더보기

      지금까지 Spring Cloud에서 제공하는 기능 및 모듈에 대해서 알아보았다. 프로젝트 시작 전 리마인드 목적으로 상당히 간략하게 정리했다. 생략된 부분이 많은데 각각의 모듈 별로 어떤 옵션들이 있고 코드 단에서 어떻게 설정할 수 있는지는 다음에 기회가 되면 정리해 보겠다.

Designed by Tistory.