[MSA] chapter 3_Spring Cloud에서의 MSA 통신 방식: Ribbon과 Zuul

Updated:

Categories:

Tags: ,

📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]

인프런 Dowon Lee님의 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의를 듣고 정리한 필기입니다.😊
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의 들으러 가기👩‍🏫

API Gateway

  1. 위 그림에서 첫번째는 client 가 직접 microservice와 통신한다면
  2. 두번째는 다양한 클라이언트들(모바일 앱, 웹 앱)이 존재하고, 이 클라이언트들이 각각 API Gateway를 통해 마이크로서비스에 접근할 수 있다.
    • API Gateway가 각기 다른 마이크로서비스로 트래픽을 라우팅하며, 각 마이크로서비스는 독립적으로 배포된 컨테이너 환경에서 구동된다. API Gateway가 부하 분산, 보안, 로깅, 캐싱 등을 처리하여, 클라이언트는 Gateway를 통해 일관된 방식으로 여러 서비스를 사용할 수 있다.
    • 결국 API Gateway는 클라이언트와 마이크로서비스 간의 연결 허브 역할을 하며, 보안, 성능, 트래픽 관리와 같은 다양한 기능을 제공하여 MSA 환경에서 중요한 역할을 한다.

API Gateway의 주요 기능

API Gateway는 다양한 클라이언트 요청을 중앙에서 관리하고, 각 마이크로서비스로 안전하게 라우팅하는 역할을 한다.

  • 인증 및 권한 부여: 클라이언트의 요청이 적절한 권한을 가지고 있는지 검증하고, 인증된 요청만을 각 마이크로서비스로 전달한다.
  • 서비스 검색 통합: 클라이언트가 필요한 마이크로서비스의 위치를 찾을 수 있도록 지원한다. 보통 서비스 디스커버리와 연계하여 동적으로 서비스 위치를 검색한다.
  • 응답 캐싱: 반복되는 요청에 대해 응답을 캐싱하여 성능을 최적화하고, 응답 속도를 높인다.
  • 정책, 회로 차단기 및 QoS(서비스 품질) 다시 시도: 서비스 접근을 정책적으로 제한하고, 특정 서비스의 장애 시 자동으로 회로를 차단하거나 재시도하는 등 서비스 품질을 보장한다.
  • 속도 제한: 클라이언트 요청의 속도를 제어하여 서버 과부하를 방지한다.
  • 부하 분산: 여러 인스턴스로 구성된 마이크로서비스에 요청을 분산하여 트래픽을 효율적으로 처리한다.
  • 로깅, 추적 및 상관 관계 관리: 각 요청의 로그를 기록하고, 마이크로서비스 간 호출 추적을 통해 문제 진단 및 성능 분석을 돕는다.
  • 헤더, 쿼리 문자열 및 청구 변환: 클라이언트 요청의 헤더나 쿼리 문자열을 변경하거나 필요에 따라 요청 형식을 변환하여 각 마이크로서비스에 전달한다.
  • IP 허용 목록 추가: 특정 IP만 접근할 수 있도록 허용 목록을 설정하여 보안을 강화한다.

Spring Cloud에서의 MSA 통신 방식: Ribbon과 Zuul

Spring Cloud는 마이크로서비스 간의 통신을 위해 여러 가지 방법을 제공하며, 주요 방식으로는 RestTemplateFeign Client를 사용해 왔다. 여기에 서비스 간의 부하를 분산시키기 위한 로드 밸런서가 필요했는데, 초기 Spring Cloud에서는 이를 위한 솔루션으로 RibbonZuul을 도입했다. 하지만 Spring Boot 2.4 이후로는 유지보수 상태로 전환되어, 현재는 Spring Cloud Load BalancerSpring Cloud Gateway로 대체되고 있다.


1. Ribbon: 클라이언트 측 로드 밸런서 (Client-side Load Balancer)

Ribbon은 Netflix에서 개발한 로드 밸런서로, Spring Cloud에 기여되어 MSA 환경에서 널리 사용되었다. 클라이언트 측 로드 밸런서로 동작하며, 클라이언트가 마이크로서비스의 이름을 통해 요청을 보내면 Ribbon이 각 서비스 인스턴스로 트래픽을 분산한다.

  1. 기능
    • 서비스 이름 호출: Ribbon은 서비스의 이름을 기반으로 요청을 보낼 인스턴스를 선택하여 로드 밸런싱을 수행한다.
    • Health Check: 각 서비스의 상태를 주기적으로 체크하여, 정상적인 인스턴스로만 요청을 전달한다.
  2. 유지보수 상태로 전환
    • Spring Boot 2.4부터 Ribbon은 Maintenance 상태로 더 이상 업데이트나 기능 개선이 이루어지지 않으며, 새로운 프로젝트에서는 Spring Cloud Load Balancer 사용이 권장된다.

2. Zuul: API Gateway 역할

Zuul은 Netflix에서 개발한 API Gateway 솔루션으로, 클라이언트 요청을 적절한 마이크로서비스로 라우팅하는 역할을 한다. Zuul은 초기 Spring Cloud에서 API Gateway의 역할을 수행하며, 인증, 로깅, 라우팅 등의 기능을 제공했다.

  1. 기능
    • 라우팅 및 필터링: 클라이언트의 요청을 퍼스트 서비스나 세컨드 서비스 등으로 라우팅하며, 요청 전후로 다양한 필터를 적용할 수 있다.
    • API Gateway 기능: Zuul은 API Gateway로서의 역할을 수행해, 클라이언트가 직접 마이크로서비스에 접근하지 않고 중간에서 인증과 로깅, 보안 관리를 수행한다.
  2. 유지보수 상태로 전환
    • Spring Boot 2.4 이후 Zuul도 Maintenance 상태로 더 이상 새로운 업데이트가 제공되지 않으며, Spring Cloud Gateway로 대체되었다.

현재 권장되는 대체 기술

Spring Boot 2.4 이후, Ribbon과 Zuul이 더 이상 유지보수되지 않기 때문에 대체 기술로 다음을 사용할 수 있다:

  • Spring Cloud Load Balancer: Ribbon을 대체하는 로드 밸런서로, 클라이언트 측에서 간단하게 로드 밸런싱을 수행할 수 있다.
  • Spring Cloud Gateway: Zuul을 대체하는 API Gateway로, 보다 강력한 기능과 비동기 처리 방식을 지원하며, 최신 Spring Cloud 프로젝트에서 권장된다.

Feign Client와 RestTemplate는 특정 마이크로서비스가 다른 마이크로서비스의 API를 호출할 때 주로 사용되며 Zuul과 Ribbon은 클라이언트 요청을 각 마이크로서비스로 라우팅하는 데 사용한다.

Spring Cloud Gateway와 Spring Cloud Load Balancer는 비동기 처리, 높은 성능, 유지보수의 지속성, 그리고 최신 기술 트렌드와의 호환성을 이유로 Ribbon과 Zuul을 대체하게 되었다.

아무래도 2.7.0 버전부터 사용해왔고 프로젝트도 해당 버전으로 진행했기 때문에

zuul 이랑 Ribbon 을 통해서 실습하는 내용의 강의는 추후에 필요할 때 들을 예정이다.

그래서 해당 내용은 건너뛰고 Spring Cloud Gateway부터 수강 할 예정이다!






MSA 카테고리 내 다른 글 보러가기

Leave a comment