Wonuk 2023. 2. 3. 20:57
반응형
본 포스팅은 인프런
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의를 기반으로 작성된 포스팅입니다.

 

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) - 인프런 | 강의

Spring framework의 Spring Cloud 제품군을 이용하여 마이크로서비스 애플리케이션을 개발해 보는 과정입니다. Cloud Native Application으로써의 Spring Cloud를 어떻게 사용하는지, 구성을 어떻게 하는지에 대해

www.inflearn.com

 


개요

API Gateway 서비스는 사용자가 설정한 라우팅 설정에 따라서

각각 엔드포인트로 클라이언트를 대신해서 요청하고

다시 클라이언트에게 전달해주는 Proxy 역할을 하게된다.

 

시스템의 내부 구조는 숨기고, 외부의 요청에 대해서

적절한 형태로 가공해서 응답할 수 있다는 장점을 가지고 있다.

 

아래 사진은 마이크로소프트사의 Cloud Architecture에 대해서 설명한 그림이다.

마이크로 서비스가 3가지가 있을 때 클라이언트 측에서 직접 호출하는 그림이다.

만약 새로운 마이크로 서비스가 추가가 되거나 혹은 기존의 서비스 주소가 변경되거나

파라미터 인자값이 변경되었다면,

마이크로 서비스가 독립적으로 빌드와 배포되어 문제가 없지만

클라이언트 측에서 문제가 발생한다.

 

클라이언트에서 마이크로서비스(엔드포인트)를 직접 호출하고 있다면

클라이언트측 어플리케이션도 함께 수정 배포가 되어야한다.

따라서 단일 진입점 형태로 개발하는것이 필요해졌다.

 

서버단의 중간에 Gateway 역할을 하는 일종의 진입로인 API Gateway를 두고

각각의 마이크로 서비스로 요청되는 모든 정보에 대해서

일괄적으로 처리할 수 있게된다.

 

어떠한 방식으로든 직접적으로 마이크로 서비스를 호출하지 않고,

클라이언트는 API Gateway만 상대한다.

 

API Gateway 사용시 장점

  • 인증 및 권한 부여
  • 서비스 검색 통합
  • 응답 캐싱
  • 정책, 회로 차단기 및 QoS 다시 시도
  • 속도 제한
  • 부하 분산 - Load Balancing
  • 로깅, 추적, 상관 관계
  • 헤더, 쿼리 문자열 및 청구 변환
  • IP 허용 목록에 추가

Netflix Ribbon 개요

  • Spring Cloud에서의 MSA간 통신
    - 하나의 서비스가 다른 마이크로 서비스를 호출하기위해 만들어진 방법
    1) RestTemplate
    2) Feign Client

 

1. RestTemplate

RestTempalte은 전통적으로 하나의 Web Application에서

다른 Application을 사용하기 위해서 자주 사용되었던 API이다.

 

2. Feign Client

Spring Cloud에서는 Feign Client라는 API를 이용하여

다른 서비스들을 호출할 수 있는데 위와같이

특정 인터페이스를 하나 만들고 외부로 호출하고싶은 추가적인

마이크로 서비스의 이름을 등록한다. 이것을 Feign Client라고 한다.

 

만약 user라는 서비스에서 FeignClient를 등록하고

store라는 서비스가 호출하겠다 라고한다면

굳이 RestTemplate처럼 직접적인 서버의 주소, 포트번호 등등의

값이 필요없이 마이크로 서비스의 이름으로 호출할 수 있게된다.

 

결과적으로 user라는 서비스에서 마치 자신이 가진 API인것처럼

사용이 가능해진다.

 

이러한 방법으로 Spring Cloud에서 마이크로 서비스간에

호출을 담당해왔지만 문제는 Load Balancing을 하기위해서

Load Balancer를 어디에 구축해야 하는가 였습니다.

 

Ribbon: Client side Load Balancer

초창기의 Spring Cloud에서는 이러한 로드 밸런서 역할을 해주는

별도의 서비스를 위해서 Ribbon 이라는 서비스를 제공했다.

 

하지만 Ribbon의 문제점은 최근의 Functional API

,React JAVA 방식과는 호환이 되지않는다.

쉽게 말해 비동기 처리가 되지않아서 최근엔 잘 사용하지 않는다. 

참고
Netflix Ribbon이라는 이름으로 개발되어
Spring Cloud 재단에 기부되었다.

- 서비스 이름으로 호출

   마이크로 서비스의 이름으로 클라이언트 안에서

   필요한 데이터를 호출할 수 있게되었다.

 

- Health Check

  해당하는 서비스가 잘 작동되는지 확인이 가능하다.

클라이언트가 직접 마이크로 서비스를 호출하는것은 좋지않기 때문에

API Gateway를 중간에 두어야 하는데 그 작업을 별도의 서비스나

시스템을 구축 하지않고, 클라이언트측 내부에 Ribbon을 구축하여

사용하기 시작했다.

 

  • Spring Cloud Ribbon은 Spring Boot 2.4에서 Maintenance 상태

Netflix Zuul

구성

- First Service

- Second Service

- Netflix Zuul -> Gateway 역할

  • Spring Cloud Ribbon은 Spring Boot 2.4에서 Maintenance 상태

 

 

 

 

반응형