MyTodoList
- 서버리스 아키텍처인 MyToList 라는 모바일 애플리케이션을 만들어보자.
- HTTPS 엔드포인트를 가진 Rest API 를 호출하며, 서버리스 아키텍처로 구축한다고 가정
- S3 에서 자신의 폴더와 직접 상호 작용하여 데이터를 관리할 수 있도록 만듥
- 관리형 서버리스 서비스를 통해 사용자도 인증할 수 있도록 만들기
- 사용자들은 Todo 를 쓸 수도 읽을 수도 있지만 대부분 읽기 작업
-> 여기서 성능과 관련해 할 일이 있을 수도 있다. DB 레이어는 스케일링이 가능해야 하고 읽기 처리량이 매우 높아야 한다
1. Rest HTTPS 작업
- 이를 위해 고전적인 서버리스 API 방식으로 수행하는 AWS API Gateway 를 사용
- API 게이트웨이는 기본적으로 서버리스 인프라를 스케일링하고 사용할 수 있도록 해주는 람다 함수를 호출해준다.
- Lambda 는 DB 에서 저장하고 읽을 수 있어야한다. 그러려면 확장성이 뛰어나고 서버리스인 DB 여야 하는데 그것이 바로 DynamoDB 이다
- + 로 인증 레이어를 진행하기 위해 AWS Cognito 와 같은 서버리스 기술을 사용할 수 있다. 따라서 모바일 클라이언트는 코그니토에 연결하여 인증할 수 있다.
- 그런 다음 API 게이트웨이가 Cognito 를 사용하여 인증을 확인한다.
- 이로써 매우 고전적인 서버리스 API 가 제공 되었다.
2. S3 버킷에 대한 액세스 권한 부여
- Cognito 는 임시 자격 증명을 생성하여 이를 모바일 클라이언트에게 반환할 수 있다.
- 그리고 이러한 자격 증명을 통해 모바일 클라이언트는 Amazon S3 에서 파일을 저장하고 검색할 수 있으며, S3 에서 자신만의 공간에 액세스할 수 있다.
- 우리는 즉, Cognito 와 S3 를 임시 자격 증명으로 사용하는 것이다.
3. 읽기 처리량 향상 및 비용을 줄이기 위한 아케텍처 변경
- 지금까지의 패턴은 앱이 스케일링되고, 더 많은 사용자를 확보하고, 패턴을 살펴보면 읽기 처리량이 매우 높다는 것을 알 수 있다. 그래서 우리는 많은 RCU 를 가지고 있는데, 할 일 목록은 별로 변하지 않는다. 즉, 자주 편집되지 않는다.
- 그래서 해당 아키텍처를 기본적으로 읽기 처리량을 향상시키고 전반적인 비용을 줄이기 위해 어떻게 변경할 수 있을까?
- DAX 를 Caching layer 로 사용하는 것 이다. 따라서 DynamoDB 직전에 DynamoDB DAX 를 사용한는데, 여기에는 기본적으로 캐싱 레이어가 있다. 현재 너무 많은 읽기를 수행하고 있기 때문에 읽기는 DAX 에 캐시된다.
- 따라서 DynamoDB 에는 읽기 용량 단위가 많이 필요하지 않는다. 즉 더 잘 스케일링할 수 있으며,
- 많은 읽기가 캐시되기 때문에 전체적으로 비용이 절감될 수 있으며, 이는 서버리스 방식으로 아키텍처를 지속적으로 개선할 수 있는 좋은 방법이다.
- 캐싱을 하는 다른 방법은 API Gateway 수준에서 응답 캐싱을 시작할 수도 있다.
-> 답변이 실제로 변경되지 않고 몇 가지 API 경로에 대한 몇 가지 응답 캐싱을 시작할 수 있다고 생각하는 경우. - 전반적으로 이러한 종류의 아키텍처는 서버리스가 얼마나 수행되는지, 캐싱이 나타나는 위치를 실제로 보여준다.
- 그리고 이 아키텍처에서는 우리가 관리하는 것이 아무것도 없다.
- 실제로 사용량에 따라 비용을 지불하고 DB 관리에 대해서는 전혀 생각하지 않으며, 이 모든 작업은 AWS 에서 수행된다.
정리
1. HTTPS, API Gateway, Lambda, DynamoDB 를 활용하는 고전적인 서버리스 REST API 아키텍처를 살펴보았다.
2. Cognito 를 활용하여 임시 자격 증명을 생성했는데, 이를 통해 제한된 정책이 있는 S3 버킷에 액세스할 수 있다.
3. 완전히 동일한 앱 패턴을 사용할 수 있다.
4. Cognito 를 사용하면 DynamoDB 또는 Lambda 에 직접 액세스할 수 있다.
5. DAX 를 사용하여 DynamoDB 에서 읽기를 캐싱할 수 있다.
'AWS' 카테고리의 다른 글
Amazon Rekognition (1) | 2024.11.01 |
---|---|
Amazon Databases (3) | 2024.10.31 |
AWS DynamoDB (0) | 2024.10.29 |
Amazon Lambda (1) | 2024.10.28 |
Amazon ECR 와 EKS (0) | 2024.10.28 |