Back-end/API

API GateWay

WantAirpod 2022. 4. 6. 17:39
반응형

목차

    API Gateway 란?

    최근 서비스는 마이크로서비스 아키텍처 형태로 독립적인 기능을 수행하는 작은 단위의 서비스로 나누어 개발하고 있습니다.
    작은 단위의 서비스로 분리함에 따라 서비스의 복잡도를 줄일 수 있으며, 변경에 따른 영향도를 최소화하면서 개발과 배포를 할 수 있다는 장점이 있습니다.
    하지만, 여러 서비스의 엔드포인트를 관리해야 하는 어려움이 있으며 각 서비스의 API에서 공통적으로 필요한 기능을 중복으로 개발해야 하는 문제가 있습니다.

    API Gateway를 이용하면 통합적으로 엔드포인트와 REST API를 관리 할 수 있습니다.

    모든 클라이언트는 각 서비스의 엔드포인트 대신 API Gateway로 요청을 전달합니다.

    API Gateway는 사용자가 설정한 라우팅 설정에 따라 각 엔드포인트로 클라이언트를 대리하여 요청하고 응답을 받으면 다시 클라이언트에게 전달하는 프록시 역할을 합니다.

    그뿐만 아니라 API Gateway는 엔드포인트 서버에서 공통으로 필요한 인증/인가, 사용량 제어, 요청/응답 변조등의 기능을 플러그인 형태로 제공하고 있습니다.
    플러그인을 사용하면 각 엔드포인트 API 서버가 구현하지 않아도 되기 때문에 개발자 입장에서는 개발 비용을 줄일 수 있습니다.

    TOAST API Gateway 살펴보기

    TOAST API Gateway는 크게 2가지 개념으로 엔드포인트를 관리하고 있습니다.

    • 도메인(Domain): 도메인은 하나의 엔드포인트 서비스를 관리하기 위한 개념입니다. 도메인은 도메인 키와 엔드포인트 정보를 설정할 수 있습니다. 도메인 키는 각 엔드포인트를 구분하여 라우팅하기 위한 키 값으로 이용됩니다.
    • 엔드포인트(Endpoint): 엔드포인트에서 제공하는 REST API를 관리하는 역할을 합니다.

    API Gateway 생성하기

    예시: 블로그 서비스

    다음과 같이 블로그 서비스는 3개의 엔드포인트로 서비스 구성되고 있다고 가정합니다.

    • account : 블로그 사용자들의 계정 정보를 관리하는 서비스
    • post : 블로그 글을 관리하는 서비스
    • storage: 포스트의 첨부파일(이미지, 도큐먼트 파일 등)을 관리하는 서비스

    blog-account 도메인 생성

    API Gateway를 생성하기 위해서는 가장 먼저 도메인을 생성해야 합니다. 3개의 서비스 중 account 서비스의 도메인 생성 예제입니다.

    blog-account 엔드포인트 생성

    엔드포인트를 생성하여 API Gateway를 통해 제공할 REST API를 설정합니다.

    blog-account 배포

    • 도메인과 엔드포인트 설정을 완료하면, 배포를 하여 서비스에 적용할 수 있습니다.

    플러그인

    API Gateway가 클라이언트로 부터 요청을 전달받으면 설정된 플러그인의 속성 그룹 순서대로 플러그인이 동작합니다.

    • Access Control 에서 제한된 사용자의 요청, 사용 제한 초과 시 요청을 거부합니다.
    • Authentification 에서 인증되지 않은 요청, 변조된 요청에 대해 요청을 거부합니다.
    • Custom 에서 요청/응답에 대한 메시지 변조를 하거나 사용자 정의 응답을 정의할 수 있습니다.
    • Proxy 에서 사용자의 API 서버로 요청을 포워딩하고 응답 값을 전달받아 요청자에게 전달합니다.

    Access Control

    IP ACL

    • 특정 클라이언트만 요청을 허용할 수 있도록 블랙/화이트리스트 방식의 IP 접근 제어 기능을 제공합니다.

    사용량 제한(Usage Limit)

    • 단위 시간(초 단위) 동안 호출 가능한 횟수만큼만 클라이언트가 API를 호출할 수 있도록 설정할 수 있습니다.
    • QoS(Quality of Service) 또는 엔드포인트 서버의 보호 목적으로 API 사용량을 제어할 수 있습니다.

    CORS(Cross-Origin Resource Sharing)

    • 동일 출처 정책(Same Origin Policy)에 의해 브라우저에서는 다른 도메인의 리소스를 요청할 경우 보안 문제를 발생시킵니다. 이를 우회하기 위해서는 CORS 규약에 의해 웹 브라우저와 서버 간 정의된 헤더와 함께 요청과 응답 주고 받아야 합니다. CORS 플러그인을 사용하면 엔드포인트에서 구현하지 않아도 되며, 변경이 발생하는 경우에도 쉽게 설정을 변경할 수 있습니다.

    Authentication

    사전 호출 API (Pre-call API)

    • API Gateway가 클라이언트의 요청을 엔드포인트로 포워딩하기 전, 설정한 사전 호출 API를 호출합니다.
      사전 호출 API의 응답 HTTP Status Code가 200 OK가 아닌 경우 요청을 거부합니다.
    • 사전 호출 API를 통해 사용자 정의 형식의 인증을 처리할 수 있습니다. (예: 세션 토큰의 유효성 검사)

    HMAC, JWT

    • 클라이언트의 요청이 중간에 변조되진 않았는지 무결성을 검증합니다.
      • HMAC 또는 JWT 플러그인에서 비밀키를 설정합니다.
      • 클라이언트는 비밀키를 이용하여 요청정보의 해시 값을 생성하여 요청 헤더에 추가하여 API Gateway로 요청을 전달합니다.
      • API Gateway는 클라이언트의 요청 정보와 사용자가 설정한 비밀키를 이용하여 해시 값을 생성합니다.
      • 클라이언트가 전송한 해시 값과 API Gateway가 생성한 해키 값이 일치하지 않은경우, 무결성이 보장되지 않은 것으로 보아 요청을 거부합니다.

    Custom Plugin

    Modify Header

    • 엔드포인트 서버로 전달되는 요청의 헤더값을 변조하여 엔드포인트로 요청할 수 있습니다.
    • 클라이언트로 전달되는 응답의 헤더값을 변조하여 클라이언트에 응답을 전달 할 수 있습니다.

    URL Rewrite

    • 클라이언트의 요청 URL을 변조하여 사용자의 엔드포인트 서버 URL로 요청을 포워딩할 수 있습니다.

    사용자 정의 응답 (User-defined Response)

    • 사용자가 정의한 응답 헤더와 본문(Body)을 응답하도록 설정합니다.

    통계

    API Gateway 콘솔> Dashboard 에서 각 도메인별 API 통계를 확인할 수 있습니다.


    API 호출 성공 수(HTTP 400미만), 실패 수(HTTP 4XX, 5XX) 그리고 평균 응답시간(ms)과 아웃바운드 네트워크 트래픽를 확인할 수 있습니다.
    통계를 통해 특정 엔드포인트의 REST API의 이상 동작이나 품질을 쉽게 확인할 수 있습니다.

     

     

    출처

    https://meetup.toast.com/posts/201

     

    API Gateway 소개 (TOAST Service 들여다 보기) : NHN Cloud Meetup

    최근 서비스는 마이크로서비스 아키텍처 형태로 독립적인 기능을 수행하는 작은 단위의 서비스로 나누어 개발하고 있습니다.

    meetup.toast.com

     

    반응형