본문 바로가기
AWS/SAA 준비

AWS SAA 합격으로 가는 길 #5: [CloudFront] 마스터하기

by Pacloud 2024. 8. 16.
반응형

안녕하세요, AWS SAA(Solution Architect Associate) 자격증을 준비하시는 여러분!

저는 넥스트클라우드에서 SA로 활동하고 있는 손유림이라고 합니다. 😊

 

문제는 세 가지 단계를 거치며 풀어나갈 거예요:

 

  1. 문제의 요구사항 분석하기
  2. 관련 AWS 서비스 생각하기
  3. 선택지 분석하기

 

자, 그럼 첫 번째 문제부터 살펴볼까요?


문제

회사는 Amazon S3에서 정적 웹 사이트를 호스팅하고 DNS에 Amazon Route 53을 사용하고 있습니다.

웹 사이트는 전 세계적으로 수요가 증가하고 있습니다. 회사는 웹사이트에 접속하는 사용자의 대기 시간을 줄여야 합니다.

이러한 요구 사항을 가장 비용 효율적으로 충족하는 솔루션은 무엇입니까?

선택지

1. 웹사이트가 포함된 S3 버킷을 모든 AWS 리전에 복제합니다. Route 53 지리적 위치 라우팅 항목을 추가합니다.

2. AWS Global Accelerator에서 액셀러레이터를 프로비저닝합니다. 제공된 IP 주소를 S3 버킷과 연결합니다. 가속기의 IP 주소를 가리키도록 Route 53 항목을 편집합니다.

3. S3 버킷 앞에 Amazon CloudFront 배포를 추가합니다. CloudFront 배포를 가리키도록 Route 53 항목을 편집합니다.

4. 버킷에서 S3 Transfer Acceleration을 활성화합니다. 새 엔드포인트를 가리키도록 Route 53 항목을 편집합니다.


요구사항에 맞는 서비스

1. Amazon S3에서 정적 웹 사이트 호스팅

  • Amazon S3 (Simple Storage Service): 확장 가능하고 내구성이 높은 객체 스토리지 서비스로, 정적 웹 사이트 호스팅에 적합합니다. S3를 통해 HTML, CSS, JavaScript 파일 등을 저장하고 이를 사용자가 요청할 때 제공할 수 있습니다. 특히, 글로벌 사용자에게 안정적으로 웹 콘텐츠를 제공할 수 있습니다.
    • 웹 사이트 액세스에 대한 권한 설정
      • 버킷을 정적 웹 사이트로 구성할 때, 웹 사이트를 퍼블릭으로 설정하려면 퍼블릭 읽기 액세스 권한을 부여할 수 있습니다. 버킷을 공개적으로 읽기 가능하게 만들려면 버킷에 대해 퍼블릭 액세스 차단 설정을 사용 중지하고 퍼블릭 읽기 액세스 권한을 부여하는 버킷 정책을 작성해야 합니다. 
      • 버킷에 대한 퍼블릭 액세스 차단 설정을 비활성화하지 않으면서 웹 사이트를 퍼블릭으로 설정하려면 Amazon CloudFront 배포를 생성하여 정적 웹 사이트를 제공할 수 있습니다.

2. DNS에 Amazon Route 53 사용

  • Amazon Route 53:확장 가능하고 가용성이 높은 클라우드 DNS 웹 서비스로, 사용자가 웹 사이트에 접속할 때 트래픽을 적절히 라우팅합니다. 전 세계적으로 분산된 DNS 서버를 통해 사용자의 위치에 따라 가장 가까운 리전으로 트래픽을 유도하여 지연 시간을 줄일 수 있습니다.

3. 전 세계적으로 수요 증가

  • Amazon CloudFront: 콘텐츠 전송 네트워크(CDN) 서비스로, S3와 결합하여 정적 웹 사이트의 콘텐츠를 전 세계적으로 빠르게 제공할 수 있습니다. CloudFront는 여러 엣지 로케이션을 통해 콘텐츠를 캐시하여 사용자가 요청할 때 가장 가까운 서버에서 콘텐츠를 제공함으로써 지연 시간을 줄입니다.

4. 웹사이트에 접속하는 사용자의 대기 시간 감소

  • Amazon CloudFront: 앞서 언급한 것처럼, CloudFront를 사용하면 콘텐츠가 글로벌 엣지 로케이션에 캐시되어 사용자의 지리적 위치와 관계없이 빠른 응답 시간을 보장할 수 있습니다. 이로 인해 전 세계적으로 대기 시간이 크게 감소합니다.

5. 비용 효율적인 솔루션

  • Amazon S3 + Amazon CloudFront: Amazon S3는 사용량 기반 과금 모델을 사용하므로, 초기 비용이 낮고 사용한 만큼만 지불합니다. CloudFront와 결합하면 콘텐츠 전송 비용이 줄어들고, 캐싱을 통해 S3에서 직접 데이터를 가져오는 빈도를 줄여 비용 효율을 극대화할 수 있습니다.

최적의 정답 선택하기

선택지 1번은 “웹사이트가 포함된 S3 버킷을 모든 AWS 리전에 복제합니다. Route 53 지리적 위치 라우팅 항목을 추가합니다.”입니다.

 선택지가 정답이 아닌 이유는 S3 버킷을 모든 리전에 복제하는 것은 비효율적이고 비용이 많이 들며, CloudFront를 사용하는 것보다 운영 오버헤드가 높기 때문입니다.

 

선택지 2번은 “AWS Global Accelerator에서 액셀러레이터를 프로비저닝합니다. 제공된 IP 주소를 S3 버킷과 연결합니다. 가속기의 IP 주소를 가리키도록 Route 53 항목을 편집합니다.”입니다.

→ 선택지가 정답이 아닌 이유는 Global Accelerator는 정적 웹 사이트 콘텐츠 배포를 위해 설계된 것이 아니기 때문입니다.

 

선택지 3번은 “S3 버킷 앞에 Amazon CloudFront 배포를 추가합니다. CloudFront 배포를 가리키도록 Route 53 항목을 편집합니다.”입니다.

