Search

API Gateway

API Gateway
개발자가 API를 생성, 게시, 유지 관리, 모니터링 및 보안 유지를 할 수 있게 하는 서비스
RESTFul API 및 WebSocket API를 지원
모든 클라이언트는 각 서비스의 엔드포인트 대신 API Gateway로 요청을 전달
인증/인가, 사용량 제어, 요청/응답 변조 등 다양한 기능을 플러그인 형태로 제공

API Gateway - 제공 API 유형

API Gateway - 제공 API 유형
API Gateway에서 제공하는 API는 대표적으로 3종류가 있다.
HTTP API : API 프록시 기능정도만 필요할 때 적합. 단순 / 저렴하고 빠르다.
REST API : API 관리 기능, 요청/응답에 대한 제어가 필요할 경우 적합, 복잡 / 비싸고 느리다.
WebSocket API : 웹소켓 용도. 실시간 애플리케이션에서 주로 사용한다.

HTTP API

HTTP API
HTTP를 통신 방식으로 사용하는 API HTTP API라고 합니다.
EndPoint를 API Gateway로 활용하여 HTTP 요청을 통해서 서버에 접근할 수 있도록 만들어줍니다.
데이터만 주고 UI 화면이 필요하면 클라이언트가 별도로 처리합니다.
대부분의 Web API가 HTTP API로 이루어져있습니다.

REST API

REST API
REST API는 HTTP API에 여러가지 제약 조건이 추가된 형태
자원의 식별
메시지를 통한 리소스 조작
자기서술적 메세지
애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어
REST는 웹 서비스의 구조를 만드는데 활용되는 패턴이며 위의 4가지 제약조건을 만족해야 RESTFUL 하다라고 말할 수 있다.
대표적으로 CRUD 메서드 동작을 일컫는다.

WEBSOCKET API

WEBSOCKET API
요청을 받고 응답하는 REST API와 달리 WebSocket API는 클라이언트 앱과 백엔드 간의 양방향 통신을 지원한다.
웹 소켓은 사용자의 브라우저와 서버 사이의 인터액티브 통신 세션을 설정할 수 있게 하는 고급 기술 이다.
채팅 앱 및 스트리밍 대시보드와 같은 실시간 양방향 통신 애플리케이션을 구축하여 백엔드 서비스와 클라이언트 간의 메시지 전송을 처리하기위해 지속적인 연결을 유지 한다.

API Cache

API Gateway에는 클라이언트에게 전송한 데이터를 저장하는 "API 캐시" 기능이 있다.
REST API에서는 클라이언트가 보낸 동일한 요청에 대해 항상 동일한 응답을 보낸다.
API 캐시는 클라이언트에 보낸 응답을 API Gateway에서 캐시하고, 동일한 요청을 다시 받으면 캐시에 저장된 데이터를 보낸다.
이로써 Lambda 함수의 실행을 생략할 수 있어 응답 속도가 향상된다.

API Gateway의 VPC Link (프라이빗 연결)

API Gateway로 생성한 API는 사용자가 관리하는 VPC 외부에 배치된다.
따라서 생성한 API는 인터넷을 통해 Public Subnet 내의 AWS 리소스에는 접근할 수 있지만,
Private Subnet 내의 AWS 리소스에는 직접 접근할 수 없다.
API Gateway가 Private Subnet 내의 AWS 리소스에 접근할 수 있도록 하려면 "VPC Link"를 생성해야 한다.
이를 통해 API와 Private Subnet 내의 리소스 간에 인터넷을 경유하지 않는 보안 통신이 가능해진다.
VPC 링크를 생성할 때는 접근하고자 하는 AWS 리소스(예: EC2 인스턴스)를 직접 지정할 수 없다.
NLB 또는 ALB, Cloud Map를 대상으로 지정해야 한다. (API의 종류에 따라 지정할 수 있는 리소스가 다르다)
API 종류
지원하는 AWS 리소스
REST API
NLB
HTTP API
NLB, ALB, Cloud Map

Authorizer (Cognito 또는 Lambda의 인증 관리)

API Gateway의 Authorizer를 사용하면 API에 대한 접근/인증 제어를 구현할 수 있다.
Authorizer는 API 호출이 들어올 때마다 요청을 검사하고, 인증이 성공적으로 완료된 경우에만 API에 접근을 허용한다.
Authorizer에는 1)Cognito의 User Pool2)Lambda 함수를 사용하는 방법이 있다.
1.
Amazon Cognito : Cognito가 제공하는 관리형 인증 기능을 사용하므로 개발자는 인증 프로세스를 직접 관리할 필요가 없다.
2.
Lambda 함수 : 개발자가 인증 프로세스를 Lambda 함수로 직접 작성해야 한다. 커스텀한 로직으로 API에 대한 접근 제어를 구현할 수 있어 유연성이 높지만, 보안 대책 등 직접 관리 하기에 복잡성이 증가한다.

Custom domain (커스텀 도메인)

