Mobile application : MyTodoList
- 나의 할 일 목록이라는 모바일 애플리케이션을 만든다고 해보자.
- 우리가 하고자 하는 것은 다음과 같은 요구 사항을 가지고 있다.
- HTTPS 엔드포인트를 가진 REST API를 노출하고 싶다.
- 서버리스 아키텍처로 구축하고 싶다.
- 원하는 경우 사용자가 S3에서 자신의 폴더와 직접 상호 작용하여 데이터를 관리할 수 있다.
- 관리형 서버리스 서비스를 통해 사용자도 인증할 수 있어야 한다.
- 사용자들은 할 일을 쓸 수도 읽을 수도 있지만 대부분 읽는다.
- 데이터베이스 레이어는 스케일링이 가능해야 하고 읽기 처리량이 매우 높아야 한다.
Mobile app : REST API layer

- 첫 번째는 시작하는 것이다. 모바일 클라이언트가 있고 REST HTTPS 작업에 대해 이야기했고, 이를 위해 Amazon API Gateway를 사용해 보자.
- 현재 고전적인 서버리스 API 방식으로 수행하는 좋은 방법이다.
- API Gateway는 기본적으로 서버리스 인프라를 스케일링하고 사용할 수 있도록 해주는 람다함수를 호출한다.
- Lambda는 데이터베이스에서 저장하고 읽을 수 있어야 한다.
- 그러러면 확장성이 뛰어나고 서버리스인 데이터베이스여야 하는데 그것이 바로 'DynamoDB'이다. - 위의 이미지에 백엔드로 DynamoDB가 있고, 일종의 인증 레이어도 진행될 것이다. 이를 위해 Amazon Cognito와 같은 서버리스 기술을 사용할 수 있다.
- 따라서 모바일 클라이언트는 Cognito에 연결하여 인증할 수 있다.
- 그런 다음 API Gateway가 Cognito를 사용하여 인증을 확인한다.
Mobile app : giving users access to S3

- 이제 사용자에게 Amazon S3 버킷에 대한 액세스 권한을 부여하려면 어떻게 해야 할까?
- 우리는 Amazon Cognito에 인증하는 모바일 클라이언트를 가지고 있으며 Cognito는 임시 자격 증명을 생성하여 이를 모바일 클라이언트에게 반환할 수 있다.
- 자격증명을 통해 모바일 클라이언트는 S3에서 파일을 저장하고 검색하 수 있으며 S3에서 자신만의 공간에 액세스 할 수 있다.
Mobile app : caching at the API Gateway

- 이제 앱이 스케일링되기 시작하며 더 많은 사용자를 확보하기 시작한다.
- 패턴을 살펴보면 읽기 처리량이 매우 높다는 것을 알 수 있다.
- 우리는 많은 RCU를 가지고 있고 할 일 목록은 별로 변하지 않는다.
- 기본적으로 읽기 처리량을 향상시키고 전반적인 비용을 줄이기 위해 이 아키텍처를 어떻게 변경할 수 있을까?
- 할 수 있는 일은 DAX를 캐싱 레이어로 사용하는 것이다.
- 위의 이미지 처럼 DynamoDB 직전에 DynamoDB DAX를 사용한다. - 기본적으로 캐싱 레이어가 있고 현재 너무 많은 읽기를 수행하고 있기 때문에 읽기는 DAX에 캐시된다. 따라서 DynamoDB에는 읽기 용량 단위가 많이 필요하지 않는다.
- 많은 읽기가 캐시되기 때문에 전체적으로 비용이 절감될 수 있으며 서버리스 방식으로 아키텍처를 지속적으로 개선할 수 있는 좋은 방법이다.
In this lecture
- 기본적으로 HTTPS, API Gateway, Lambda 및 DynamoDB를 활용하는 고전적인 서버리스 REST API 아키텍처를 위에서 살표보았다.
- 그런 다음 Cognito를 사용하여 임시 자격 증명을 생성했는데 이를 통해 제한된 정책이 있는 S3 버킷에 액세스 할 수 있다.
- 앱에 Cognito를 사용하면 DynamoDB 또는 Lambda에 직접 액세스 할 수 있다.
- 그리고 DAX를 사용하여 DynamoDB에서 읽기를 캐싱할 수 있다. 이는 매우 쉽게 구현할 수 있는 방법이며, 성능 향상뿐만 아니라 비용 절감 및 캐싱 기능도 제공할 수 있다.
- REST 요청은 매우 정적인 응답이 있는 경우 API Gateway 수준에서 수행할 수 있다.
- 마지막으로 Cognito로 전체 보안 작업을 수행할 수 있으며 Cognito는 API Gateway와 직접 통합된다.
'AWS(Amazon Web Service)' 카테고리의 다른 글
| [AWS] 솔루션 설계자 관점의 Serverless - Amazon Cognito (0) | 2024.12.18 |
|---|---|
| [AWS] 솔루션 설계자 관점의 Serverless - Step Functions (0) | 2024.12.17 |
| [AWS] 솔루션 설계자 관점의 Serverless - API Gateway (0) | 2024.12.16 |
| [AWS] 솔루션 설계자 관점의 Serverless - DynamoDB의 고급기능 (0) | 2024.12.15 |
| [AWS] 솔루션 설계자 관점의 Serverless - DynamoDB (0) | 2024.12.14 |