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 Pool과 2)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 template은 VTL(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
복사














