API 게이트웨이/프론트엔드용 백엔드

in kr-dev •  3 years ago 

문맥

마이크로서비스 아키텍처 패턴을 사용하는 온라인 상점을 구축 중이고 제품 세부사항 페이지를 구현 한다고 가정해 봅시다 . 제품 세부 정보 사용자 인터페이스의 여러 버전을 개발해야 합니다.

  • 데스크톱 및 모바일 브라우저용 HTML5/JavaScript 기반 UI - HTML은 서버 측 웹 애플리케이션에서 생성됩니다.
  • 기본 Android 및 iPhone 클라이언트 - 이러한 클라이언트는 REST API를 통해 서버와 상호 작용합니다.

또한 온라인 상점은 타사 애플리케이션에서 사용할 수 있도록 REST API를 통해 제품 세부 정보를 노출해야 합니다.

제품 세부 정보 UI는 제품에 대한 많은 정보를 표시할 수 있습니다. 예를 들어, 실행 중인 POJO에 대한 Amazon.com 세부 정보 페이지에는 다음이 표시됩니다.

  • 제목, 저자, 가격 등 책에 대한 기본 정보
  • 책 구매 내역
  • 유효성
  • 구매 옵션
  • 이 책과 함께 자주 구매하는 기타 품목
  • 이 책을 구매한 고객이 구매한 다른 항목
  • 소비자 평가
  • 판매자 순위

온라인 상점은 Microservice 아키텍처 패턴을 사용하기 때문에 제품 세부 정보 데이터는 여러 서비스에 분산됩니다. 예를 들어,

  • 제품 정보 서비스 - 제목, 작성자 등 제품에 대한 기본 정보
  • 가격 서비스 - 제품 가격
  • 주문 서비스 - 제품 구매 내역
  • 재고 서비스 - 제품 가용성
  • 리뷰 서비스 - 고객 리뷰 …

결과적으로 제품 세부 정보를 표시하는 코드는 이러한 모든 서비스에서 정보를 가져와야 합니다.

문제

마이크로서비스 기반 애플리케이션의 클라이언트는 개별 서비스에 어떻게 액세스합니까?

  • 마이크로서비스에서 제공하는 API의 세분성은 클라이언트가 필요로 하는 것과 다른 경우가 많습니다. 마이크로서비스는 일반적으로 세분화된 API를 제공하므로 클라이언트가 여러 서비스와 상호 작용해야 합니다. 예를 들어, 위에서 설명한 것처럼 제품에 대한 세부 정보가 필요한 클라이언트는 수많은 서비스에서 데이터를 가져와야 합니다.

  • 클라이언트마다 다른 데이터가 필요합니다. 예를 들어, 제품 세부 정보 페이지 데스크탑의 데스크탑 브라우저 버전은 일반적으로 모바일 버전보다 더 정교합니다.

  • 네트워크 성능은 클라이언트 유형에 따라 다릅니다. 예를 들어 모바일 네트워크는 일반적으로 모바일이 아닌 네트워크보다 훨씬 느리고 대기 시간이 훨씬 더 깁니다. 물론 모든 WAN은 LAN보다 훨씬 느립니다. 이는 네이티브 모바일 클라이언트가 서버 측 웹 애플리케이션에서 사용하는 LAN과 성능 특성이 매우 다른 네트워크를 사용한다는 것을 의미합니다. 서버 측 웹 애플리케이션은 사용자 경험에 영향을 주지 않고 백엔드 서비스에 여러 요청을 할 수 있지만 모바일 클라이언트는 몇 개만 요청할 수 있습니다.

  • 서비스 인스턴스의 수와 위치(호스트+포트)는 동적으로 변경됩니다.

  • 서비스로 분할하는 것은 시간이 지남에 따라 변경될 수 있으며 클라이언트에서 숨겨야 합니다.

  • 서비스는 다양한 프로토콜 세트를 사용할 수 있으며 그 중 일부는 웹 친화적이지 않을 수 있습니다.

해결책

모든 클라이언트의 단일 진입점인 API 게이트웨이를 구현합니다. API 게이트웨이는 두 가지 방법 중 하나로 요청을 처리합니다. 일부 요청은 단순히 적절한 서비스로 프록시/라우팅됩니다. 여러 서비스로 확장하여 다른 요청을 처리합니다.

획일적인 스타일의 API를 제공하는 대신 API 게이트웨이는 각 클라이언트에 대해 다른 API를 노출할 수 있습니다. 예를 들어 Netflix API 게이트웨이는 요구 사항에 가장 적합한 API를 각 클라이언트에 제공하는 클라이언트별 어댑터 코드를 실행합니다.

API 게이트웨이는 보안을 구현할 수도 있습니다. 예를 들어 클라이언트가 요청을 수행할 권한이 있는지 확인합니다.

변형: 프론트엔드용 백엔드

이 패턴의 변형은 프론트엔드용 백엔드 패턴입니다. 각 클라이언트 종류에 대해 별도의 API 게이트웨이를 정의합니다.

이 예에는 웹 응용 프로그램, 모바일 응용 프로그램 및 외부 타사 응용 프로그램의 세 가지 종류의 클라이언트가 있습니다. 세 가지 다른 API 게이트웨이가 있습니다. 각각은 클라이언트용 API를 제공합니다.

결과 컨텍스트

API 게이트웨이를 사용하면 다음과 같은 이점이 있습니다.

  • 애플리케이션이 마이크로서비스로 분할되는 방식으로부터 클라이언트를 격리합니다.
  • 서비스 인스턴스의 위치를 결정하는 문제로부터 클라이언트를 격리합니다.
  • 클라이언트별 최적의 API 제공
  • 요청/왕복 횟수를 줄입니다. 예를 들어 API 게이트웨이를 사용하면 클라이언트가 단일 왕복으로 여러 서비스에서 데이터를 검색할 수 있습니다. 요청이 적으면 오버헤드가 줄어들고 사용자 경험이 향상됩니다. API 게이트웨이는 모바일 애플리케이션에 필수적입니다.
  • 여러 서비스를 호출하는 로직을 클라이언트에서 API 게이트웨이로 이동하여 클라이언트 단순화
  • "표준" 공개 웹 친화적 API 프로토콜에서 내부적으로 사용되는 모든 프로토콜로 변환

API 게이트웨이 패턴에는 몇 가지 단점이 있습니다.

  • 복잡성 증가 - API 게이트웨이는 개발, 배포 및 관리해야 하는 또 다른 움직이는 부분입니다.
  • API 게이트웨이를 통한 추가 네트워크 홉으로 인한 응답 시간 증가 - 그러나 대부분의 애플리케이션에서 추가 왕복 비용은 중요하지 않습니다.

문제:

알려진 용도

적용 예시

내 Microservices 패턴의 예제 애플리케이션 의 일부인 API 게이트웨이를 참조하십시오 . Spring Cloud Gateway를 사용하여 구현합니다.

출처 : https://microservices.io/patterns/apigateway.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Getting started on steem can be super hard on these social platforms 😪 but luckily there is some communities that help support the little guy 😊, you might like school of minnows, we join forces with lots of other small accounts to help each other grow!
Finally a good curation trail that helps its users achieve rapid growth, its fun on a bun! check it out. https://som-landing.glitch.me/