Backend
API Gateway 서비스 알아보기
2021년 4월 5일
원문에서 보기 ↗- API Gateway는 여러 백엔드 엔드 포인트 서비스들의 게이트웨이 역할을 하여 API의 엔드 포인트를 하나로 통합할 수 있는 서비스입니다.
- API Gateway를 이용하면 다음과 같은 이점이 있습니다.
- API Gateway에서 제공하는 플러그인으로 백엔드 엔드 포인트 서비스의 코드 변경과 배포 없이 기능을 추가할 수 있습니다(HTTPS 암호화 통신, 인증, CORS, 요청/응답 가공, IP ACL 접근 제한 등).
- 대시보드에서 API 인입 요청 수, 평균 응답 시간, HTTP 상태 코드 그룹(2xx, 5xx…) 별 응답 수 등의 지표를 확인할 수 있습니다.
API Gateway 동작 방식

- 게이트웨이 클라이언트는 모든 요청(Request)을 API Gateway로 통합 요청합니다. API Gateway는 게이트웨이 클라이언트 요청과 매핑되는 리소스를 찾습니다.
- 요청에 백엔드 요청 사전 작업의 플러그인을 적용합니다.
- 요청을 백엔드 엔드 포인트로 전달합니다.
- 백엔드 엔드 포인트의 응답을 API Gateway가 전달받습니다.
- 백엔드 엔드 포인트의 응답에 프런트엔드 응답 사전 작업의 플러그인을 적용합니다.
- 게이트웨이 클라이언트로 응답을 전달합니다.
API Gateway 서비스 시작하기
1. 서비스 생성
- API Gateway 서비스는 API Gateway를 통해 서비스할 API를 관리하는 단위입니다.
- API Gateway 서비스마다 하나의 API 리소스와 여러 개의 스테이지를 관리할 수 있으며, 대시보드를 통해 API 지표를 확인할 수 있습니다.

2. 리소스 생성
- 리소스는 API Gateway를 통해 서비스할 API를 설계할 수 있습니다.
- 트리 형식으로 API 등록하여 API의 경로와 메서드를 쉽게 관리할 수 있습니다.
- 게이트웨이 클라이언트는 API Gateway 리소스에 정의된 API에 대해 요청을 할 수 있습니다.

- 경로 변수
- 경로 변수(Path variable)를 선언할 수 있습니다.
- 경로 변수를 선언하려면 리소스 경로를
{variableName}형식으로 생성합니다. - 백엔드 엔드 포인트 URL 경로에 동적 경로를 설정해야 한다면
${request.path.variableName}형식으로 설정할 수 있습니다. - 경로 변수는 플러그인에서도 사용할 수 있습니다.
- 경로 변수를 선언하려면 리소스 경로를
- 하위 경로를 포함하는 경로 변수를 선언할 수 있습니다.
- 개별 리소스 경로를 생성하지 않고도 특정 하위 경로에 포함된 모든 API를 연동할 때 유용합니다.
- 하위 경로를 포함하는 경로 변수를 선언하려면 리소스 경로를
{variableName+}형식으로 생성합니다.
- 경로 변수(Path variable)를 선언할 수 있습니다.
- 백엔드 > 엔드 포인트 타입
- HTTP(S): 리소스에 대해 연동할 백엔드 엔드 포인트 URL을 작성합니다.
- 사용자 정의 응답 : 정의한 응답(HTTP 상태 코드, 헤더, 본문(Body)을 응답합니다.

3.플러그인 설정
- 백엔드 요청 사전 작업 은 API Gateway가 백엔드 엔드 포인트에 요청을 전달하기 전 원본 요청을 가공할 수 있습니다.
- 백엔드 요청 사전 작업의 지원 플러그인
- CORS(Cross-Origin Resource Sharing, CORS): 다른 출처(Origin)의 요청을 허용할 수 있도록 CORS 관련 헤더를 설정할 수 있습니다.
- 요청 헤더 변경: 게이트웨이 클라이언트의 원본 요청에 헤더를 추가하거나 수정할 수 있습니다.
- 백엔드 요청 사전 작업의 지원 플러그인
- 프런트엔드 응답 사전 작업 은 게이트웨이 클라이언트에 응답을 반환하기 전 원본 응답을 가공할 수 있습니다.
- 백엔드 요청 사전 작업의 지원 플러그인
- 응답 헤더 변경: 백엔드 엔드 포인트의 원본 응답에 헤더를 추가하거나 수정할 수 있습니다.
- 백엔드 요청 사전 작업의 지원 플러그인

4. 스테이지 생성
- 스테이지는 리소스를 배포하는 단계입니다.
- 스테이지는 환경(Profile) 별 또는 버전별로 리소스를 배포할 수 있습니다. 그 외 다양한 용도로도 활용할 수 있습니다.
- 스테이지마다 고유한 API 엔드 포인트 URL이 제공됩니다.
- 사용 예시: 환경별로 스테이지 생성
- 스테이지마다 환경별 백엔드 엔드 포인트 URL을 설정할 수 있습니다.
- 알파 환경의 스테이지

- 사용 예시: 버전별로 스테이지 생성
- 스테이지마다 버전별 백엔드 엔드 포인트 URL을 설정할 수 있습니다.
- 기존 버전의 API(v1)를 유지하면서 새로운 버전의 API(v2)를 배포할 수 있습니다.
- v1

- v2

4. 스테이지 설정
- IP ACL : 클라이언트 IP에 대하여 단일 IP 또는 IP 대역을 설정하여 접근을 허용하거나 거부합니다.
- 인증
- HMAC : 게이트웨이 클라이언트의 요청에 대한 서명을 검증합니다.
- JWT : JWT 토큰의 서명과 클레임을 검증합니다.
- 초 당 요청 제한
- 초 당 요청 수를 제한하여 백엔드 엔드 포인트의 트래픽 과부하를 제한할 수 있습니다.
- 클라이언트 IP, 특정 요청 헤더의 값, 경로 변수 등의 다양한 제한 키 조건을 추가하여 사용할 수 있습니다.
- 사전 호출 API
- 사전 호출 API는 백엔드 엔드 포인트를 호출하기 전에 사용자가 지정한 API를 호출합니다. 응답 HTTP 상태 코드가 200 OK인 경우에만, 백엔드 엔드 포인트로 요청을 전달합니다.
5. 배포하기
설정된 스테이지를 API Gateway 서비스에 적용하려면 스테이지를 배포합니다. 
6. API 요청
스테이지 배포가 완료되면, API를 요청할 수 있습니다. 스테이지 URL을 확인 후 API를 호출합니다. 
7. 대시보드
API Gateway의 대시보드는 서비스의 스테이지별로 통계를 확인할 수 있습니다. 전체 API 호출 수, 성공/실패 API 호출 수, API 평균 응답 속도, 아웃바운드 네트워크 트래픽의 통계 데이터를 확인할 수 있습니다. 통계 데이터는 API 품질 관리 용도로 활용할 수 있습니다.
리소스 통계를 확인하면 각 API마다 통계를 확인할 수 있습니다. 