[AWS] API Gateway Mapping Templates란? 쉽게 정리 (Mock Response, Request Transformation, Response Transformation)
◇ 공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇
[Mapping templates - Mock Response]
백엔드 호출 없이 API Gateway에서 다양한 응답을 시뮬레이션하는 방법
Mapping templates for REST APIs
API Gateway의 Mapping Templates
Mapping Templates는 API Gateway에서 백엔드 서비스 호출 없이 모의 응답(mock response)을 설정하여 API를 테스트할 수 있는 템플릿이다.
그 외에도 API Gateway에 요청 온 데이터를 변환해서 백엔드에 보내거나, 백엔드에서 온 데이터를 변환하여 클라이언트에 반환하거든 할 수 있다. 즉, 여러가지 상황을 시뮬레이션 할 수 있다.
Mapping templates은 VTL(Velocity Template Language)을 사용하여 작성된다.
Velocity Template Language
VTL란?
VTL은 템플릿을 작성하고 데이터를 동적으로 처리하는 데 사용되는 템플릿 언어이다.
Apache Velocity라는 템플릿 엔진을 기반으로 하고 있다.
Mapping Templates 주요 기능
- Request Transformation (요청 변환)
- Response Transformation (응답 변환)
- Mock Response (모의 응답)
백엔드 서버에 보내는 데이터를 변환
Request Transformation (요청 변환)
클라이언트가 보낸 요청 데이터를 API Gateway에서 다른 형식(예: JSON에서 XML)으로 변환하거나, 파라미터를 새로 추가하여 백엔드(예: Lambda 함수 등)으로 보낸다.
[예시]
클라이언트가 API Gateway를 통해 아래와 같은 JSON 요청 데이터를 보낸다.
{
"firstName": "Elon",
"lastName": "Musk",
"age": 5
}
백엔드 서버에서는 "fullName"
으로 받고 싶을 경우, Mapping Templates의 VTL 코드를 통해 아래와 같이 변환 시킬수 있다.
{
"fullName": "Elon Musk",
"age": 5
}
벡엔드 서버에서 받은 데이터를 변환
Response Transformation (응답 변환)
백엔드 서버(예: Lambda 함수 등)에서 받은 응답을 클라이언트에 보내기 위해 원하는 형식으로 변환한다.
[예시]
Lambda 함수에서 아래와 같은 JSON 응답을 받았을 경우
{
"statusCode": 200,
"body": {
"userId": "12345",
"accountStatus": "active",
"lastLogin": "2024-11-10T10:00:00Z"
}
}
클라이언트에 보내기 위해서 Mapping Template을 통해 "accountStatus"
와 "lastLogin"
만 보낼려고 한다.
{
"accountStatus": "active",
"lastLogin": "2024-11-10T10:00:00Z"
}
벡엔드 서버 호출 없이 API Gateway에서 특정 응답 만들기
Mock Response (모의 응답)
백엔드 서버의 호출 없이 API Gateway에서 모의 응답을 반환할 수 있다.
이를 통해 백엔드 서버가 아직 준비되지 않았을 때도 API 테스트를 할 수 있다.
[예시]
사용자가 특정 API 호출 시 고정된 응답을 받도록 하고 싶다. (백엔드 서버는 준비되지 않았다)
Mapping Template을 통해 클라이언트에는 아래와 같은 JSON 형식의 모의 응답이 반환된다.
{
"message": "This is a mock response",
"statusCode": 200
}
AWS 공식 문서: https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings.html
🤔 문제
개발자가 모바일 앱을 만들고 있으며, Amazon API Gateway REST API를 사용하여 백엔드 서비스를 호출합니다. 개발 단계에서 통합 테스트를 위해 백엔드 서비스를 호출하지 않고 다양한 백엔드 응답을 시뮬레이션하려고 합니다.
어떤 솔루션이 가장 적은 운영 오버헤드로 이 요구 사항을 충족할 수 있을까요?
- AWS Lambda 함수를 생성하고, API Gateway proxy integration을 사용하여 일정한 HTTP 응답을 반환합니다.
- Amazon EC2 인스턴스를 생성하여 AWS CloudFormation 템플릿을 사용해 백엔드 REST API를 제공합니다.
- API Gateway 스테이지를 사용자 정의하여 요청에 따라 응답 유형을 선택합니다.
- 요청 매핑 템플릿(mapping template)을 사용하여 모의 통합 응답을 선택합니다.
정답
정답. 4번
Use a request mapping template to select the mock integration response.