[용어 정리] API Gateway

[용어 정리] API Gateway


마이크로 소프트 아키텍처의 이어지는 포스트

우리가 많이 사용하는 검색 포털 사이트의 메인 화면
  • 사용자 서비스



  • 뉴스 서비스






  • 실시간 급상승 검색어 서비스





  • 광고 서비스

  • 날씨 서비스



사용자는 메인 페이지를 보기 위해서 하나의 URL을 통해 서버에 요청을 보내지만 실제 사용자가 보게 도는 화면에는 다양한 종류의 서비스 결과가 있다.



만약 모놀리틱 아키텍처를 이용해서 이와 같은 요청을 처리하는 애플리케이션을 구현한다면 실제 요청이 도착하여 결과를 반환하기까지 서버는 다양한 종류의 쿼리를 DB에 보내게 됨

  • 이러한 방식은 애플리케이션 아키텍처 간단하다는 장점이 있지만 특정 서비스에 변경이 있을 경우 이 서비스를 포함하고 있는 모든 코드를 찾아서 수정해줘야 해야함... 귀찮..










만약 마이크로 소프트 아키텍처로 진행하면 요청에서 필요한 각 영역을 담당하여 처리함
이론적으로 가능할지 몰라도 이를 실제로 구현하다 보면 몇가지 어려움이 있음

  1. 클라이언트가 모든 마크로 서비스의 호스트명은 물론 end_point를 알고 있어여 함
    즉, 마이크로 서비스가 추가되거나 호스트정보가 변경되면 클라이언트가 가지고 있는 정보 역시 함께 수정해줘야 함
     
  2. 모든 마이크로 서비스의 주소를 저장해 두어야 하며, 요청을 보낼 때마다 해당 요청이 어떤 서비스에 보내는 것인지를 명시해 주어야 하기 때문에 소스 코드가 복잡해짐
     
  3. 모든 마이크로 서비스가 웹 통신에 적합한 프로토콜로 통신하지 않음
    일부 서비스들은 서비스 자체가 가지는 특성에 따라 더 알맞는 프로토콜을 사용함
    ex) 알림을 보내주는 서비스는 메시지 큐와 같은 프로토콜을 사용
     
  4. 두 개 이상의 마이크로 서비스가 통합되거나 하나의 마이크로 서비스가 두 개 이상으로 분리되는 경우 여기에 맞추어 코드를 수정하는것이 어려움

API GATEWAY


API GATEWAY는 이름에서도 유추할 수 있듯이 서비스로 전달되는 모든 API요청의 관문(Gateway)역할을 하는 서버
시스템의 아키텍처를 내부로 숨기고 외부의 요청에 대한 응답만을 적절한 형태로 응답

즉, 클라이언트는 내부 구조가 모놀로틱 아키텍처인지, 마이크로 소프트 아키텍처인지 알 필요가 없이 서로 약속한 형태의 API요청만을 서버로 보내면 됨


API Gateway의 장점

  • 클라이언트의 요청을 일괄적으로 처리
  • 전체 시스템의 부하를 분산 시키는 로드 밸런서의 역할
  • 동일한 요청에 대한 불필요한 반복잡업을 줄일 수 있는 캐싱
  • 시스템상을 오고가는 요청과 응답에 대한 모니터링
  • 시스템 내부에 아키텍처를 숨길 수 있음
이렇게 API Gateway를 이용하면 서비스 요청에 대한 처리를 하게되면 특정 서비스의 변경사항이 생기거나 서비스가 통합/분리 되더라도 클라이언트는 그 사실을 인지할 필요가 없이 API Gateway 내부의 변경사항만으로 처리가 가능



API Gateway의 단점

  • 구현하고 관리해야하는 요소가 하나 더 증가함
    • 마이크로소프트 기능이 추가되는경우, API Gateway에도 반영해 주어야 함
  • 성능상의 병목(bottleneck)지점이 될 수 있음

API Gateway 구현시 고려해야 할 점들

  • 비동기적이고 non-blocking I/O처리가 가능하도록 구현해야야 함
  • 개별 마이크로 서비스로 보내는 요청의 선후관계가 존재해야 함
    • ex) 포털 사이트를 띄우고 -> 메일 요청을 가져옴
  • 마이크로 서비스 아키텍처로 인해 분산된 서버의 상태와 여러가지 변수들로 인해서 일부 서비스에 장애가 발생하거나 응답속도 지연될 가능성이 높아질때 API Gateway의 적절한 처리가 필요
    • ex) 포털 사이트에서 추천 카페 목록만 장애가 발생하면 추천 카페 목록만 임시페이지로 띄움
  • 기존의 결과를 캐싱하여 재활용 할 수 있도록 설계하는 것이 중요

출처 : http://guruble.com/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4microservice-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EA%B7%B8%EA%B2%83%EC%9D%B4-%EB%AD%A3%EC%9D%B4-%EC%A4%91%ED%97%8C%EB%94%94/








댓글

이 블로그의 인기 게시물

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?

[Python] # -*- coding: utf-8 -*-를 쓰는 이유