이 선택지는 CloudFront를 사용해 정적 웹 사이트의 콘텐츠를 전 세계적으로 빠르게 제공할 수 있는 최적의 솔루션을 제안하며, 이는 비용 효율적입니다. CloudFront는 글로벌 사용자들에게 낮은 지연 시간을 제공할 수 있는 기능을 갖추고 있습니다.

 

선택지 4번은 “버킷에서 S3 Transfer Acceleration을 활성화합니다. 새 엔드포인트를 가리키도록 Route 53 항목을 편집합니다.”입니다.

→ 선택지가 정답이 아닌 이유는 S3 Transfer Acceleration은 주로 업로드 성능을 향상하는 데 사용되며, 웹사이트의 콘텐츠 배포 및 대기 시간 감소에는 적합하지 않기 때문입니다.

 

 

문제에 대한 정답은 선택지 3번입니다!

자세한 문제 풀이를 원하신 분은 아래 더보기를 통해 확인해 주세요.

더보기

첫 번째 과정은 “문제의 요구사항 분석하기”입니다.

이 문제에서는 5가지의 요구사항이 존재해요. 

 

1. Amazon S3에서 정적 웹 사이트 호스팅

2. DNS에 Amazon Route 53 사용

3. 전 세계적으로 수요 증가

4. 웹사이트에 접속하는 사용자의 대기 시간 감소

5. 비용 효율적인 솔루션

 

 "정적 웹 사이트 호스팅"

→ 정적 웹 사이트란 변하지 않는 내용을 가진 웹사이트를 말해요. 주로 HTML, CSS, JavaScript로 만들어지며, 사용자의 요청에 따라 내용이 바뀌지 않습니다.

 

두 번째 과정은 “요구사항과 관련된 AWS 서비스 생각하기”입니다.

