기준: DVA-C02 시험 가이드오류 제보
Week 4에서 다룬 API Gateway는 단순한 HTTP 프록시가 아니다. REST API, HTTP API, WebSocket API라는 세 가지 독립적인 제품군이 서로 다른 패러다임을 구현하며, 각각 다른 인증 방식, 통합 유형, 성능 특성을 가진다. 이번 복습에서는 개별 개념의 재확인보다 경계 케이스와 선택 판단에 집중한다. DVA-C02는 "어떤 서비스를 쓸까"보다 "왜 이 설정이 틀렸는가", "이 오류가 발생하는 근본 원인은 무엇인가"를 묻는다. 아래 시나리오 문제들은 실제 시험에서 출제되는 방식과 같은 복합 조건 형태로 구성했다.
| 기능 | REST API | HTTP API | WebSocket API |
|---|---|---|---|
| 프로토콜 | HTTP/1.1 | HTTP/1.1 | RFC 6455 WebSocket |
| 통신 방향 | 요청-응답 | 요청-응답 | 양방향 |
| 비용(100만 호출) | ~$3.50 | ~$1.00 | 연결 시간 + 메시지 수 |
| Lambda Proxy 통합 | ✅ | ✅ | ✅ |
| VTL 매핑 템플릿 | ✅ | ❌ | ❌ |
| AWS Service 직접 통합 | ✅ | ❌ | ❌ |
| MOCK 통합 | ✅ | ❌ | ❌ |
| IAM 인증 | ✅ | ✅ | ✅ |
| Lambda Authorizer | ✅ | ✅ | ✅($connect만) |
| Cognito User Pool Authorizer | ✅ | ❌ | ❌ |
| JWT Authorizer | ❌ | ✅ | ❌ |
| API Key + Usage Plan | ✅ | ❌ | ❌ |
| Resource Policy | ✅ | ❌ | ❌ |
| mTLS | ✅ | ✅ | ❌ |
| WAF | ✅(직접) | ❌(CF 우회) | ❌ |
| 응답 캐싱 | ✅ | ❌ | ❌ |
| Request Validation | ✅ | ❌ | ❌ |
| Gateway Response 커스터마이즈 | ✅ | ❌ | ❌ |
| X-Ray Tracing | ✅ | ❌ | ❌ |
| Canary Deployment | ✅ | ❌ | ❌ |
| VPC Link 백엔드 | NLB만 | ALB/NLB/CloudMap | ❌ |
| CORS 자동 설정 | ❌(수동) | ✅ | N/A |
| Payload Format | Lambda Proxy 형식 | v1.0 또는 v2.0(기본) | 별도 |
| 시나리오 | 권장 인증 방식 |
|---|---|
| AWS Lambda/EC2가 다른 계정 API 호출 | IAM + SigV4 |
| 외부 OAuth2 / 자체 JWT 검증 | Lambda Authorizer (TOKEN) |
| 헤더 + 쿼리 + 경로 복합 검증 | Lambda Authorizer (REQUEST) |
| Cognito User Pool 사용자 (REST API) | Cognito User Pool Authorizer |
| Cognito/Auth0/Okta JWT (HTTP API) | JWT Authorizer |
| 파트너 API 사용량 추적 + 할당량 | API Key + Usage Plan |
| VPC 내부에서만 접근 허용 | Resource Policy (SourceVpce) |
| IP 화이트리스트 | Resource Policy (SourceIp) |
| 교차 계정 API 접근 | Resource Policy (Principal ARN) |
| IoT 디바이스, B2B 파트너 인증 | mTLS |
| SQL 인젝션·XSS 방어 | WAF (REST API만 직접) |
| 시나리오 | 통합 유형 |
|---|---|
| Lambda를 가장 단순하게 연결 | AWS_PROXY (Lambda Proxy) |
| Lambda 응답을 변환해서 클라이언트에 전달 | AWS (non-Proxy) + 응답 매핑 |
| DynamoDB/SNS/SQS 직접 호출 (Lambda 없이) | AWS (non-Proxy) + VTL |
| 외부 HTTP 서버 프록시 | HTTP_PROXY |
| 외부 HTTP 서버 + 응답 변환 | HTTP + 응답 매핑 |
| 개발/테스트용 하드코딩 응답 | MOCK |
| 메트릭 | 측정 대상 | 활용 |
|---|---|---|
Latency | 클라이언트 수신 ~ 응답 반환 (전체) | 전체 성능 모니터링 |
IntegrationLatency | API GW → 백엔드 호출 ~ 응답 | 백엔드 성능 분리 |
Count | 총 API 호출 수 | 트래픽 추세 |
4XXError | 400·401·403·429 등 클라이언트 오류 | 오용·인증 실패·스로틀링 탐지 |
5XXError | 500·502·503·504 등 서버 오류 | 백엔드 장애·타임아웃 탐지 |
CacheHitCount | 캐시에서 응답한 횟수 | 캐시 효율성 |
CacheMissCount | 백엔드 호출이 필요했던 횟수 | 캐시 효율성 |
Latency - IntegrationLatency가 크면 API GW 내부 처리(인증·VTL·캐시 조회)가 병목. IntegrationLatency 자체가 크면 백엔드가 느린 것.
배포(Deploy) 없으면 변경이 적용되지 않는다: REST API에서 리소스, 메서드, 통합, Authorizer를 변경해도 스테이지에 재배포하지 않으면 반영되지 않는다. HTTP API는 자동 배포된다.
API 키는 인증이 아니다: x-api-key 헤더는 클라이언트 식별과 사용량 추적 목적이다. 보안 수단으로 오해하면 안 된다. API 키 단독으로는 인가(authorization)를 제공하지 않는다.
Edge-Optimized API의 ACM 인증서는 반드시 us-east-1: Edge-Optimized 엔드포인트는 CloudFront를 통해 트래픽이 흐르므로, 커스텀 도메인의 SSL/TLS 인증서를 us-east-1 ACM에서 생성해야 한다. Regional/Private는 해당 리전 ACM.
WAF는 REST API에만 직접 연결 가능: HTTP API에는 WAF Web ACL을 직접 연결할 수 없다. CloudFront를 앞에 두고 CloudFront에 WAF를 연결하는 우회 방법을 써야 한다.
HTTP API Payload v2.0의 이벤트 구조가 다르다: httpMethod, resource, path 필드가 없다. 기존 REST API Lambda를 그대로 붙이면 KeyError 발생. payloadFormatVersion: "1.0"으로 설정하거나 코드를 수정해야 한다.
Lambda Authorizer REQUEST 타입의 캐시 키를 명시해야 한다: 캐시 키를 지정하지 않으면 캐싱이 작동하지 않아 매 요청마다 Authorizer Lambda가 호출된다.
Lambda Proxy 응답의 body는 반드시 문자열이어야 한다: json.dumps()를 호출해야 하며, dict 객체를 직접 넣으면 API Gateway가 직렬화하지 못한다.
WebSocket $disconnect 실행이 보장되지 않는다: 네트워크 강제 종료 시 $disconnect가 실행되지 않을 수 있다. DynamoDB TTL로 stale 연결을 자동 정리해야 한다.
WebSocket Idle Timeout 10분, Max Duration 2시간: 이 한도를 초과하면 연결이 강제 종료된다. 클라이언트는 Ping/Pong으로 idle timeout을 방지할 수 있다.
캐시 무효화(InvalidateCache)에 IAM 권한이 필요하다: 스테이지에서 requireAuthorizationForCacheControl을 활성화하면, execute-api:InvalidateCache 권한 없는 클라이언트가 Cache-Control: max-age=0을 보내도 403이 반환된다.
CORS는 통합 유형에 따라 처리 주체가 다르다: Lambda Proxy에서는 Lambda가 직접 CORS 헤더를 반환해야 한다. AWS_PROXY에서 API Gateway는 자동으로 CORS 헤더를 추가하지 않는다. Gateway Response를 사용하면 API Gateway 자체 오류(4XX 포함)에도 CORS 헤더를 추가할 수 있다.
DynamoDB 직접 통합 VTL에서 DynamoDB 타입 시스템을 처리해야 한다: DynamoDB 응답은 {"S": "value"}, {"N": "123"} 형식이다. VTL에서 이를 파싱해 클린 JSON으로 변환하지 않으면 클라이언트가 DynamoDB 내부 형식을 그대로 받는다.
| 도메인 | 관련 Week 4 주제 | 비중 |
|---|---|---|
| Domain 1: Development with AWS Services | Lambda Proxy 통합, VTL, DynamoDB 직접 통합 | 32% |
| Domain 2: Security | SigV4, Lambda Authorizer, Cognito Authorizer, Resource Policy, WAF, mTLS | 26% |
| Domain 3: Deployment | 스테이지, 카나리 배포, SAM 통합, Stage Variables | 24% |
| Domain 4: Troubleshooting | Latency vs IntegrationLatency, 429/504/502 오류 원인, Authorizer 캐시 | 18% |
선택지를 클릭하면 정답·해설이 펼쳐집니다.
문제 1
스타트업이 외부 파트너에게 API를 제공한다. 파트너 A는 월 10만 건, 파트너 B는 월 50만 건으로 API 호출을 제한해야 한다. 또한 파트너 B는 초당 100 요청, 파트너 A는 초당 20 요청으로 속도 제한이 필요하다. 가장 적절한 구성은?
문제 2
회사의 REST API Lambda 함수가 외부 결제 서비스에 의존한다. CloudWatch에서 5XXError가 증가하고 있으며, Latency는 29초에 가깝고 IntegrationLatency도 29초에 가깝다. 가장 가능성 높은 원인은?
문제 3
개발팀이 REST API에 DynamoDB 직접 통합(VTL)을 구현했다. API Gateway는 DynamoDB GetItem을 호출하고 응답을 클라이언트에 반환한다. 클라이언트 개발자가 응답이 {"Item": {"name": {"S": "홍길동"}, "age": {"N": "30"}}} 형식으로 오는 것에 불만을 제기했다. 어떻게 해결하는가?
문제 4
모바일 앱이 API Gateway REST API를 통해 데이터를 조회한다. Cognito User Pool로 인증한다. 같은 사용자가 동일한 데이터를 반복 조회할 때 Lambda 호출을 줄이고 싶다. 응답 캐싱을 설정했는데, 모든 사용자의 응답이 같은 캐시 값을 공유하는 문제가 발생했다. 원인과 해결책은?
문제 5
실시간 주식 거래 알림 시스템을 구축한다. 트레이더가 웹 브라우저에서 연결하면 서버가 가격 변동을 즉시 푸시해야 한다. 트레이더에서 서버로 메시지를 보낼 필요는 없다. 가장 적합한 아키텍처는?
문제 6
회사가 REST API에 WAF를 설정해 SQL 인젝션을 차단하려 한다. 그런데 일부 합법적인 요청도 차단된다. 팀은 차단된 요청의 패턴을 분석하고 WAF 규칙을 세밀하게 조정하고 싶다. 어떤 WAF 설정을 활성화해야 하는가?
문제 7
스타트업이 Next.js 백엔드 API를 AWS에 배포하려 한다. 각 API 경로를 별도 Lambda로 분리했으며, 요구사항은: (1) 낮은 비용, (2) Cognito 기반 JWT 인증, (3) 자동 CORS 설정, (4) 커스텀 도메인. 가장 적합한 API 유형은?
문제 8
Lambda Authorizer(TOKEN 타입, TTL 300초)를 사용하는 API가 있다. 보안팀이 특정 사용자의 JWT 토큰을 즉시 무효화해야 한다는 요청을 했다. 토큰은 아직 만료되지 않았다. 가장 빠른 방법은?
문제 9
WebSocket API 기반 실시간 채팅에서 특정 채팅방에 있는 사용자들에게만 메시지를 브로드캐스트해야 한다. DynamoDB에 연결 레지스트리가 있다. 가장 효율적인 DynamoDB 조회 방법은?
문제 10
팀이 API Gateway HTTP API와 Lambda 통합을 사용한다. 기존 Lambda 코드는 REST API에서 작동하던 코드로, event["requestContext"]["identity"]["sourceIp"]로 클라이언트 IP를 읽는다. HTTP API로 전환 후 해당 코드에서 오류가 발생한다. 근본 원인과 해결책은?
| 문제 유형 | 포함 문제 | 재학습 필요 시 |
|---|---|---|
| 인증 방식 선택 | 1, 8 | Day 18 |
| 통합 유형·VTL | 3 | Day 17 |
| 캐싱·스로틀링 | 4, 1 | Day 18 |
| 실시간 통신 설계 | 5, 9 | Day 19 |
| API 유형 선택 | 7 | Day 16, 19 |
| 트러블슈팅 (메트릭) | 2 | Day 18 |
| WAF·보안 | 6 | Day 18 |
| Payload Format | 10 | Day 19 |
| 점수 | 평가 |
|---|---|
| 9-10 | API Gateway 완전 이해. Week 5로 진행 |
| 7-8 | 우수. 틀린 문제의 Day 파일을 재확인 |
| 5-6 | 양호. Week 4 Day 16-19 함정 목록 재숙지 |
| 3-4 | 보통. Day 16-19 전체 재학습 권장 |
| 0-2 | Week 4 처음부터 재학습 필요 |