Q25. AWS Lambda와 SQS를 활용한 확장성 있는 데이터 처리 아키텍처
AWS 자격증을 준비하는 여러분, 안녕하세요. 오늘은 대용량 데이터 처리 시 Lambda의 한계를 극복하고 확장성을 개선하는 아키텍처에 대해 알아보겠습니다. 이는 실제 프로덕션 환경에서 자주 마주치는 문제이며, AWS 솔루션 아키텍트로서 꼭 알아야 할 내용입니다.
문제 상황
Q25:
회사에서 응용 프로그램을 설계하고 있습니다. 애플리케이션은 AWS Lambda 함수를 사용하여 Amazon API Gateway를 통해 정보를 수신하고 Amazon Aurora PostgreSQL 데이터베이스에 정보를 저장합니다.
개념 증명 단계에서 회사는 데이터베이스에 로드해야 하는 대용량 데이터를 처리하기 위해 Lambda 할당량을 크게 늘려야 합니다. 솔루션 설계자는 확장성을 개선하고 구성 노력을 최소화하기 위해 새로운 설계를 권장해야 합니다.
어떤 솔루션이 이러한 요구 사항을 충족합니까?
<small>A company is designing an application. The application uses AWS Lambda functions to receive information through Amazon API Gateway and store the information in an Amazon Aurora PostgreSQL database.
During the proof of concept phase, the company needs to significantly increase Lambda quotas to handle large volumes of information that must be loaded into the database. A solutions architect must recommend a new design to improve scalability and minimize configuration effort.
Which solution will meet these requirements?</small>
선택지
A. Lambda 함수 코드를 Amazon EC2 인스턴스에서 실행되는 Apache Tomcat 코드로 리팩터링합니다. 네이티브 JDBC(Java Database Connectivity) 드라이버를 사용하여 데이터베이스를 연결합니다.
<small>Refactor the Lambda function code into Apache Tomcat code that runs on Amazon EC2 instances. Use native JDBC (Java Database Connectivity) drivers to connect to the database.</small>
B. 플랫폼을 Aurora에서 Amazon DynamoDB로 변경합니다. DynamoDB Accelerator(DAX) 클러스터를 프로비저닝합니다. DAX 클라이언트 SDK를 사용하여 DAX 클러스터에서 기존 DynamoDB API 호출을 가리킵니다.
<small>Change the platform from Aurora to Amazon DynamoDB. Provision a DynamoDB Accelerator (DAX) cluster. Use the DAX client SDK to point existing DynamoDB API calls at the DAX cluster.</small>
C. 두 개의 Lambda 함수를 설정합니다. 정보를 수신할 하나의 기능을 구성하십시오. 정보를 데이터베이스에 로드하도록 다른 기능을 구성하십시오. Amazon Simple Notification Service(Amazon SNS)를 사용하여 Lambda 함수를 통합합니다.
<small>Set up two Lambda functions. Configure one function to receive the information. Configure the other function to load the information into the database. Use Amazon Simple Notification Service (Amazon SNS) to integrate the Lambda functions.</small>
D. 두 개의 Lambda 함수를 설정합니다. 정보를 수신할 하나의 기능을 구성하십시오. 정보를 데이터베이스에 로드하도록 다른 기능을 구성하십시오. Amazon Simple Queue Service(Amazon SQS) 대기열을 사용하여 Lambda 함수를 통합합니다.
<small>Set up two Lambda functions. Configure one function to receive the information. Configure the other function to load the information into the database. Use an Amazon Simple Queue Service (Amazon SQS) queue to integrate the Lambda functions.</small>
정답 및 해설
정답은 D입니다.
이 솔루션은 다음과 같은 이유로 가장 적합합니다:
-
확장성 개선: SQS를 사용하면 대량의 메시지를 버퍼링할 수 있어, Lambda 함수의 동시 실행 제한을 우회할 수 있습니다. 이는 대용량 데이터 처리에 매우 효과적입니다.
-
구성 노력 최소화: Lambda와 SQS는 모두 완전 관리형 서비스로, 인프라 관리가 필요 없습니다. 또한 Lambda는 SQS와 기본적으로 통합되어 있어 설정이 간단합니다.
-
비용 효율성: SQS는 사용한 만큼만 비용을 지불하며, Lambda도 실행 시간에 따라 과금됩니다. 이는 EC2 인스턴스를 계속 실행하는 것보다 비용 효율적일 수 있습니다.
-
분리와 책임 분할: 정보 수신과 데이터베이스 로딩을 별도의 Lambda 함수로 분리함으로써, 각 기능의 책임을 명확히 하고 유지보수를 용이하게 합니다.
-
장애 허용성: SQS는 메시지를 안전하게 저장하므로, 일시적인 데이터베이스 장애나 Lambda 실행 실패 시에도 데이터 손실을 방지할 수 있습니다.
오답 설명
A. EC2와 Tomcat으로의 전환은 관리 복잡성을 증가시키고, 확장성 개선이 제한적입니다.
B. DynamoDB로의 전환은 기존 Aurora PostgreSQL 데이터베이스와의 호환성 문제를 야기할 수 있으며, 데이터 모델 변경이 필요할 수 있습니다.
C. SNS는 메시지를 지속적으로 저장하지 않아 데이터 손실 위험이 있으며, 대량 처리 시 확장성 문제가 발생할 수 있습니다.
결론
이 문제는 AWS의 서버리스 아키텍처와 메시지 큐 서비스를 활용하여 확장성 있는 데이터 처리 시스템을 설계하는 방법을 보여줍니다. Lambda와 SQS의 조합은 대용량 데이터 처리 시 발생할 수 있는 병목 현상을 효과적으로 해결하며, 관리 오버헤드를 최소화하면서도 높은 확장성을 제공합니다. 이는 AWS 솔루션 아키텍트로서 반드시 숙지해야 할 중요한 디자인 패턴입니다.
댓글
댓글 쓰기