AWS Certified Developer - Associate (DVA-C02) #13 Domain 4-2 트러블슈팅과 최적화: 최적화와 문제 해결
#12 관측에서 무엇이 일어나는지 보는 법을 잡았습니다. 마지막 글은 성능을 개선하고 흔한 오류를 해결하는 법입니다. 시험은 성능,비용 최적화와 함께, 구체적인 오류 코드를 해석하는 능력을 묻습니다.
캐싱 계층 #
같은 데이터를 반복 조회한다면 캐시로 지연,비용,백엔드 부하를 줄입니다. 어느 계층의 캐시인지가 핵심 구분입니다.
| 캐시 | 위치 | 용도 |
|---|---|---|
| CloudFront | 엣지(전 세계) | 정적,동적 콘텐츠 CDN |
| API Gateway 캐시 | API 스테이지 | REST API 응답 캐싱 |
| ElastiCache | 애플리케이션 계층 | DB 앞 범용 인메모리 캐시(Redis/Memcached) |
| DAX | DynamoDB 앞 | DynamoDB 전용 마이크로초 캐시 |
- “전 세계 사용자에게 정적 자산을 빠르게” → CloudFront.
- “관계형 DB의 반복 쿼리 결과를 캐시” → ElastiCache.
- “DynamoDB 읽기를 마이크로초로” → DAX.
- “API Gateway의 같은 응답 반복 호출을 줄이기” → API Gateway 캐시.
캐싱 전략 #
- Lazy Loading(Cache-Aside). 캐시에 없으면 DB에서 읽어 채움. 쓰지 않는 데이터는 캐시하지 않음.
- Write-Through. 쓸 때 캐시도 함께 갱신. 항상 최신이지만 안 읽힐 데이터도 캐시.
- TTL. 만료로 오래된 데이터(stale)를 방지.
Lambda 성능 튜닝 #
| 손잡이 | 효과 |
|---|---|
| 메모리 설정 | 메모리를 올리면 CPU,네트워크도 비례해 증가. 종종 더 큰 메모리가 더 싸고 빠름 |
| 콜드 스타트 | 프로비저닝 동시성, 핸들러 밖 초기화 재사용 |
| 동시성 | 예약 동시성으로 격리, 스로틀링 방지 |
| 패키지 크기 | 작게 유지, 레이어로 의존성 분리 |
시험 핵심: Lambda는 메모리만 설정하고 CPU는 그에 비례합니다. “CPU가 부족해 느리다"의 답은 메모리를 올리는 것입니다. Lambda Power Tuning으로 비용,성능 최적점을 찾습니다.
자주 나오는 오류 코드 #
트러블슈팅 도메인은 오류 코드를 보고 원인을 맞히는 문항을 냅니다. 외워 두면 즉답할 수 있습니다.
| 코드 | 의미 | 대응 |
|---|---|---|
| 429 Too Many Requests / ThrottlingException | 스로틀링(API Gateway,SDK,서비스 한도) | 지수 백오프 재시도, 한도 상향 |
| ProvisionedThroughputExceededException | DynamoDB 용량 초과 | 용량 상향,키 분산,백오프 |
| 502 Bad Gateway | API GW 프록시 통합 Lambda 응답 형식 오류 | 응답 statusCode/body 형식 수정 |
| 504 Gateway Timeout | 통합 타임아웃(29초) 초과 | 처리 단축,비동기 패턴 |
| 403 / AccessDenied | 권한 부족 | IAM 정책,리소스 정책 확인 |
| ConditionalCheckFailedException | 조건부 쓰기 조건 불일치 | 낙관적 잠금 충돌 → 재시도 |
| ProvisionedConcurrency / TooManyRequestsException(Lambda) | 동시성 한도 초과 | 예약/계정 한도 조정 |
핵심 매핑 몇 가지:
- 502 = Lambda 응답 형식 문제(프록시 통합에서 잘못된 반환).
- 504 = 너무 오래 걸림(29초 통합 타임아웃).
- 429 = 스로틀링 → 지수 백오프.
- ConditionalCheckFailed = 동시 수정 충돌 → 재시도.
비용 최적화 포인트 #
- Lambda 메모리 적정화. 너무 작으면 느려서 오히려 비싸고, 너무 크면 낭비. Power Tuning으로 최적점.
- DynamoDB 용량 모드. 트래픽이 간헐적이면 온디맨드, 예측 가능하면 프로비저닝 + Auto Scaling.
- S3 수명 주기 + 스토리지 클래스. 오래된 데이터를 저렴한 계층으로.
- 캐싱. 백엔드 호출,데이터 전송 비용 절감.
시험 출제 패턴 #
- “Lambda가 느리고 CPU가 부족하다.” → 메모리 상향(CPU 비례).
- “API에서 502가 난다.” → 프록시 통합 Lambda 응답 형식.
- “API에서 504가 난다.” → 29초 타임아웃 초과, 처리 단축/비동기화.
- “DynamoDB 읽기에서 throughput exceeded.” → 용량,키 분산,백오프.
- “조건부 업데이트가 실패한다.” → 동시 수정 충돌, 재시도.
- “DynamoDB 반복 읽기를 마이크로초로.” → DAX.
- “전 세계 정적 콘텐츠 지연을 줄인다.” → CloudFront.
- “스로틀링(429)에 어떻게 대응.” → 지수 백오프 재시도.
자주 만나는 함정 #
1) Lambda CPU를 직접 설정하려 함 #
CPU는 직접 설정할 수 없습니다. 메모리에 비례합니다.
2) 502와 504 혼동 #
502는 응답 형식 오류, 504는 타임아웃입니다.
3) 캐시 계층 혼동 #
DynamoDB 전용은 DAX, 범용은 ElastiCache, 엣지는 CloudFront입니다.
정리 #
이번 글에서 잡은 것:
- 캐싱. CloudFront(엣지),ElastiCache(범용),DAX(DynamoDB),API GW 캐시. Lazy Loading vs Write-Through
- Lambda는 메모리 = CPU. 느리면 메모리 상향
- 오류 코드. 502(응답 형식),504(타임아웃),429(스로틀링),ConditionalCheckFailed(동시 충돌)
- 비용. 메모리 적정화, 용량 모드, 수명 주기, 캐싱
다음: 시험 팁 #
열세 편으로 네 도메인을 모두 다뤘습니다. #14 시험 팁에서는 시간 관리, 제약 키워드로 선택지를 거르는 법, 자주 헷갈리는 개념 쌍, 그리고 응시 직전 체크리스트를 정리하겠습니다.