Q21. AWS 서버리스 아키텍처로 구현하는 고성능 전자상거래 웹사이트
AWS 자격증을 준비하는 여러분, 안녕하세요. 오늘은 전자상거래 웹사이트를 AWS 클라우드에서 효율적으로 구현하는 방법에 대해 알아보겠습니다. 특히 서버리스 아키텍처를 활용해 운영 오버헤드를 최소화하면서도 높은 성능을 달성하는 방법을 살펴보겠습니다.
문제 상황
Q21:
전자 상거래 회사는 AWS에서 하루 1회 웹 사이트를 시작하려고 합니다. 매일 24시간 동안 정확히 하나의 제품을 판매합니다. 회사는 피크 시간 동안 밀리초 지연 시간으로 시간당 수백만 개의 요청을 처리할 수 있기를 원합니다.
최소한의 운영 오버헤드로 이러한 요구 사항을 충족하는 솔루션은 무엇입니까?
<small>An e-commerce company wants to launch a website on AWS that runs once a day. The company sells exactly one product for 24 hours each day. The company wants to be able to handle millions of requests per hour with millisecond latency during peak times.
What solution will meet these requirements with minimal operational overhead?</small>
선택지
A. Amazon S3를 사용하여 다른 S3 버킷에 전체 웹 사이트를 호스팅합니다. Amazon CloudFront 배포를 추가합니다. S3 버킷을 배포의 오리진으로 설정합니다. Amazon S3에 주문 데이터를 저장합니다.
<small>Use Amazon S3 to host the entire website in a separate S3 bucket. Add an Amazon CloudFront distribution. Set the S3 bucket as the origin for the distribution. Store order data in Amazon S3.</small>
B. 여러 가용 영역의 Auto Scaling 그룹에서 실행되는 Amazon EC2 인스턴스에 전체 웹 사이트를 배포합니다. ALB(Application Load Balancer)를 추가하여 웹 사이트 트래픽을 분산합니다. 백엔드 API에 대해 다른 ALB를 추가하십시오. MySQL용 Amazon RDS에 데이터를 저장합니다.
<small>Deploy the entire website on Amazon EC2 instances that run in an Auto Scaling group across multiple Availability Zones. Add an Application Load Balancer (ALB) to distribute the website traffic. Add another ALB for the backend API. Store data in Amazon RDS for MySQL.</small>
C. 컨테이너에서 실행되도록 전체 애플리케이션을 마이그레이션합니다. Amazon Elastic Kubernetes Service(Amazon EKS)에서 컨테이너를 호스팅합니다. Kubernetes 클러스터 자동 확장 처리를 사용하여 트래픽 버스트를 처리할 포드 수를 늘리거나 줄입니다. MySQL용 Amazon RDS에 데이터를 저장합니다.
<small>Migrate the entire application to run in containers. Host the containers in Amazon Elastic Kubernetes Service (Amazon EKS). Use Kubernetes cluster autoscaling to increase or decrease the number of pods to handle traffic bursts. Store data in Amazon RDS for MySQL.</small>
D. Amazon S3 버킷을 사용하여 웹 사이트의 정적 콘텐츠를 호스팅합니다. Amazon CloudFront 배포를 배포합니다. S3 버킷을 오리진으로 설정합니다. 백엔드 API에 Amazon API Gateway 및 AWS Lambda 함수를 사용합니다. Amazon DynamoDB에 데이터를 저장합니다.
<small>Use an Amazon S3 bucket to host the static content of the website. Deploy an Amazon CloudFront distribution. Set the S3 bucket as the origin. Use Amazon API Gateway and AWS Lambda functions for the backend API. Store data in Amazon DynamoDB.</small>
정답 및 해설
정답은 D입니다.
이 솔루션은 서버리스 아키텍처를 활용하여 운영 오버헤드를 최소화하면서도 높은 성능과 확장성을 제공합니다:
-
Amazon S3 + CloudFront: 정적 콘텐츠를 S3에 저장하고 CloudFront로 전 세계에 빠르게 배포합니다. 이는 밀리초 단위의 지연 시간으로 수백만 개의 요청을 처리할 수 있습니다.
-
API Gateway + Lambda: 동적 콘텐츠 처리를 위해 서버리스 백엔드를 구성합니다. API Gateway는 RESTful API를 제공하고, Lambda 함수는 필요한 비즈니스 로직을 실행합니다.
-
DynamoDB: NoSQL 데이터베이스로, 자동 스케일링을 지원하며 밀리초 단위의 응답 시간을 제공합니다.
이 구성은 자동으로 확장되며 사용한 만큼만 비용을 지불하므로 운영 오버헤드가 최소화됩니다.
오답 설명
A. S3만으로는 동적 콘텐츠를 처리할 수 없습니다. 또한 S3에 직접 주문 데이터를 저장하는 것은 보안 및 성능 면에서 적절하지 않습니다.
B. EC2 인스턴스와 RDS를 사용하는 이 방식은 확장성은 있지만, 운영 오버헤드가 높고 밀리초 단위의 응답 시간을 보장하기 어려울 수 있습니다.
C. EKS를 사용한 컨테이너 기반 솔루션은 강력하지만, 요구사항에 비해 복잡하고 운영 오버헤드가 높습니다.
결론
이 문제는 AWS의 서버리스 서비스들(S3, CloudFront, API Gateway, Lambda, DynamoDB)을 조합하여 고성능, 저지연, 고확장성의 웹 애플리케이션을 구축하는 방법을 보여줍니다. 이러한 아키텍처는 운영 오버헤드를 최소화하면서도 변동하는 트래픽에 효과적으로 대응할 수 있어, 현대적인 클라우드 네이티브 애플리케이션 개발에 매우 적합합니다.
댓글
댓글 쓰기