사용자 도구

사이트 도구


msa:api_gateway_pattern

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
msa:api_gateway_pattern [2022/08/17 11:10]
kwon37xi
msa:api_gateway_pattern [2022/09/05 00:08] (현재)
kwon37xi [MSA - API Gateway Pattern]
줄 2: 줄 2:
   * [[https://microservices.io/patterns/apigateway.html|API gateway pattern]]   * [[https://microservices.io/patterns/apigateway.html|API gateway pattern]]
   * [[https://docs.microsoft.com/ko-kr/dotnet/architecture/microservices/architect-microservice-container-applications/direct-client-to-microservice-communication-versus-the-api-gateway-pattern|API 게이트웨이 패턴과 클라이언트-마이크로 서비스 간 직접 통신 | Microsoft Docs]]   * [[https://docs.microsoft.com/ko-kr/dotnet/architecture/microservices/architect-microservice-container-applications/direct-client-to-microservice-communication-versus-the-api-gateway-pattern|API 게이트웨이 패턴과 클라이언트-마이크로 서비스 간 직접 통신 | Microsoft Docs]]
-  * [[msa:gateway_routing_pattern|MSA - Gateway Routing Pattern]] 과 혼동하지 말 것.+  * [[https://docs.microsoft.com/ko-kr/azure/architecture/microservices/design/gateway|API 게이트웨이 - Azure Architecture Center | Microsoft Docs]] 
 +  * [[msa:gateway_routing_pattern|MSA - Gateway Routing Pattern]] 과 혼동하지 말 것. API Gateway Pattern 은 Gateway Routing Pattern 과 [[https://docs.microsoft.com/ko-kr/azure/architecture/patterns/gateway-offloading|게이트웨이 오프로딩 패턴]]을 포함한다.
   * [[msa:backend_for_frontend_pattern|MSA - Backend for Frontend Pattern]] 과 유사하다.   * [[msa:backend_for_frontend_pattern|MSA - Backend for Frontend Pattern]] 과 유사하다.
 +
 +===== Netflix GraphQL 로의 진화 / Evolution of an API Architecture =====
 +  * [[https://netflixtechblog.com/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2|How Netflix Scales its API with GraphQL Federation | Netflix TechBlog]]
 +
 +
 +
 +{{https://miro.medium.com/max/1400/1*8C_ygL_yixdcGLCJm-vjfw.png|Evolution of an API Architecture}}
 +===== Netflix의 Client Serving Server =====
 +  * Web Browser 혹은 App 등이 접속하는 서버를 API Gateway 로 만들면 안된다.
 +  * Client Server Adapter Code Server 를 두고 거기서 Client 에게 필요한 정보를 backend service 에 비동기/non-blocking-io 로 요청을 해서 모으고, 그 결과중 필요한 것만 필터링 해서 넘겨줘야 한다.
 +  * API Gateway 는 이 때 Client Server Adapter 보다 더 앞에서 Client 의 요청을 받아서 처리한다.
 +  * Netflix 는 Client 의 종류가 TV, PC, Android, iOS 등 너무 다양해서 API Gateway 를 통해서 요청을 받지만 현재 일반적인 서비스는 그런식으로 만드는 경우가 거의 없어서 **실질적으로 API Gateway는 필요가 없다**
 +  * 꼭 API Gateway 가 필요하다면 무조근 API Gateway 에 접속하는 사용자와 그 backend API의 사용자의 인증체계가 동일해야 한다. 그렇지 않으면 권한 필터링을 잘못하면 backend API의 중요 정보가 비록 로그인 사용자에게라도 다 노출되게 된다. ''/orders/<userId>'' 는 로그인을 했을 경우라도, 로그인 사용자가 아닌 다른 사용자 ID로 API 요청을 할 수 있기 때문이다.
 +  * Client Adapter Code 에서는 ''/orders'' API Endpoint만 노출하고 로그인 세션에서 ID값을 읽고 이를 다시 backend에 ''/orders/<userId>''로 넘겨주는 방식을 취해야 한다.
 +  * FAQ : 인증/권한이 문제라면, backend API가 권한을 처리하면 되는거 아닌가?
 +    * 아니다, backend API는 자기 본분에 충실해야 한다.
 +    * 또한, 인증 체계는 하나의 시스템에 2~3개씩 존재할 수 있다.(일반 사용자, admin, 제 3의 상품 제공업체 등)
 +    * 이 모든 인증 체계에 대해 모든 backend API가 인증/권한을 관리하는 것은 회사 전체의 개발 속도를 떨어뜨린다.
 +    * 또한 신규 인증 체계 추가시에도 모든 backend API가 이에 대한 처리를 추가해야 한다. 
 +    * 인증 체계 별로 Client Adapter 를 따로 만들고 거기서 일관되게 인증/권한을 처리하는게 개발 속도를 높이고 보안을 높이는 길이다.
 +  * [[https://medium.com/@Netflix_Techblog/embracing-the-differences-inside-the-netflix-api-redesign-15fd8b3dc49d|Embracing the Differences : Inside the Netflix API Redesign | by Netflix Technology Blog | Netflix TechBlog]] : Client <-> Server API 호출 구조 변경에 관한 설명
 +  * [[https://medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19|Optimizing the Netflix API. how we redesigned our API to help UI… | by Netflix Technology Blog | Netflix TechBlog]]
 +
 +[[https://github.com/Netflix/zuul/wiki/How-We-Use-Zuul-At-Netflix|{{:java:netflix_zuul.png|}}]]
 +
 +[[https://medium.com/@Netflix_Techblog/embracing-the-differences-inside-the-netflix-api-redesign-15fd8b3dc49d|{{:java:netflix-client-adapter.png|}}]]
 +
 +[[https://medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19|{{:java:optimizing-netflix-api-app-container.png|}}]]
  
 ===== 참조 ===== ===== 참조 =====
   * [[https://medium.com/design-microservices-architecture-with-patterns/api-gateway-pattern-8ed0ddfce9df|API Gateway Pattern. In this article, we are going to talk… | by Mehmet Ozkaya | Design Microservices Architecture with Patterns & Principles | Medium]]   * [[https://medium.com/design-microservices-architecture-with-patterns/api-gateway-pattern-8ed0ddfce9df|API Gateway Pattern. In this article, we are going to talk… | by Mehmet Ozkaya | Design Microservices Architecture with Patterns & Principles | Medium]]
  
msa/api_gateway_pattern.1660702215.txt.gz · 마지막으로 수정됨: 2022/08/17 11:10 저자 kwon37xi