API Gateway와 Routing(2)

Yoony·2022년 9월 1일
0

API Gateway 

목록 보기
1/2

API Gateway는 분산된 API 서버의 end point를 통합하고 기본적으로 API 호출을 위한 인증/ 인가 절차를 거칩니다. 그리고 API 호출을 라우팅할 수 있습니다! 알아봅시다.

Road Balancer

  • API gateway 뒷단에 다수의 API 서버가 있을 것입니다. 이때 다수의 API 서버로 부하를 분산하는 기능이 필요합니다. 각 서버의 하드웨어에 따라 부하의 가중치를 다르게 분산할 수도 있고, 로드 밸런싱이 일반적으로 가장 중요하게 쓰이는 상황은 서버 장애가 발생했을때 이를 감지하여 로드 밸런싱 리스트에서 제외하고 복구되었을때 다시 로드밸런싱 리스트에 포함하도록 한다.
    이러한 로드 밸런싱은 API 서버의 애플리케이션 상태를 인지해야 합니다. 따라서 IP 포트 상태뿐 아니라 쓰레드 수, 응답 시간 등으로 서버의 장애 상태를 파악할 수 있는 지표를 모니터링 해야합니다.

미들웨어로서 서비스 별 엔드포인트를 제공한다.

  • 같은 API를 여러개의 엔드포인트를 통해서 서비스를 제공할 수 있다. 예를들어 영상과 이미지를 처리하는 Media system을 다양한 서비스나 다양한 클라이언트에 제공할때, 각각 다른 서비스 별 또는 클라이언트 별로 다른 엔드포인트를 제공할 수 있다.

  • 예를들어, Media system을 사용할 서비스가 커뮤니티 게시글/ 상품 상세/ 상품 후기를 지원합니다. 다음과 같이 클라이언트의 종류에 따라서 분리될 수 있습니다. 그리고 엔드포인트별로 노출하는 url을 다르게할 수 있습니다.

/community/media/... , /product/media/..., /review/media/...

  • 멀티 서비스를 제공하는 플랫폼은 같은 API라도 클라이언트의 종류에 따라서 인증 방식, 보안 메커니즘, 포맷 형식이 다를 수 있기 때문에 각각 다른 API를 선별적으로 서비스 할 수 있도록 한다.

메시지 기반 라우팅

  • routing: 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정

  • 메시지 내용을 기반으로 라우팅을 할 수 있다. 메시지는 REST API를 기준으로 HTTP URL, HTTP Header, HTTP Body 3가지로 구분된다. 메시지를 기반으로 라우팅 하기 위해서는 API gw가 이 메시지를 parsing 해야한다.

  • 예를들어 글로벌 단위로 배포되는 시스템의 경우 country_code가 HTTP Body에 JSON으로 들어가 있다고 했을 때, API 호출에 대해서 라우팅 정보를 추출하기 위해서 매번 HTTP Body에 있는 JSON을 gw가 parsing 해야한다. 이는 경량화 목적의 gateway 역할에 부담을 준다. 따라서, 라우팅 정보를 Header로 옮긴다면 body를 parsing 하지않고 header만 parsing 한후, body 정보는 라우팅되는 서버로 그냥 forwarding만 해도 된다.

특정 조건에 따라 country_code = "US" 라는 메시지를 기준으로 라우팅 한다고 가정했을때, 중앙 집중형 시스템의 경우 각 지역에 있는 api gateway를 두고, 클라이언트는 미국 gateway를 호출할 것이다. 이때 데이터 복제가 필요할 수 있는데, 미국에 있는 gateway를 호출하면서 gw가 미국 API 서버와 유럽 API 서버를 동시에 호출해서 업데이트성 트렌젝션을 모든 데이터 센터에 복제함으로써 API를 통한 데이터 복제가 가능해진다.

  • 따라서 메시지 기반 라우팅은 parsing에 대한 오버핸들링을 잘 고려하여, 가능한 HTTP URL이나 HTTP Header에 라우팅 필드를 넣는 것이 좋다.

  • HTTP Body의 데이터로 라우팅이 필요한 경우에는 호출 빈도가 적은 api라면 gateway에서 담당하고, 그게 아니라면 별도의 gateway 인스턴스, 즉 프로세스를 분리를 하거나 뒷단의 API 서버가 직접 라우팅을 하도록 할 수도 있을 것이다.

https://bcho.tistory.com/1005?category=431297
관련하여 잘 정리된 블로그의 도움을 많이 받았습니다. 좋은 글이니 읽어보세요 :)

다음 편에서는 공통로직 처리, 메시지 포맷 변환, 프로토콜 변환, aggregaion...등의 기능에 대해 작성해보겠습니다.

profile
Software Quality Engineer

0개의 댓글