API Gateway에서 생성한 API에 접근하기 위한 URL에 커스텀 도메인(Custom Domain) 이름을 설정할 수 있다.
이를 통해 사용자는 API를 더 기억하기 쉬운 URL로 접근할 수 있다.
[설정 방법] AWS 콘솔 → API Gateway → Custom Domain Names → Create
사용자 지정 도메인 입력: 예:example.com
Edge-Optimized 또는 Regional 중 선택.
Edge-Optimized : CloudFront를 통해 전 세계에서 접근 가능.
Regional : 특정 리전에서만 접근 가능.
ACM(AWS Certificate Manager)을 사용하여 SSL 인증서 추가 (도메인에 대한 인증 필요).
SSL/TLS 인증서 준비
커스텀 도메인을 사용하려면 SSL/TLS 인증서를 준비해야 한다. 인증서는 AWS Certificate Manager(ACM)를 통해 관리되며, 이때 사용하는 인증서는 API의 엔드포인트 타입에 따라 다를 수 있다.
Regional Endpoints : 동일 region의 ACM에서 발행하거나 가져온 인증서를 사용한다.
Edge-Optimized Endpoints : us-east-1 region의 ACM에서 발행하거나 가져온 인증서를 사용한다. (CloudFront를 함께 사용하는 엔드포인트)
와일드카드 도메인 사용 (* wildcard)
API에 접근하기 위한 URL에 와일드카드* 문자를 포함한 여러 서브 도메인을 사용할 수도 있다.
이를 통해 하나의 커스텀 도메인만으로도, 서브도메인이 다른 여러 커스텀 도메인을 지원한다.
예시) 만약 "*.example.com" 와일드카드 도메인을 사용할 경우, 다음과 같은 서브도메인을 지원한다.
api.example.com
api2.example.com
mobile.example.com
와일드카드 도메인을 사용할 경우, 해당 도메인에 대한 와일드카드 인증서를 발행해야 하며, DNS 서버 측의 DNS 설정도와일드카드를 사용한 커스텀 도메인을 등록해야한다.

Canary Release Deployment

API 게이트웨이는 "스테이지"라는 개념을 사용하여 API의 다른 버전이나 개발 단계를 관리한다.
이를 통해 개발, 테스트, 프로덕션 등의 다른 환경에서 API를 개별적으로 관리할 수 있다.
Canary Release는 새로운 버전의 API를 단계적으로 릴리스하는 방법이다.
먼저, 기존의 프로덕션 스테이지에 새로운 API 버전을 배포하고 일부 트래픽을 새로운 버전에 보낸다.
예를 들어, 처음에는 20%의 트래픽을 새 버전에 할당한다.새 버전이 안정적으로 작동하는 것이 확인되면, 트래픽 비율을 점진적으로 증가시키고, 최종적으로는 모든 트래픽을 새 버전으로 이전한다.
만약 문제가 발생하면 즉시 이전 버전으로 되돌릴 수 있다.
Canary Release를 사용하면 리스크를 분산하고 사용자에 대한 영향을 최소화할 수 있다.

Mapping Template

Mapping Template은 API Gateway에서 요청(Request) 또는 응답(Response) 데이터를 변환하는 템플릿이다.
API Gateway에 요청 온 데이터를 변환해서 백엔드에 보내거나, 백엔드에서 API Gateway로 온 데이터를 변환하여 클라이언트에 반환하거든 할 수 있다.
즉, 여러가지 상황을 시뮬레이션 할 수 있다.
Mapping templateVTL(Velocity Template Language)을 사용하여 작성된다.
Velocity Template Language
예시 ?item=apple&quantity=3
쿼리 문자열 매개변수JSON 형식으로 변환해 백엔드(예: Lambda 함수)로 전달하기
{ "item": "$input.params('item')", "quantity": "$input.params('quantity')" }
JSON
복사

Mapping Templates 주요 기능

Request Transformation (요청 변환)
클라이언트가 보낸 요청 데이터를 API Gateway에서 다른 형식(예: JSON에서 XML)으로 변환하거나, 파라미터를 새로 추가하여 백엔드(예: Lambda 함수 등)으로 보낸다.
[예시]
클라이언트가 API Gateway를 통해 아래와 같은 JSON 요청 데이터를 보낸다.
{ "firstName": "Elon", "lastName": "Musk", "age": 5 }
JSON
복사
백엔드 서버에서는 "fullName"으로 받고 싶을 경우, Mapping Templates의 VTL 코드를 통해 아래와 같이 변환 시킬수 있다.
{ "fullName": "Elon Musk", "age": 5 }
JSON
복사
Response Transformation (응답 변환)
백엔드 서버(예: Lambda 함수 등)에서 받은 응답을 클라이언트에 보내기 위해 원하는 형식으로 변환한다.
[예시]
Lambda 함수에서 아래와 같은 JSON 응답을 받았을 경우
{ "statusCode": 200, "body": { "userId": "12345", "accountStatus": "active", "lastLogin": "2024-11-10T10:00:00Z" } }
JSON
복사
클라이언트에 보내기 위해서 Mapping Template을 통해 "accountStatus""lastLogin"만 보낼려고 한다.
{ "accountStatus": "active", "lastLogin": "2024-11-10T10:00:00Z" }
JSON
복사
Mock Response (모의 응답)
백엔드 호출 없이 API Gateway에서 다양한 응답을 시뮬레이션하는 방법
API Gateway에서 백엔드 서비스 호출 없이 모의 응답(mock response)을 설정하여 API를 테스트도 할 수 있다.
이를 통해 백엔드 서버가 아직 준비되지 않았을 때도 API 테스트를 할 수 있다.
[예시]
사용자가 특정 API 호출 시 고정된 응답을 받도록 하고 싶다. (백엔드 서버는 준비되지 않았다)
Mapping Template을 통해 클라이언트에는 아래와 같은 JSON 형식의 모의 응답이 반환된다.
{ "message": "This is a mock response", "statusCode": 200 }
JSON
복사