오늘도 Developing on AWS 공인 교육을 이어서 들었다. 어제보다 내용이 훨씬 많아졌는데, DynamoDB 작업부터 Lambda, API Gateway까지 다뤘다. 저작권 문제가 있어서 교재 캡처나 복붙은 하지 않고, 내가 이해한 내용 위주로 정리해보겠다.
PutItem
새 항목을 생성하거나 기존 항목을 교체한다. 동일한 키를 가진 항목이 이미 있으면 그냥 덮어쓴다.
배치 작업
BatchGetItem : 하나 이상의 테이블에서 최대 100개 항목, 최대 16MB까지 읽기BatchWriteItem : 하나 이상의 테이블에서 최대 25개 항목, 최대 16MB까지 생성 또는 삭제배치 작업은 응답 대기 시간을 줄이기 위해 병렬로 처리한다.
GetItem
기본 키로 항목을 읽어온다. 일치하는 항목이 없으면 아무것도 반환하지 않는다. 기본값은 최종 읽기 일관성이고, 강력한 읽기 일관성이 필요하면 ConsistentRead를 true로 설정하면 된다.
UpdateItem
기존 속성 값을 업데이트하거나, 새 속성을 추가하거나, 기존 속성을 삭제할 수 있다. 단, 기본 키 속성은 업데이트할 수 없다. 지정한 키가 없으면 새 항목을 생성한다. 프로비저닝된 처리량은 업데이트 전후 항목 크기 중 더 큰 값을 기준으로 소비된다.
DeleteItem
기본 키로 단일 항목을 삭제한다. 조건을 지정하지 않으면 멱등적인 작업이라 여러 번 실행해도 오류가 발생하지 않는다. 조건부 삭제를 사용하면 특정 조건이 충족될 때만 삭제가 이루어진다.
기본값으로 DynamoDB 쓰기 작업(PutItem, UpdateItem, DeleteItem)은 비조건부다. 조건부 쓰기는 항목 속성이 하나 이상의 예상 조건을 충족할 때만 성공한다.
DAX (DynamoDB Accelerator)
최종적으로 일관된 데이터에 빠른 응답 시간을 제공하는 인 메모리 캐시다. 세 가지 주요 시나리오에서 활용된다.
ElastiCache
클라우드에서 Memcached 또는 Redis 프로토콜을 준수하는 서버 노드를 배포 및 실행하는 웹 서비스다.
| 유형 | 설명 |
|---|---|
| 인스턴스 | 전통적인 방식. 컴퓨팅 리소스를 완벽하게 제어 가능 |
| 컨테이너 | 완전한 가상 관리 시스템보다 작고 이동성이 있으며 관리가 쉬움 |
| 서버리스 | 서버 프로비저닝 없이 백엔드 코드 실행 가능 |
Lambda는 이벤트가 트리거하면 실행된다. 연결 가능한 이벤트 소스는 다음과 같다.
Lambda 함수 구조
핸들러 함수는 이벤트가 발생할 때마다 실행된다. 지원 런타임은 Node.js, Java, Python, .NET Core, Go, Ruby이며 커스텀 런타임도 만들 수 있다.
런타임이 하는 일:
Lambda 호출 모델
콜드 스타트 최소화
REST, HTTP, WebSocket API를 생성, 게시, 유지 관리, 모니터링, 보호하는 AWS 서비스다.
| API 유형 | 특징 |
|---|---|
| HTTP API | 대기 시간이 짧고 비용이 저렴. 간단한 용도에 적합 |
| REST API | 백엔드 HTTP 엔드포인트, Lambda, AWS 서비스와 통합. 기능이 많고 무겁다 |
| WebSocket API | 클라이언트 메시지 내용 기반으로 백엔드 호출. 채팅 프로그램 등에 주로 사용 |
제한(Throttling)
API 과부하를 방지하기 위한 두 가지 설정:
| 유형 | 설명 |
|---|---|
| AWS_PROXY | 프록시 방식. 통합 요청/응답 설정 불필요. 패스스루 |
| HTTP_PROXY | 프록시 방식. HTTP 백엔드로 패스스루 |
| AWS | 비프록시. 통합 요청/응답 모두 직접 구성 |
| HTTP | 비프록시. 데이터 매핑은 사용자 책임 |
| Mock | 백엔드 없이 응답 반환. API 테스트에 유용 |
배포된 REST API의 호출 URL 형식은 다음과 같다.
https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/
{restapi_id} : API 식별자
{region} : 리전
{stage_name} : 배포 스테이지 이름
API Gateway 콘솔의 TestInvoke 기능을 사용하면 배포 전에도 API를 테스트할 수 있다.
오늘 모듈 8~10까지 꽤 많은 내용을 배웠다. DynamoDB 작업 방식, Lambda 호출 모델, API Gateway 통합 유형이 핵심이었던 것 같다. 특히 Lambda의 동기/비동기 호출 차이와 API Gateway의 프록시 vs 비프록시 통합 차이를 잘 이해해두면 실무에서 많이 쓸 것 같다.
이번 velog는 AWS kiro를 통해 작성하였다. 배운내용을 Notion에 정리하고 정리 부분을 kiro를 통해 검토받고 작성하였다.