[MSA] API Gateway Service - (4)

2022. 7. 15. 11:24Software Architecture/MSA

반응형

이전 포스팅 링크 (Service Discovery)

 

이전에는 Service Mesh 부분의 Service Discovery를 다뤘다.

 

 

이번엔 API Gateway에 대해 다뤄보자.

 

 API Gateway

 

화질구지.. 죄송..

위 그림처럼 마이크로 서비스가 3개가 있다고 가정했을 때, 클라이언트 쪽에서 직접 호출을 한다고 보자

클라이언트에서 직접 마이크로서비스의 주소를 통해(앤드포인트) 파라미터 전달하고 요청하는 방식이다.

 

이 떄 새로운 마이크로 서비스가 추가되거나 기존 마이크로 서비스가 변경되었으면 ?

클라이언트에서 직접 호출하는 앤드포인트가 바뀔테니 클라이언트 측을 변경해야한다.

서비스가 변경될 때마다 매번 클라이언트쪽에서 설정을 하는 것은 번거로운 일이다.

또한 클라이언트의 요청이 아무런 검증 없이 직접적으로 서비스에 닿는 형태는 좋아보이지 않는다. 

 

그래서 나온 것이 API Gateway이다. 

 

  • 사용자가 설정한 라우팅 설정에 따라 클라이언트를 대신해서 서비스에 요청하고 응답을 받으면 다시 클라이언트로 전달해주는 proxy역할을 한다.

 

  • 시스템의 내부 구조는 숨기고 외부 요청에 대해 적절한 형태로 가공해서 응답할 수 있다는 장점이 있다.

 

  • 백엔드 쪽에 API Gateway를 진입로로 두고, 각각의 마이크로 서비스로 요청되는 모든 정보에 대해서 일괄적으로 처리할 수 있다

 

  • 직접적으로 마이크로서비스를 호출할 필요가 없다! 따라서 마이크로서비스가 변경되면 클라이언트쪽에서 앤드포인트 요청을 바꿀 필요가 없이 API Gateway만 수정하면 일괄적으로 바뀐게 적용된다.

 

간단하게 정리하자면 클라이언트와 서비스 사이의 관문이라고 볼 수 있다. 시스템의 내부 정보를 보호하고, 외부 요청을 적절하게 변환해서 서비스와 안전하고 일괄적이게 처리할 수 있는 녀석이다.

 

 

API GATEWAY의 이점을 살펴보자

 

  • 인증 및 권한 부여에 대해 단일작업이 가능

 

  • 서비스 검색 통합 (마이크로 서비스의 검색을 통합)

 

  • 응답할 수 있는 캐싱 정보 저장 가능

 

  • 일괄적인 정책, 회로 차단기 및 Qos 다시 시도
    (회로차단 ? 마이크로 서비스에 문제가 생기면 클라이언트 요청을 막음)
  • 속도 제한, 부하 분산(로드밸런싱)

 

  • 로깅, 추적, 상관관계
    하나의 서비스가 다른 서비스를 연쇄해서 호출하는 경우가 많다. 따라서
    어떤 마이크로 서비스가 ‘누구에 의해 호출’됐으며, 처음 진입점은 누구고 중간 진입은 누구고 다음은 누군지..에 대한 추적 관계가 아주 중요하다.

 

  • IP 허용 목록에 추가해서 허용할 수 있는 IP와 차단 IP를 판단한다.
    마이크로서비스에서도 모든 외부에서 다 데이터를 받지 않고 일종의 방화벽이나 proxy역할을 해주는 게이트웨이를 통해서 들어온 정보만 처리해주겠다 라고 등록도 가능함

 

 

 Spring Cloud Gateway

 

현재 스프링 클라우드에서 제시한 API Gateway 라이브러리이다.

 

이전에 Neflix에서 로드발란서 기술인 Ribbon과 Gateway 역할을 하는 Zuul을 스프링 재단에 기부했으나, 현재는 보류해둔 상태로 더는 사용할 수 없다.

 

Zuul 서비스는 동기방식이다. 물론 2.0부터는 비동기를 지원했지만 여전히 spring 쪽의 라이브러리와 호환성 문제가 생기게 되어 자체적으로 스프링에서 Spring Cloud Gateway를 만들어 사용했으며 이는 비동기 방식이다.

 

 

Spring cloud gateway의 내부 구조이다. 자세한 과정은 다음 포스팅에서 프로젝트를 생성하여 다뤄보도록 하자!

 

 

참고 레퍼런스

https://spring.io/projects/spring-cloud-gateway

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4