1. Amazon S3에서 정적 웹 사이트 호스팅

  • Amazon S3 (Simple Storage Service): 확장 가능하고 내구성이 높은 객체 스토리지 서비스로, 정적 웹 사이트 호스팅에 적합합니다. S3를 통해 HTML, CSS, JavaScript 파일 등을 저장하고 이를 사용자가 요청할 때 제공할 수 있습니다. 특히, 글로벌 사용자에게 안정적으로 웹 콘텐츠를 제공할 수 있습니다.
    • 웹 사이트 액세스에 대한 권한 설정
      • 버킷을 정적 웹 사이트로 구성할 때, 웹 사이트를 퍼블릭으로 설정하려면 퍼블릭 읽기 액세스 권한을 부여할 수 있습니다. 버킷을 공개적으로 읽기 가능하게 만들려면 버킷에 대해 퍼블릭 액세스 차단 설정을 사용 중지하고 퍼블릭 읽기 액세스 권한을 부여하는 버킷 정책을 작성해야 합니다. 
      • 버킷에 대한 퍼블릭 액세스 차단 설정을 비활성화하지 않으면서 웹 사이트를 퍼블릭으로 설정하려면 Amazon CloudFront 배포를 생성하여 정적 웹 사이트를 제공할 수 있습니다.
      • 1단계: S3 퍼블릭 액세스 차단 설정 편집
        • 기존 버킷을 퍼블릭 액세스를 포함하는 정적 웹 사이트로 구성하려면 해당 버킷에 대한 퍼블릭 액세스 차단 설정을 편집해야 합니다.
        • 기본적으로 Amazon S3은 계정 및 버킷에 대한 퍼블릭 액세스를 차단합니다. 버킷을 사용하여 정적 웹 사이트를 호스팅하려는 경우 이러한 단계를 사용하여 퍼블릭 액세스 차단 설정을 편집할 수 있습니다. 

 

  • 2단계: 버킷 정책 추가
    • 버킷의 객체를 공개적으로 읽기 가능하게 만들려면 모든 사용자에게 s3:GetObject 권한을 부여하는 버킷 정책을 작성해야 합니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::Bucket-Name/*"
            ]
        }
    ]
}

 

2. DNS에 Amazon Route 53 사용

  • Amazon Route 53: 확장 가능하고 가용성이 높은 클라우드 DNS 웹 서비스로, 사용자가 웹 사이트에 접속할 때 트래픽을 적절히 라우팅합니다. 전 세계적으로 분산된 DNS 서버를 통해 사용자의 위치에 따라 가장 가까운 리전으로 트래픽을 유도하여 지연 시간을 줄일 수 있습니다.
    • 세 가지 주요 기능
      • 1. 도메인 이름 등록:  Route 53을 통해 웹사이트 또는 웹 애플리케이션의 이름, 즉 도메인 이름을 등록할 수 있습니다. (예: example.com)
      • 2. 인터넷 트래픽을 도메인의 리소스로 라우팅: 사용자가 웹 브라우저를 열어 주소 표시줄에 도메인 이름(example.com) 또는 하위 도메인 이름(acme.example.com)을 입력한 경우 Route 53은 브라우저를 웹 사이트 또는 웹 애플리케이션에 연결하도록 돕습니다.
      • 3. 리소스의 상태 확인: 인터넷을 통해 웹 서버 같은 리소스로 자동화된 요청을 보내어 접근 및 사용이 가능하고 정상 작동 중인지 확인합니다. 리소스를 사용할 수 없게 될 때 알림을 수신하고 비정상 리소스가 아닌 다른 곳으로 인터넷 트래픽을 라우팅할 수도 있습니다.

3. 전 세계적으로 수요 증가

  • Amazon CloudFront: 콘텐츠 전송 네트워크(CDN) 서비스로, S3와 결합하여 정적 웹 사이트의 콘텐츠를 전 세계적으로 빠르게 제공할 수 있습니다. CloudFront는 여러 엣지 로케이션을 통해 콘텐츠를 캐시하여 사용자가 요청할 때 가장 가까운 서버에서 콘텐츠를 제공함으로써 지연 시간을 줄입니다.

 

→ 이 구조도는 S3를 오리진으로 사용하는 CloudFront 배포의 기본적인 설정을 보여줘요. 정적 웹사이트 호스팅이나 파일 배포 시스템에 적합한 아키텍처입니다.

 

4. 웹사이트에 접속하는 사용자의 대기 시간 감소

  • Amazon CloudFront: 앞서 언급한 것처럼, CloudFront를 사용하면 콘텐츠가 글로벌 엣지 로케이션에 캐시되어 사용자의 지리적 위치와 관계없이 빠른 응답 시간을 보장할 수 있습니다. 이로 인해 전 세계적으로 대기 시간이 크게 감소합니다.

 

→ CloudFront가 콘텐츠를 제공하는 방법을 설명해 볼게요. 사용자가 콘텐츠를 요청하면 가장 가까운 엣지 로케이션으로 연결됩니다. 이때, 엣지 로케이션에 요청된 콘텐츠가 있으면 바로 사용자에게 제공합니다. 없다면 리전 에지 캐시를 확인해요. 리전 에지 캐시에도 없는 경우 오리진 서버에서 콘텐츠를 가져옵니다. 가져온 콘텐츠는 리전 에지 캐시와 엣지 로케이션에 저장된 후 사용자에게 전달됩니다. 이 과정에서 일부 요청은 리전 에지 캐시를 거치지 않고 엣지 로케이션에서 직접 오리진 서버로 갈 수 있어요. 이러한 계층적 구조로 인해 콘텐츠 전달 속도가 빨라지고 오리진 서버의 부하가 줄어들며, 전반적인 사용자 경험이 개선됩니다.

 

5. 비용 효율적인 솔루션

  • Amazon S3 + Amazon CloudFront: Amazon S3는 사용량 기반 과금 모델을 사용하므로, 초기 비용이 낮고 사용한 만큼만 지불합니다. CloudFront와 결합하면 콘텐츠 전송 비용이 줄어들고, 캐싱을 통해 S3에서 직접 데이터를 가져오는 빈도를 줄여 비용 효율을 극대화할 수 있습니다.

 

마지막 과정은 “위의 정보들을 토대로 정답 선택하기”입니다.

선택지 1번은 “웹사이트가 포함된 S3 버킷을 모든 AWS 리전에 복제합니다. Route 53 지리적 위치 라우팅 항목을 추가합니다.”입니다.

 

  • Amazon S3: S3 버킷을 여러 리전에 복제함으로써 콘텐츠를 전 세계적으로 배포할 수 있습니다. 그러나 이 방법은 비용이 많이 들 수 있으며, 모든 리전에서 동일한 콘텐츠를 유지 관리하는 데 복잡성이 증가합니다.
  • Route 53 지리적 위치 라우팅: 이 기능은 사용자의 위치에 따라 특정 리전의 콘텐츠를 제공할 수 있지만, S3 버킷을 복제하는 방식은 일반적으로 CloudFront와 같은 CDN 솔루션보다 덜 효율적입니다.

이 선택지가 정답이 아닌 이유는 S3 버킷을 모든 리전에 복제하는 것은 비효율적이고 비용이 많이 들며, CloudFront를 사용하는 것보다 운영 오버헤드가 높기 때문입니다. 

 

선택지 2번은 “AWS Global Accelerator에서 액셀러레이터를 프로비저닝합니다. 제공된 IP 주소를 S3 버킷과 연결합니다. 가속기의 IP 주소를 가리키도록 Route 53 항목을 편집합니다.”입니다.

 

  • AWS Global Accelerator: 사용자에게 최적화된 네트워크 경로를 제공하여 애플리케이션의 성능을 개선합니다. 그러나 이 서비스는 주로 TCP 및 UDP 트래픽에 최적화되어 있으며, 정적 웹 사이트 콘텐츠 배포에는 CloudFront와 같은 CDN 서비스가 더 적합할 수 있습니다.
  • Route 53: Global Accelerator의 IP 주소를 사용하여 트래픽을 분산할 수 있지만, 이 방법은 일반적으로 S3와 CloudFront의 조합보다 비용이 높고 복잡할 수 있습니다.

이 선택지가 정답이 아닌 이유는 Global Accelerator는 정적 웹 사이트 콘텐츠 배포를 위해 설계된 것이 아니기 때문입니다.

 

선택지 3번은 “S3 버킷 앞에 Amazon CloudFront 배포를 추가합니다. CloudFront 배포를 가리키도록 Route 53 항목을 편집합니다.”입니다.

 

  • Amazon CloudFront: CloudFront는 글로벌 콘텐츠 전송 네트워크(CDN)로, 전 세계적으로 분산된 엣지 로케이션을 통해 콘텐츠를 캐시하고 사용자에게 가장 가까운 위치에서 제공함으로써 지연 시간을 최소화합니다. 또한, S3와의 통합이 매우 잘 이루어져 있어 정적 웹 사이트 호스팅에 적합합니다.
  • Route 53: CloudFront와 통합된 Route 53은 사용자 트래픽을 가장 가까운 엣지 로케이션으로 유도하여 지연 시간을 줄일 수 있습니다.

이 선택지는 CloudFront를 사용해 정적 웹 사이트의 콘텐츠를 전 세계적으로 빠르게 제공할 수 있는 최적의 솔루션을 제안하며, 이는 비용 효율적입니다. CloudFront는 글로벌 사용자들에게 낮은 지연 시간을 제공할 수 있는 기능을 갖추고 있습니다.

 

선택지 4번은 “버킷에서 S3 Transfer Acceleration을 활성화합니다. 새 엔드포인트를 가리키도록 Route 53 항목을 편집합니다."입니다.

 

  • S3 Transfer Acceleration: 전 세계적으로 분산된 엣지 로케이션을 사용하여 S3 버킷으로의 데이터 업로드 속도를 높이는 서비스입니다. 그러나 이 서비스는 데이터 업로드를 가속화하는 데 중점을 두며, 웹사이트 콘텐츠 배포와는 목적이 다릅니다.
  • Route 53: Transfer Acceleration의 엔드포인트를 가리키도록 Route 53을 설정할 수 있지만, 이는 주로 업로드 속도 개선을 위한 것이므로 사용자에게 콘텐츠를 제공하는 데 최적화되어 있지 않습니다.

이 선택지가 정답이 아닌 이유는 S3 Transfer Acceleration은 주로 업로드 성능을 향상하는 데 사용되며, 웹사이트의 콘텐츠 배포 및 대기 시간 감소에는 적합하지 않기 때문입니다. 

 

 

이어서 두 번째 문제 살펴볼게요.


문제

회사는 Amazon API Gateway API에 의해 호출되는 AWS Lambda 함수에서 애플리케이션을 호스팅합니다.

Lambda 함수는 고객 데이터를 Amazon Aurora MySQL 데이터베이스에 저장합니다.

회사에서 데이터베이스를 업그레이드할 때마다 Lambda 함수는 업그레이드가 완료될 때까지 데이터베이스 연결을 설정하지 못합니다.

그 결과 일부 이벤트에 대해 고객 데이터가 기록되지 않습니다.

솔루션 설계자는 데이터베이스 업그레이드 중에 생성된 고객 데이터를 저장하는 솔루션을 설계해야 합니다.

이러한 요구 사항을 충족하는 솔루션은 무엇입니까?

선택지

1. Lambda 함수와 데이터베이스 사이에 위치하도록 Amazon RDS 프록시를 프로비저닝합니다. RDS 프록시에 연결하도록 Lambda 함수를 구성합니다.

2. Lambda 함수의 실행 시간을 최대로 늘립니다. 데이터베이스에 고객 데이터를 저장하는 코드에서 재시도 메커니즘을 만듭니다.

3. 고객 데이터를 Lambda 로컬 스토리지에 유지합니다. 고객 데이터를 데이터베이스에 저장하기 위해 로컬 스토리지를 스캔하도록 새로운 Lambda 함수를 구성합니다.

4. 고객 데이터를 Amazon Simple Queue Service(Amazon SQS) FIFO 대기열에 저장합니다. 대기열을 폴링하고 고객 데이터를 데이터베이스에 저장하는 새 Lambda 함수를 생성합니다.


요구사항에 맞는 서비스

1. Amazon API Gateway와 AWS Lambda를 사용하여 애플리케이션을 호스팅

  • Amazon API Gateway: RESTful API를 생성, 게시, 유지 관리하는 데 사용됩니다. API Gateway는 AWS Lambda와 통합되어 API 요청을 Lambda 함수로 전달하는 역할을 합니다. 이 부분은 현재 시스템에 이미 구현되어 있으며, 운영 오버헤드를 줄이면서 API 요청을 처리합니다.
  • AWS Lambda: 서버리스 컴퓨팅 서비스로, 코드가 실행될 때만 비용이 발생합니다. Lambda는 서버 관리를 필요로 하지 않으며, API Gateway와 통합되어 애플리케이션의 비즈니스 로직을 실행합니다. Lambda 함수는 현재 고객 데이터를 Amazon Aurora MySQL 데이터베이스에 저장하고 있습니다.

2. Lambda 함수에서 고객 데이터를 Amazon Aurora MySQL 데이터베이스에 저장

  • Amazon Aurora: 고성능의 관계형 데이터베이스 서비스로, MySQL 및 PostgreSQL과 호환됩니다. Aurora는 자동 확장, 자동 백업, 장애 복구 기능을 제공하지만, 데이터베이스 업그레이드 중에는 일시적으로 연결이 불가능할 수 있습니다.

3. 데이터베이스 업그레이드 중에 Lambda 함수가 데이터베이스에 연결할 수 없음→ 데이터베이스 업그레이드 중에 생성된 고객 데이터를 저장해야 함

  • Amazon SQS (Simple Queue Service): 메시지 대기열 서비스로, 데이터베이스가 업그레이드 중일 때 Lambda 함수가 데이터를 잃지 않도록 임시로 데이터를 SQS 큐에 저장할 수 있습니다. 데이터베이스가 다시 사용 가능해지면, SQS 큐에 저장된 데이터를 Lambda 함수가 다시 처리하여 Aurora에 저장할 수 있습니다.
  • Amazon DynamoDB: 빠르고 확장 가능한 NoSQL 데이터베이스로, 업그레이드 기간 동안 임시로 데이터를 저장하는 데 사용할 수 있습니다. DynamoDB는 주로 영구적 데이터 저장에 사용되며, 임시 저장 및 큐잉 작업에는 적합하지 않을 수 있습니다.

최적의 정답 선택하기

선택지 1번은 “Lambda 함수와 데이터베이스 사이에 위치하도록 Amazon RDS 프록시를 프로비저닝합니다. RDS 프록시에 연결하도록 Lambda 함수를 구성합니다.”입니다.

선택지가 정답이 아닌 이유는 RDS Proxy는 데이터베이스 연결 문제를 일부 해결할 수 있지만, 데이터베이스가 업그레이드 중일 때는 완전한 연결을 보장하지 못할 수 있기 때문입니다. 또한, 업그레이드 중 생성된 데이터를 일시적으로 저장하는 메커니즘이 없으므로 데이터 유실을 방지할 수 없습니다.

 

선택지 2번은 “Lambda 함수의 실행 시간을 최대로 늘립니다. 데이터베이스에 고객 데이터를 저장하는 코드에서 재시도 메커니즘을 만듭니다.”입니다.

→ 선택지가 정답이 아닌 이유는 Lambda 실행 시간을 최대로 늘리고 재시도 메커니즘을 도입하는 것은 데이터 유실을 완전히 방지할 수 없는 임시적인 해결책이기 때문입니다. 데이터베이스 업그레이드 중에는 여전히 연결 문제로 인해 데이터가 손실될 가능성이 있으며, 이 방법은 업그레이드 중 생성된 데이터를 안전하게 처리하는 데 적합하지 않습니다.

 

선택지 3번은 “고객 데이터를 Lambda 로컬 스토리지에 유지합니다. 고객 데이터를 데이터베이스에 저장하기 위해 로컬 스토리지를 스캔하도록 새로운 Lambda 함수를 구성합니다.”입니다.

선택지가 정답이 아닌 이유는 Lambda 로컬 스토리지는 영구적인 저장소가 아니므로 데이터 유실의 위험이 크기 때문입니다. Lambda 함수의 임시 스토리지를 사용하는 것은 데이터 일관성 및 안전성을 보장하지 못하며, 업그레이드 중 데이터를 안전하게 보관하는 데 적합하지 않습니다.

 

선택지 4번은 “고객 데이터를 Amazon Simple Queue Service(Amazon SQS) FIFO 대기열에 저장합니다. 대기열을 폴링하고 고객 데이터를 데이터베이스에 저장하는 새 Lambda 함수를 생성합니다.”입니다.

→ 이 선택지는 데이터 유실을 방지하고, 데이터베이스 업그레이드 중에도 데이터를 안전하게 처리할 수 있는 가장 적절한 방법입니다. SQS FIFO 대기열은 데이터의 순서와 정확성을 보장하면서도 업그레이드 중 발생하는 데이터를 안전하게 보관할 수 있습니다.

 

 

문제에 대한 정답은 선택지 4번입니다!

자세한 문제 풀이를 원하신 분은 아래 더보기를 통해 확인해 주세요.

더보기
첫 번째 과정은 "문제의 요구사항 분석하기”입니다.

 

이 문제에서는 3가지의 요구사항이 존재해요. 

 

1. Amazon API Gateway와 AWS Lambda를 사용하여 애플리케이션을 호스팅

2. Lambda 함수에서 고객 데이터를 Amazon Aurora MySQL 데이터베이스에 저장

3. 데이터베이스 업그레이드 중에 Lambda 함수가 데이터베이스에 연결할 수 없음 → 데이터베이스 업그레이드 중에 생성된 고객 데이터를 저장해야 함

 

두 번째 과정은 “요구사항과 관련된 AWS 서비스 생각하기”입니다.

1. Amazon API Gateway와 AWS Lambda를 사용하여 애플리케이션을 호스팅

  • Amazon API Gateway: RESTful API를 생성, 게시, 유지 관리하는 데 사용됩니다. API Gateway는 AWS Lambda와 통합되어 API 요청을 Lambda 함수로 전달하는 역할을 합니다. 이 부분은 현재 시스템에 이미 구현되어 있으며, 운영 오버헤드를 줄이면서 API 요청을 처리합니다.
  • AWS Lambda: 서버리스 컴퓨팅 서비스로, 코드가 실행될 때만 비용이 발생합니다. Lambda는 서버 관리를 필요로 하지 않으며, API Gateway와 통합되어 애플리케이션의 비즈니스 로직을 실행합니다. Lambda 함수는 현재 고객 데이터를 Amazon Aurora MySQL 데이터베이스에 저장하고 있습니다.

 

2. Lambda 함수에서 고객 데이터를 Amazon Aurora MySQL 데이터베이스에 저장

  • Amazon Aurora: 고성능의 관계형 데이터베이스 서비스로, MySQL 및 PostgreSQL과 호환됩니다. Aurora는 자동 확장, 자동 백업, 장애 복구 기능을 제공하지만, 데이터베이스 업그레이드 중에는 일시적으로 연결이 불가능할 수 있습니다.

 

3. 데이터베이스 업그레이드 중에 Lambda 함수가 데이터베이스에 연결할 수 없음 → 데이터베이스 업그레이드 중에 생성된 고객 데이터를 저장해야 함

  • Amazon SQS (Simple Queue Service): Amazon SQS는 메시지 대기열 서비스로, 데이터베이스가 업그레이드 중일 때 Lambda 함수가 데이터를 잃지 않도록 임시로 데이터를 SQS 큐에 저장할 수 있습니다. 데이터베이스가 다시 사용 가능해지면, SQS 큐에 저장된 데이터를 Lambda 함수가 다시 처리하여 Aurora에 저장할 수 있습니다.
  • Amazon DynamoDB: 이 서비스는 빠르고 확장 가능한 NoSQL 데이터베이스로, 업그레이드 기간 동안 임시로 데이터를 저장하는 데 사용할 수 있습니다. DynamoDB는 주로 영구적 데이터 저장에 사용되며, 임시 저장 및 큐잉 작업에는 적합하지 않을 수 있습니다.

 

마지막 과정은 “위의 정보들을 토대로 정답 선택하기입니다.

선택지 1번은 “Lambda 함수와 데이터베이스 사이에 위치하도록 Amazon RDS 프록시를 프로비저닝합니다. RDS 프록시에 연결하도록 Lambda 함수를 구성합니다.”입니다.

 

  • Amazon RDS Proxy: Amazon RDS Proxy는 데이터베이스 연결을 관리하고 최적화하는 서비스로, 데이터베이스의 연결 풀을 유지 관리하여 성능을 개선하고, 데이터베이스에 대한 연결을 안정적으로 유지합니다. Lambda 함수가 데이터베이스에 직접 연결하는 대신, RDS Proxy를 통해 연결하면 데이터베이스 업그레이드 중에도 Lambda 함수가 연결을 유지할 수 있습니다.

이 선택지가 정답이 아닌 이유는 RDS Proxy는 데이터베이스 연결 문제를 일부 해결할 수 있지만, 데이터베이스가 업그레이드 중일 때는 완전한 연결을 보장하지 못할 수 있기 때문입니다. 또한, 업그레이드 중 생성된 데이터를 일시적으로 저장하는 메커니즘이 없으므로 데이터 유실을 방지할 수 없습니다.

 

선택지 2번은 “Lambda 함수의 실행 시간을 최대로 늘립니다. 데이터베이스에 고객 데이터를 저장하는 코드에서 재시도 메커니즘을 만듭니다.”입니다.

 

  • Lambda 실행 시간 증가 및 재시도 메커니즘: Lambda 함수의 최대 실행 시간을 늘리고, 데이터베이스 연결이 실패할 경우 재시도를 통해 데이터를 저장하는 방법입니다.

이 선택지가 정답이 아닌 이유는 Lambda 실행 시간을 최대로 늘리고 재시도 메커니즘을 도입하는 것은 데이터 유실을 완전히 방지할 수 없는 임시적인 해결책이기 때문입니다. 데이터베이스 업그레이드 중에는 여전히 연결 문제로 인해 데이터가 손실될 가능성이 있으며, 이 방법은 업그레이드 중 생성된 데이터를 안전하게 처리하는 데 적합하지 않습니다.

 

선택지 3번은 “고객 데이터를 Lambda 로컬 스토리지에 유지합니다. 고객 데이터를 데이터베이스에 저장하기 위해 로컬 스토리지를 스캔하도록 새로운 Lambda 함수를 구성합니다.”입니다.

  • Lambda 로컬 스토리지: Lambda는 임시 로컬 스토리지를 제공하지만, 이 스토리지는 비영구적이며, Lambda 함수가 재실행될 때 데이터가 손실될 수 있습니다. 또한, Lambda 로컬 스토리지에 데이터를 저장한 후 이를 다시 데이터베이스에 저장하는 것은 비효율적이고 복잡합니다.

이 선택지가 정답이 아닌 이유는 Lambda 로컬 스토리지는 영구적인 저장소가 아니므로 데이터 유실의 위험이 크기 때문입니다. Lambda 함수의 임시 스토리지를 사용하는 것은 데이터 일관성 및 안전성을 보장하지 못하며, 업그레이드 중 데이터를 안전하게 보관하는 데 적합하지 않습니다.

 

선택지 4번은 “고객 데이터를 Amazon Simple Queue Service(Amazon SQS) FIFO 대기열에 저장합니다. 대기열을 폴링하고 고객 데이터를 데이터베이스에 저장하는 새 Lambda 함수를 생성합니다.”입니다.

  • Amazon SQS (Simple Queue Service) FIFO: SQS FIFO 대기열은 메시지의 순서와 정확한 처리 보장을 제공하는 대기열 서비스입니다. 데이터베이스 업그레이드 중 생성된 데이터를 SQS에 저장하고, 업그레이드 후 새 Lambda 함수가 이 대기열을 폴링하여 데이터를 처리하고 데이터베이스에 저장하는 방식입니다. 이는 데이터 유실을 방지하고 데이터베이스가 다시 사용 가능해지면 데이터를 안전하게 저장할 수 있습니다.

이 선택지는 데이터 유실을 방지하고, 데이터베이스 업그레이드 중에도 데이터를 안전하게 처리할 수 있는 가장 적절한 방법입니다. SQS FIFO 대기열은 데이터의 순서와 정확성을 보장하면서도 업그레이드 중 발생하는 데이터를 안전하게 보관할 수 있습니다.

 

 

마지막 문제 살펴볼게요.


문제

회사에 수신 메시지를 수집하는 애플리케이션이 있습니다.

그러면 수십 개의 다른 애플리케이션과 마이크로서비스가 이러한 메시지를 빠르게 사용합니다.

메시지 수는 매우 다양하며 때로는 초당 100,000개로 갑자기 증가하기도 합니다.

회사는 솔루션을 분리하고 확장성을 높이고자 합니다.

어떤 솔루션이 이러한 요구 사항을 충족합니까?

선택지

1. Amazon Kinesis Data Analytics에 대한 메시지를 유지합니다. 메시지를 읽고 처리하도록 소비자 애플리케이션을 구성합니다.

2. Auto Scaling 그룹의 Amazon EC2 인스턴스에 수집 애플리케이션을 배포하여 CPU 지표를 기반으로 EC2 인스턴스 수를 확장합니다.

3. 단일 샤드로 Amazon Kinesis Data Streams에 메시지를 씁니다. AWS Lambda 함수를 사용하여 메시지를 사전 처리하고 Amazon DynamoDB에 저장합니다. 메시지를 처리하기 위해 DynamoDB에서 읽을 소비자 애플리케이션을 구성합니다.

4. 여러 Amazon Simple Queue Service(Amazon SQS) 구독이 있는 Amazon Simple Notification Service(Amazon SNS) 주제에 메시지를 게시합니다. 대기열의 메시지를 처리하도록 소비자 애플리케이션을 구성합니다.


요구사항에 맞는 서비스

1. 여러 애플리케이션과 마이크로서비스가 메시지를 빠르게 사용

  • Amazon SQS (Simple Queue Service): 분산 시스템 간 메시지 큐잉을 위한 완전 관리형 메시지 대기열 서비스입니다. SQS는 메시지를 비동기적으로 전송하며, 대규모 트래픽을 처리할 수 있습니다. SQS는 초당 수천만 개의 메시지를 안정적으로 처리할 수 있어, 메시지 수가 급증할 때도 효과적으로 대응할 수 있습니다.
  • Amazon SNS (Simple Notification Service): 대규모 메시지 배포를 위한 퍼블리시/구독 메시징 서비스입니다. SNS를 사용하여 메시지를 퍼블리시하고, 여러 구독자가 해당 메시지를 동시에 받아 처리할 수 있습니다. SQS와 함께 사용하면 메시지 처리의 확장성을 높일 수 있습니다.
  • Amazon Kinesis Data Streams: 실시간으로 대규모 데이터 스트림을 처리하는 서비스입니다. Kinesis는 초당 수십만 개의 메시지를 처리할 수 있으며, 실시간 데이터 처리 및 전달을 위해 적합합니다. 애플리케이션과 마이크로서비스가 실시간으로 데이터를 처리해야 하는 상황에 유용합니다.

2. 솔루션의 분리 및 확장성을 높여야 함

  • AWS Lambda: 서버리스 컴퓨팅 서비스로, 이벤트에 반응하여 코드를 실행할 수 있습니다. Lambda는 자동으로 확장되며, 메시지 큐(SQS, SNS) 또는 데이터 스트림(Kinesis)에서 발생하는 이벤트를 처리할 수 있습니다. 이 서비스를 통해 애플리케이션과 마이크로서비스의 분리와 확장성을 강화할 수 있습니다.
  • Amazon ECS (Elastic Container Service) 또는 Amazon EKS (Elastic Kubernetes Service): 컨테이너화된 애플리케이션을 실행 및 관리하는 서비스입니다. ECS와 EKS를 사용하면 수십 개의 애플리케이션과 마이크로서비스를 각각 독립적으로 운영하면서도 필요에 따라 자동 확장할 수 있습니다. 이를 통해 시스템의 복잡성을 줄이고 유연성을 높일 수 있습니다.

최적의 정답 선택하기

선택지 1번은 “Amazon Kinesis Data Analytics에 대한 메시지를 유지합니다. 메시지를 읽고 처리하도록 소비자 애플리케이션을 구성합니다.”입니다.

 선택지가 정답이 아닌 이유는 메시지를 실시간으로 분석하는 데는 적합하지만, 메시지를 여러 소비자 애플리케이션으로 빠르게 전달하고 처리하는 데는 적합하지 않기 때문입니다. Kinesis Data Analytics는 메시지 처리를 위한 실시간 분석 도구로, 메시지의 대규모 전달 및 소비를 위한 솔루션으로는 최적이 아닙니다.

 

선택지 2번은 “Auto Scaling 그룹의 Amazon EC2 인스턴스에 수집 애플리케이션을 배포하여 CPU 지표를 기반으로 EC2 인스턴스 수를 확장합니다.”입니다.

→ 선택지가 정답이 아닌 이유는 EC2와 Auto Scaling을 사용하여 인프라를 확장할 수 있지만, 이는 메시지 전달 및 소비를 위한 고도로 확장 가능한 솔루션보다는 인프라 수준에서의 확장에 초점을 맞추기 때문입니다. EC2 인스턴스 확장은 메시지의 대규모 실시간 처리와 분리에 최적화되지 않으며, 운영 오버헤드가 클 수 있습니다.

 

선택지 3번은 "단일 샤드로 Amazon Kinesis Data Streams에 메시지를 씁니다. AWS Lambda 함수를 사용하여 메시지를 사전 처리하고 Amazon DynamoDB에 저장합니다. 메시지를 처리하기 위해 DynamoDB에서 읽을 소비자 애플리케이션을 구성합니다.”입니다.

선택지가 정답이 아닌 이유는 Kinesis 스트림과 Lambda, DynamoDB를 결합하여 메시지를 처리하는 복잡한 설정을 제안하기 때문입니다. 단일 샤드를 사용하는 것은 초당 100,000개의 메시지를 처리하기에는 부족할 수 있으며, DynamoDB에 모든 메시지를 저장하는 것은 오버헤드가 클 수 있습니다. 또한, 이 설정은 메시지의 확장 가능한 분리 및 전달보다는 데이터 저장에 초점을 맞추고 있습니다.

 

선택지 4번은 “여러 Amazon Simple Queue Service(Amazon SQS) 구독이 있는 Amazon Simple Notification Service(Amazon SNS) 주제에 메시지를 게시합니다. 대기열의 메시지를 처리하도록 소비자 애플리케이션을 구성합니다.”입니다.

→ 이 선택지는 SNS와 SQS를 결합하여 메시지의 분리, 확장성, 빠른 전달을 최적화하는 방법을 제안합니다. SNS는 메시지를 퍼블리시하고, SQS는 개별 대기열을 통해 다양한 소비자가 메시지를 처리할 수 있게 하므로, 초당 100,000개의 메시지를 처리할 때 확장성이 뛰어난 솔루션입니다. 이는 요구사항을 충족하는 최적의 솔루션입니다.

 

 

문제에 대한 정답은 선택지 4번입니다!

자세한 문제 풀이를 원하신 분은 아래 더보기를 통해 확인해 주세요.

더보기
첫 번째 과정은 “문제의 요구사항 분석하기”입니다.

이 문제에서는 2가지의 요구사항이 존재해요. 

 

1. 여러 애플리케이션과 마이크로서비스가 메시지를 빠르게 사용

  • 메시지 수는 매우 다양하며, 때로는 초당 100,000개로 급증할 수 있음

2. 솔루션의 분리 및 확장성을 높여야 함

 

두 번째 과정은 “요구사항과 관련된 AWS 서비스 생각하기”입니다.

1. 여러 애플리케이션과 마이크로서비스가 메시지를 빠르게 사용

  • Amazon SQS (Simple Queue Service): 분산 시스템 간 메시지 큐잉을 위한 완전 관리형 메시지 대기열 서비스입니다. SQS는 메시지를 비동기적으로 전송하며, 대규모 트래픽을 처리할 수 있습니다. SQS는 초당 수천만 개의 메시지를 안정적으로 처리할 수 있어, 메시지 수가 급증할 때도 효과적으로 대응할 수 있습니다.
  • Amazon SNS (Simple Notification Service): 대규모 메시지 배포를 위한 퍼블리시/구독 메시징 서비스입니다. SNS를 사용하여 메시지를 퍼블리시하고, 여러 구독자가 해당 메시지를 동시에 받아 처리할 수 있습니다. SQS와 함께 사용하면 메시지 처리의 확장성을 높일 수 있습니다.
  • Amazon Kinesis Data Streams: 실시간으로 대규모 데이터 스트림을 처리하는 서비스입니다. Kinesis는 초당 수십만 개의 메시지를 처리할 수 있으며, 실시간 데이터 처리 및 전달을 위해 적합합니다. 애플리케이션과 마이크로서비스가 실시간으로 데이터를 처리해야 하는 상황에 유용합니다.

 

2. 솔루션의 분리 및 확장성을 높여야 함

  • AWS Lambda: 서버리스 컴퓨팅 서비스로, 이벤트에 반응하여 코드를 실행할 수 있습니다. Lambda는 자동으로 확장되며, 메시지 큐(SQS, SNS) 또는 데이터 스트림(Kinesis)에서 발생하는 이벤트를 처리할 수 있습니다. 이 서비스를 통해 애플리케이션과 마이크로서비스의 분리와 확장성을 강화할 수 있습니다.
  • Amazon ECS (Elastic Container Service) 또는 Amazon EKS (Elastic Kubernetes Service): 컨테이너화된 애플리케이션을 실행 및 관리하는 서비스입니다. ECS와 EKS를 사용하면 수십 개의 애플리케이션과 마이크로서비스를 각각 독립적으로 운영하면서도 필요에 따라 자동 확장할 수 있습니다. 이를 통해 시스템의 복잡성을 줄이고 유연성을 높일 수 있습니다.

 

마지막 과정은 “위의 정보들을 토대로 정답 선택하기입니다.

선택지 1번은 “Amazon Kinesis Data Analytics에 대한 메시지를 유지합니다. 메시지를 읽고 처리하도록 소비자 애플리케이션을 구성합니다.”입니다.

 

  • Amazon Kinesis Data Analytics: 실시간 데이터 스트림에서 SQL을 사용하여 데이터를 처리할 수 있는 완전 관리형 서비스입니다. Kinesis Data Streams 또는 Kinesis Firehose와 통합하여 데이터를 실시간으로 분석할 수 있습니다.

이 선택지가 정답이 아닌 이유는 메시지를 실시간으로 분석하는 데는 적합하지만, 메시지를 여러 소비자 애플리케이션으로 빠르게 전달하고 처리하는 데는 적합하지 않기 때문입니다. Kinesis Data Analytics는 메시지 처리를 위한 실시간 분석 도구로, 메시지의 대규모 전달 및 소비를 위한 솔루션으로는 최적이 아닙니다.

 

선택지 2번은 “Auto Scaling 그룹의 Amazon EC2 인스턴스에 수집 애플리케이션을 배포하여 CPU 지표를 기반으로 EC2 인스턴스 수를 확장합니다.”입니다.

 

  • Amazon EC2 with Auto Scaling: EC2 인스턴스를 Auto Scaling 그룹에 배포하여 수요에 따라 자동으로 확장하거나 축소할 수 있습니다. 이 설정은 수집 애플리케이션이 트래픽 급증을 처리할 수 있도록 도와줍니다.

이 선택지가 정답이 아닌 이유는 EC2와 Auto Scaling을 사용하여 인프라를 확장할 수 있지만, 이는 메시지 전달 및 소비를 위한 고도로 확장 가능한 솔루션보다는 인프라 수준에서의 확장에 초점을 맞추기 때문입니다. EC2 인스턴스 확장은 메시지의 대규모 실시간 처리와 분리에 최적화되지 않으며, 운영 오버헤드가 클 수 있습니다.

 

선택지 3번은 “단일 샤드로 Amazon Kinesis Data Streams에 메시지를 씁니다. AWS Lambda 함수를 사용하여 메시지를 사전 처리하고 Amazon DynamoDB에 저장합니다. 메시지를 처리하기 위해 DynamoDB에서 읽을 소비자 애플리케이션을 구성합니다.”입니다.

 

  • Amazon Kinesis Data Streams: Kinesis는 실시간 데이터 스트림을 처리하는 데 적합하며, 특히 대규모 트래픽을 처리할 수 있습니다. 단일 샤드를 사용하면 제한된 처리량을 갖지만, 필요에 따라 샤드를 추가하여 확장할 수 있습니다.
  • AWS Lambda: Kinesis 스트림에서 데이터를 읽고 사전 처리하는 데 Lambda를 사용할 수 있습니다. Lambda는 서버리스 아키텍처로 자동 확장이 가능하며, 이벤트에 반응하여 실행됩니다.
  • Amazon DynamoDB: NoSQL 데이터베이스로, 빠른 읽기 및 쓰기를 지원하며 실시간 데이터 처리에 적합합니다.

이 선택지가 정답이 아닌 이유는 Kinesis 스트림과 Lambda, DynamoDB를 결합하여 메시지를 처리하는 복잡한 설정을 제안하기 때문입니다. 단일 샤드를 사용하는 것은 초당 100,000개의 메시지를 처리하기에는 부족할 수 있으며, DynamoDB에 모든 메시지를 저장하는 것은 오버헤드가 클 수 있습니다. 또한, 이 설정은 메시지의 확장 가능한 분리 및 전달보다는 데이터 저장에 초점을 맞추고 있습니다.

 

선택지 4번은 “여러 Amazon Simple Queue Service(Amazon SQS) 구독이 있는 Amazon Simple Notification Service(Amazon SNS) 주제에 메시지를 게시합니다. 대기열의 메시지를 처리하도록 소비자 애플리케이션을 구성합니다.”입니다.

  • Amazon SNS: SNS는 퍼블리시/구독 모델을 기반으로 하며, 메시지를 여러 구독자에게 동시에 전달할 수 있습니다. 이는 메시지를 다양한 소비자 애플리케이션에 빠르게 전달할 수 있습니다.
  • Amazon SQS: SQS는 대기열 서비스로, 여러 소비자가 메시지를 비동기적으로 처리할 수 있도록 지원합니다. 각 소비자는 개별 SQS 대기열에서 메시지를 읽고 처리할 수 있으며, 이는 시스템의 분리와 확장성을 높이는 데 기여합니다.

이 선택지는 SNS와 SQS를 결합하여 메시지의 분리, 확장성, 빠른 전달을 최적화하는 방법을 제안합니다. SNS는 메시지를 퍼블리시하고, SQS는 개별 대기열을 통해 다양한 소비자가 메시지를 처리할 수 있게 하므로, 초당 100,000개의 메시지를 처리할 때 확장성이 뛰어난 솔루션입니다. 이는 요구사항을 충족하는 최적의 솔루션입니다.

 

 

여러분의 이번주는 어떠셨나요?

공부가 생각만큼 잘 안 됐더라도 너무 걱정하지 마세요. 우리 모두 각자의 속도로 성장하고 있답니다.

어려움이 있더라도 포기하지 말고 계속 나아가세요.

여러분이 합격하는 그날까지 저도 열심히 글 쓰겠습니다! 파이팅입니다!

오늘 글이 유익하셨길 바라며, 다음에는 또 다른 문제로 찾아뵙겠습니다.

 

감사합니다. 다음 글에서 만나요! 😊