- Authors

- Name
- Youngju Kim
- @fjvbn20031
시험 개요
| 항목 | 내용 |
|---|---|
| 시험 코드 | DVA-C02 |
| 시험 시간 | 130분 |
| 문제 수 | 65문제 |
| 합격 기준 | 720점 / 1000점 |
| 시험 형태 | 단일 선택, 복수 선택 |
도메인별 출제 비율
| 도메인 | 비율 |
|---|---|
| Domain 1: AWS 서비스를 활용한 개발 | 32% |
| Domain 2: 보안 | 26% |
| Domain 3: 배포 | 24% |
| Domain 4: 문제 해결 및 최적화 | 18% |
핵심 개발자 서비스 요약
Lambda 핵심 포인트
- 호출 유형: Synchronous(RequestResponse), Asynchronous(Event), Poll-based
- 동시성: Reserved Concurrency(최대 제한), Provisioned Concurrency(콜드 스타트 방지)
- 콜드 스타트: VPC Lambda에서 더 오래 걸림, Provisioned Concurrency로 해결
- 레이어: 공통 라이브러리 공유, 최대 5개 레이어
DynamoDB 핵심 포인트
- 파티션 키: 높은 카디널리티 선택, 핫 파티션 방지
- GSI: 다른 파티션 키/정렬 키로 쿼리, Eventually Consistent Read만 지원
- LSI: 같은 파티션 키, 다른 정렬 키, 테이블 생성 시에만 추가 가능
- DAX: 마이크로초 단위 응답, Eventually Consistent Read만 캐싱
API Gateway 핵심 포인트
- REST API: 완전한 기능, WAF 지원, 캐싱 지원
- HTTP API: 저비용, OIDC/JWT 인증, Lambda Proxy만 지원
- WebSocket API: 양방향 실시간 통신
Kinesis 핵심 포인트
- 샤드 계산: 쓰기 = max(입력 MB/s, 레코드 수/1000) / 샤드당 1MB/s 또는 1000 레코드/s
- Enhanced Fan-out: 샤드당 2MB/s 읽기, 푸시 방식
- Data Firehose: 자동 스케일링, S3/Redshift/Elasticsearch로 직접 전송
실전 연습 문제 65문제
Domain 1: AWS 서비스를 활용한 개발
Q1. Lambda 함수가 VPC 내부에 배포되어 있습니다. 함수 실행 시 콜드 스타트가 매우 길게 발생합니다. 이를 해결하기 위한 가장 적절한 방법은?
A) Lambda 함수의 메모리를 늘린다 B) Provisioned Concurrency를 설정한다 C) Lambda 레이어를 사용한다 D) 환경 변수를 줄인다
정답: B
설명: VPC 내 Lambda는 ENI(Elastic Network Interface) 생성으로 인해 콜드 스타트가 더 길게 발생합니다. Provisioned Concurrency를 설정하면 미리 초기화된 실행 환경을 유지하여 콜드 스타트를 제거할 수 있습니다. 메모리 증가는 실행 속도를 높이지만 콜드 스타트 자체를 제거하지는 않습니다.
Q2. DynamoDB 테이블에서 특정 사용자의 주문 내역을 최근 날짜 순으로 조회해야 합니다. 테이블의 파티션 키는 userId이고 정렬 키는 orderId입니다. 날짜 기반 정렬을 효율적으로 지원하려면?
A) 새 GSI를 userId(파티션 키)와 orderDate(정렬 키)로 생성한다 B) LSI를 userId(파티션 키)와 orderDate(정렬 키)로 추가한다 C) Scan 작업으로 모든 항목을 가져와 애플리케이션에서 정렬한다 D) DynamoDB Streams를 활성화한다
정답: A
설명: LSI는 테이블 생성 시에만 추가할 수 있으므로 기존 테이블에는 GSI를 사용해야 합니다. userId를 파티션 키로, orderDate를 정렬 키로 하는 GSI를 생성하면 특정 사용자의 주문을 날짜 순으로 효율적으로 조회할 수 있습니다. Scan은 비효율적이며 대규모 데이터에서 비용이 큽니다.
Q3. 다음 Python 코드로 SQS 메시지를 처리하는 Lambda 함수는 어떤 호출 유형을 사용합니까?
def handler(event, context):
for record in event['Records']:
body = record['body']
process_message(body)
return {'statusCode': 200}
A) Synchronous(동기) 호출 B) Asynchronous(비동기) 호출 C) Poll-based 호출 D) Stream 기반 호출
정답: C
설명: SQS 트리거를 사용하는 Lambda는 Poll-based(이벤트 소스 매핑) 호출 방식입니다. Lambda 서비스가 SQS 큐를 폴링하여 메시지를 가져오고 Lambda 함수를 호출합니다. event['Records']에 여러 메시지가 배치로 전달됩니다. Kinesis, DynamoDB Streams도 동일한 Poll-based 방식입니다.
Q4. API Gateway REST API에서 특정 엔드포인트의 응답을 캐싱하고 싶습니다. 클라이언트가 캐시를 무시하고 항상 신선한 데이터를 받으려면 어떻게 해야 합니까?
A) Cache-Control: no-cache 헤더를 요청에 포함한다 B) X-Amz-Cache-Control: invalidate 헤더를 사용한다 C) API Gateway 스테이지에서 캐시를 비활성화한다 D) Lambda 함수에서 캐시 무효화 API를 호출한다
정답: A
설명: API Gateway 캐싱이 활성화된 경우, 클라이언트는 HTTP 요청에 Cache-Control: no-cache 헤더를 포함하여 캐시를 우회할 수 있습니다. 단, 이 기능을 허용하려면 API Gateway 설정에서 "Require authorization to invalidate cache" 옵션을 적절히 구성해야 합니다. 스테이지 캐시를 비활성화하면 모든 요청에 영향을 미칩니다.
Q5. Kinesis Data Streams에서 초당 5,000개의 레코드를 처리해야 하고, 각 레코드의 평균 크기는 2KB입니다. 필요한 최소 샤드 수는?
A) 5 B) 8 C) 10 D) 15
정답: C
설명: 샤드당 용량: 초당 1,000 레코드 또는 1MB/s(쓰기 기준).
레코드 수 기준: 5,000 / 1,000 = 5 샤드 데이터 크기 기준: (5,000 × 2KB) / 1,024KB = 약 9.77MB/s → 10 샤드
더 큰 값인 10샤드가 필요합니다. 두 제약 중 더 큰 값을 선택해야 합니다.
Q6. SQS FIFO 큐를 사용하는 애플리케이션에서 동일한 메시지가 중복으로 처리되는 것을 방지하려면?
A) VisibilityTimeout을 늘린다 B) MessageDeduplicationId를 설정한다 C) MessageGroupId를 고유하게 설정한다 D) Dead-letter 큐를 구성한다
정답: B
설명: SQS FIFO 큐는 MessageDeduplicationId를 사용하여 5분 내에 동일한 ID로 전송된 메시지를 중복 제거합니다. ContentBasedDeduplication을 활성화하면 메시지 본문의 SHA-256 해시를 자동으로 사용합니다. MessageGroupId는 순서 보장을 위한 것이고, VisibilityTimeout은 메시지 재처리 방지와 관련됩니다.
Q7. S3 버킷의 대용량 파일(5GB)을 안정적으로 업로드하는 최선의 방법은?
A) 단일 PUT 요청으로 업로드한다 B) Multipart Upload API를 사용한다 C) S3 Transfer Acceleration을 사용한다 D) Pre-signed URL을 생성한다
정답: B
설명: S3 단일 PUT 요청은 최대 5GB까지 지원하지만, 100MB 이상 파일에는 Multipart Upload를 권장합니다. Multipart Upload는 파일을 여러 부분으로 나누어 병렬 업로드하고, 실패 시 해당 부분만 재시도할 수 있습니다. S3 Transfer Acceleration은 Edge Location을 통해 속도를 높이지만 대용량 업로드 안정성과는 별개입니다.
Q8. DynamoDB DAX(DynamoDB Accelerator)가 캐싱을 지원하지 않는 읽기 작업은?
A) GetItem B) Query C) Scan D) TransactGetItems
정답: D
설명: DAX는 eventually consistent read(GetItem, Query, Scan)를 캐싱합니다. TransactGetItems는 strongly consistent read를 사용하는 트랜잭션 작업으로, DAX가 캐싱하지 않고 DynamoDB에 직접 전달합니다. 또한 strongly consistent read(ConsistentRead=True)도 DAX 캐시를 우회합니다.
Q9. Lambda 함수에서 데이터베이스 연결을 핸들러 함수 밖에 초기화하는 이유는?
A) 보안을 강화하기 위해 B) 실행 컨텍스트 재사용으로 성능을 최적화하기 위해 C) 메모리 사용량을 줄이기 위해 D) 타임아웃을 방지하기 위해
정답: B
설명: Lambda의 실행 환경은 재사용될 수 있습니다(warm start). 핸들러 외부에 초기화된 코드(데이터베이스 연결, SDK 클라이언트 등)는 컨테이너가 재사용될 때 다시 실행되지 않아 성능이 향상됩니다. 이를 실행 컨텍스트 재사용(Execution Context Reuse)이라고 합니다.
Q10. API Gateway WebSocket API와 REST API의 차이점으로 올바른 것은?
A) WebSocket API는 서버리스를 지원하지 않는다 B) WebSocket API는 클라이언트와 서버 간 양방향 통신을 지원한다 C) REST API는 실시간 알림에 더 적합하다 D) WebSocket API는 캐싱을 지원한다
정답: B
설명: WebSocket API는 클라이언트와 서버 간 지속적인 연결을 유지하여 양방향 실시간 통신을 지원합니다. 채팅 애플리케이션, 실시간 대시보드, 게임 등에 적합합니다. REST API는 요청-응답 패턴으로 단방향입니다. WebSocket API도 Lambda 함수를 백엔드로 사용할 수 있습니다.
Q11. 다음 DynamoDB 조건에서 GSI와 LSI의 차이로 올바른 것은?
A) GSI는 테이블 생성 후 추가 불가, LSI는 추가 가능 B) LSI는 테이블 생성 시에만 추가 가능, GSI는 나중에 추가 가능 C) GSI는 동일한 파티션 키를 사용해야 한다 D) LSI는 전체 테이블 크기가 10GB로 제한된다
정답: B
설명: LSI(Local Secondary Index)는 테이블 생성 시에만 정의할 수 있으며, 나중에 추가하거나 삭제할 수 없습니다. GSI(Global Secondary Index)는 테이블 생성 후 언제든지 추가하거나 삭제할 수 있습니다. LSI는 기본 테이블과 동일한 파티션 키를 사용하지만 다른 정렬 키를 사용합니다.
Q12. S3 Pre-signed URL의 주요 사용 사례로 가장 적합한 것은?
A) S3 버킷을 퍼블릭으로 공개하는 것 B) 인증 없이 일시적으로 특정 S3 객체 접근을 허용하는 것 C) S3 버킷 정책을 우회하는 것 D) S3 객체를 자동으로 암호화하는 것
정답: B
설명: Pre-signed URL은 서명된 URL로 특정 S3 객체에 일정 시간 동안 인증 없이 접근할 수 있게 합니다. 파일 다운로드 링크를 일시적으로 공유하거나, 클라이언트가 직접 S3에 파일을 업로드(PUT)할 수 있게 할 때 사용합니다. 버킷을 퍼블릭으로 공개하지 않아도 됩니다.
Q13. SQS 메시지의 VisibilityTimeout 값을 너무 짧게 설정하면 어떤 문제가 발생합니까?
A) 메시지가 Dead-letter 큐로 이동한다 B) 동일한 메시지가 여러 소비자에게 전달될 수 있다 C) 메시지가 영구적으로 삭제된다 D) 큐의 용량이 초과된다
정답: B
설명: VisibilityTimeout은 메시지가 소비자에게 전달된 후 다른 소비자에게 보이지 않는 시간입니다. 너무 짧게 설정하면 첫 번째 소비자가 처리를 완료하기 전에 타임아웃이 만료되어 동일한 메시지가 다른 소비자에게도 전달될 수 있습니다. 이는 중복 처리를 유발합니다. 일반적으로 함수 처리 시간보다 충분히 길게 설정해야 합니다.
Q14. Lambda 함수에서 Reserved Concurrency를 0으로 설정하면 어떻게 됩니까?
A) 무제한 동시성을 허용한다 B) 함수 호출이 완전히 차단된다 C) 콜드 스타트가 방지된다 D) 자동 스케일링이 활성화된다
정답: B
설명: Reserved Concurrency를 0으로 설정하면 해당 Lambda 함수는 완전히 호출이 차단되어 Throttling 오류가 발생합니다. 이는 함수를 일시적으로 비활성화하거나 다른 함수를 위한 동시성을 보존하는 데 사용할 수 있습니다. 함수를 활성화하려면 Reserved Concurrency를 삭제하거나 0보다 큰 값으로 설정해야 합니다.
Q15. Kinesis Data Firehose가 Kinesis Data Streams와 다른 주요 특징은?
A) Firehose는 수동 샤드 관리가 필요하다 B) Firehose는 자동으로 스케일링되고 데이터를 목적지로 직접 전달한다 C) Firehose는 실시간 처리에 더 적합하다 D) Firehose는 소비자 애플리케이션이 필요하다
정답: B
설명: Kinesis Data Firehose는 완전 관리형 서비스로 자동 스케일링을 지원합니다. S3, Redshift, OpenSearch Service, Splunk로 데이터를 자동으로 전달합니다. Data Streams는 샤드를 수동으로 관리해야 하고 소비자 애플리케이션이 필요합니다. Firehose는 버퍼링(최소 60초 또는 1MB)으로 인해 실시간보다는 근실시간입니다.
Domain 2: 보안
Q16. Cognito User Pool과 Identity Pool의 차이로 올바른 것은?
A) User Pool은 AWS 서비스 접근 권한을 제공하고, Identity Pool은 사용자 인증을 담당한다 B) User Pool은 사용자 인증 및 사용자 디렉토리를 제공하고, Identity Pool은 AWS 자격 증명을 제공한다 C) Identity Pool은 소셜 로그인을 지원하지 않는다 D) User Pool과 Identity Pool은 동일한 기능을 한다
정답: B
설명: Cognito User Pool은 사용자 등록, 로그인, MFA 등 사용자 인증 기능과 사용자 디렉토리를 제공하며 JWT 토큰(ID Token, Access Token, Refresh Token)을 발급합니다. Identity Pool은 인증된 사용자(User Pool, Google, Facebook 등)에게 임시 AWS 자격 증명(IAM Role)을 제공하여 AWS 서비스에 직접 접근할 수 있게 합니다.
Q17. KMS 봉투 암호화(Envelope Encryption)에서 데이터 키(Data Key)는 어떻게 사용됩니까?
A) 데이터 키는 KMS에 저장되고 CMK로 암호화된다 B) 데이터 키로 실제 데이터를 암호화하고, 데이터 키는 CMK로 암호화되어 저장된다 C) CMK가 데이터를 직접 암호화한다 D) 데이터 키는 항상 평문으로 저장된다
정답: B
설명: 봉투 암호화에서는 (1) KMS가 데이터 키(DEK)를 생성하고, (2) 데이터 키로 실제 데이터를 암호화합니다, (3) 데이터 키 자체는 CMK(Customer Master Key)로 암호화됩니다. 암호화된 데이터 키는 암호화된 데이터와 함께 저장됩니다. CMK는 KMS 외부로 절대 나가지 않습니다. 이 방식으로 대용량 데이터를 효율적으로 암호화할 수 있습니다.
Q18. IAM에서 리소스 기반 정책(Resource-based Policy)과 자격 증명 기반 정책(Identity-based Policy)의 차이는?
A) 리소스 기반 정책은 EC2에만 연결할 수 있다 B) 자격 증명 기반 정책은 Principal을 지정하고, 리소스 기반 정책은 IAM 엔티티에 연결된다 C) 리소스 기반 정책은 Principal을 지정하고, 자격 증명 기반 정책은 IAM 엔티티에 연결된다 D) 두 정책 유형은 동일하다
정답: C
설명: 리소스 기반 정책(S3 버킷 정책, Lambda 리소스 정책 등)은 리소스에 직접 연결되며 Principal(누가 접근할 수 있는지)을 명시합니다. 자격 증명 기반 정책(IAM User/Role/Group 정책)은 IAM 엔티티에 연결되며 Principal 없이 무엇을 할 수 있는지를 정의합니다. 크로스 계정 접근에는 리소스 기반 정책 또는 STS AssumeRole이 필요합니다.
Q19. AWS Secrets Manager와 SSM Parameter Store의 차이로 올바른 것은?
A) Parameter Store는 자동 교체를 지원하지만 Secrets Manager는 지원하지 않는다 B) Secrets Manager는 비밀 자동 교체 및 교차 계정 공유를 지원하고 추가 비용이 있다 C) 둘 다 동일한 기능을 제공한다 D) Parameter Store는 암호화를 지원하지 않는다
정답: B
설명: Secrets Manager는 데이터베이스 비밀번호 등의 자동 교체, 교차 계정 접근, 비밀 복제를 지원하며 비밀당 월 요금이 발생합니다. Parameter Store는 무료(Standard) 또는 저비용(Advanced) 티어로 운영되며, 자동 교체 기능이 없습니다(Lambda로 커스텀 구현 가능). 데이터베이스 자격증명처럼 자동 교체가 중요한 경우 Secrets Manager를 사용합니다.
Q20. STS AssumeRole을 사용할 때 ExternalId의 역할은?
A) 역할의 최대 세션 시간을 설정한다 B) 혼동된 대리인(Confused Deputy) 공격을 방지한다 C) MFA 인증을 활성화한다 D) 교차 리전 접근을 허용한다
정답: B
설명: ExternalId는 혼동된 대리인(Confused Deputy) 문제를 방지합니다. 제3자 서비스가 고객 A의 역할을 수임할 때, 악의적인 고객 B가 고객 A의 ARN을 사용하여 자신의 환경에서 고객 A의 데이터에 접근하는 것을 막습니다. ExternalId는 신뢰 정책에 조건으로 설정되어, 올바른 ExternalId 없이는 역할을 수임할 수 없게 합니다.
Q21. Lambda 함수에서 환경 변수를 암호화할 때 권장하는 방법은?
A) 환경 변수를 Base64로 인코딩한다 B) KMS CMK를 사용하여 환경 변수를 암호화하고 런타임에 복호화한다 C) 환경 변수를 코드에 직접 하드코딩한다 D) S3에 저장하고 런타임에 읽어온다
정답: B
설명: Lambda 환경 변수는 기본적으로 AWS 관리형 키로 암호화됩니다. 더 강력한 보안을 위해 고객 관리형 CMK를 사용할 수 있습니다. 민감한 정보(API 키, 비밀번호)는 KMS로 암호화하고 런타임에 SDK로 복호화하거나, Secrets Manager/Parameter Store에서 런타임에 동적으로 가져오는 것이 권장됩니다.
Q22. Cognito에서 JWT ID Token에 포함된 클레임으로 올바른 것은?
A) AWS IAM 정책 B) 사용자 이름, 이메일, 사용자 그룹 정보 C) AWS 임시 자격 증명 D) S3 버킷 접근 권한
정답: B
설명: Cognito User Pool의 ID Token(JWT)에는 사용자 이름(sub), 이메일, 전화번호, Cognito 사용자 그룹(cognito:groups), 커스텀 속성 등의 클레임이 포함됩니다. Access Token은 API 접근을 위한 OAuth 2.0 스코프를 포함합니다. AWS 임시 자격 증명은 Identity Pool에서 ID Token을 교환하여 얻습니다.
Q23. S3 서버 측 암호화(SSE) 옵션 중 고객이 직접 암호화 키를 제공하는 방식은?
A) SSE-S3 B) SSE-KMS C) SSE-C D) CSE(클라이언트 측 암호화)
정답: C
설명: SSE-C(Server-Side Encryption with Customer-Provided Keys)는 고객이 HTTPS 요청에 암호화 키를 직접 제공합니다. AWS는 키를 저장하지 않고 암호화/복호화에만 사용합니다. SSE-S3는 AWS 관리 키, SSE-KMS는 KMS 관리 키를 사용합니다. CSE는 업로드 전에 클라이언트 측에서 암호화합니다.
Q24. API Gateway에서 Lambda 권한 부여자(Lambda Authorizer)의 두 가지 유형은?
A) Header 권한 부여자, Body 권한 부여자 B) TOKEN 권한 부여자, REQUEST 권한 부여자 C) JWT 권한 부여자, API Key 권한 부여자 D) IAM 권한 부여자, Cognito 권한 부여자
정답: B
설명: Lambda 권한 부여자는 두 가지 유형입니다. TOKEN 유형은 Bearer 토큰(JWT, OAuth)을 Authorization 헤더에서 추출하여 검증합니다. REQUEST 유형은 요청 헤더, 쿼리 파라미터, 스테이지 변수 등 전체 요청 컨텍스트를 사용하여 인증을 수행합니다. 두 유형 모두 IAM 정책을 반환합니다.
Q25. KMS 데이터 키 캐싱(Data Key Caching)을 사용하는 이유는?
A) KMS API 호출 횟수와 비용을 줄이기 위해 B) 암호화 강도를 높이기 위해 C) 키 자동 교체를 활성화하기 위해 D) CMK를 생성하기 위해
정답: A
설명: 매 암호화 작업마다 KMS에 새 데이터 키를 요청하면 API 호출이 많아져 비용이 증가하고 지연 시간이 늘어납니다. 데이터 키 캐싱을 사용하면 로컬에서 캐싱된 데이터 키를 재사용하여 KMS 호출을 줄일 수 있습니다. AWS Encryption SDK에서 제공하는 기능입니다. 단, 키를 오래 재사용할수록 보안 위험이 증가할 수 있습니다.
Domain 3: 배포
Q26. AWS CodeDeploy에서 Blue/Green 배포의 주요 이점은?
A) 서버 비용이 절반으로 줄어든다 B) 배포 실패 시 즉각적인 롤백이 가능하다 C) 빌드 시간이 단축된다 D) 테스트 환경이 필요 없다
정답: B
설명: Blue/Green 배포는 현재 환경(Blue)과 동일한 새 환경(Green)을 생성하여 새 버전을 배포합니다. 트래픽을 Green으로 전환하고, 문제 발생 시 트래픽을 Blue로 즉시 되돌릴 수 있습니다. 이는 다운타임 없는 배포와 빠른 롤백을 가능하게 합니다. 단, 두 환경을 동시에 실행하므로 비용이 일시적으로 증가합니다.
Q27. AWS SAM(Serverless Application Model) 템플릿에서 AWS::Serverless::Function 리소스가 변환되는 CloudFormation 리소스는?
A) AWS::Lambda::Function만 B) AWS::Lambda::Function, AWS::IAM::Role, AWS::Lambda::EventSourceMapping C) AWS::Lambda::Function, AWS::EC2::Instance D) AWS::Serverless::Function은 변환되지 않는다
정답: B
설명: SAM 템플릿은 CloudFormation macro를 통해 변환됩니다. AWS::Serverless::Function은 Lambda 함수(AWS::Lambda::Function), 실행 역할(AWS::IAM::Role), 이벤트 소스 매핑(AWS::Lambda::EventSourceMapping), 이벤트 권한(AWS::Lambda::Permission) 등 여러 CloudFormation 리소스로 확장됩니다. sam build && sam deploy 명령으로 배포합니다.
Q28. Elastic Beanstalk Rolling with Additional Batch 배포 정책의 특징은?
A) 모든 인스턴스를 한 번에 업데이트하여 배포가 빠르다 B) 기존 용량을 유지하면서 새 배치를 먼저 시작한 후 롤링 업데이트한다 C) 새 환경을 생성하고 DNS를 변경한다 D) 하나씩 순차적으로 업데이트한다
정답: B
설명: Rolling with Additional Batch는 추가 인스턴스 배치를 먼저 시작하여 전체 용량을 유지하면서 롤링 업데이트를 수행합니다. 배포 중에도 전체 서비스 용량이 유지됩니다. 반면 단순 Rolling은 배포 중 일부 용량이 감소합니다. 가용성이 중요하고 비용 증가를 허용할 수 있을 때 적합합니다.
Q29. ECS Fargate와 EC2 Launch Type의 주요 차이점은?
A) Fargate는 고정 비용이고 EC2는 사용량 기반이다 B) Fargate는 서버 관리가 불필요하고 EC2 Launch Type은 EC2 인스턴스를 직접 관리한다 C) EC2 Launch Type은 서버리스이다 D) Fargate는 Windows 컨테이너를 지원하지 않는다
정답: B
설명: Fargate는 서버리스 컨테이너 실행 환경으로 EC2 인스턴스를 프로비저닝하거나 관리할 필요가 없습니다. vCPU와 메모리 사용량에 따라 과금됩니다. EC2 Launch Type은 ECS가 실행되는 EC2 인스턴스를 직접 관리해야 하지만, GPU 워크로드, 특수 인스턴스 유형, 비용 최적화에 더 유연합니다.
Q30. CodePipeline에서 수동 승인(Manual Approval) 단계를 추가하는 목적은?
A) 배포 속도를 높이기 위해 B) 프로덕션 배포 전에 사람의 검토와 승인을 요구하기 위해 C) 자동 테스트를 건너뛰기 위해 D) 비용을 줄이기 위해
정답: B
설명: 수동 승인 단계는 파이프라인이 다음 단계로 진행하기 전에 지정된 사람의 승인을 요구합니다. 스테이징에서 프로덕션으로 배포 전에 QA 팀이나 관리자가 검토하고 승인하는 게이트 역할을 합니다. SNS 알림으로 검토자에게 알림을 보내고, 콘솔, CLI, API를 통해 승인 또는 거부할 수 있습니다.
Q31. AWS CodeBuild에서 빌드 사양(buildspec.yml)의 phases 순서로 올바른 것은?
A) install → pre_build → build → post_build B) build → test → deploy → clean C) pre_build → build → post_build → install D) setup → build → verify → deploy
정답: A
설명: buildspec.yml의 phases 순서는 install(패키지 설치, 런타임 설정) → pre_build(로그인, 의존성 다운로드) → build(실제 빌드 명령) → post_build(패키징, ECR 푸시, 알림)입니다. 각 단계는 선택 사항이며, 단계 실패 시 후속 단계가 실행되지 않습니다.
Q32. ECR(Elastic Container Registry)에서 이미지 보안 스캐닝을 활성화하면 어떤 기능이 제공됩니까?
A) 이미지 자동 삭제 B) 이미지의 알려진 CVE 취약점 스캐닝 및 보고 C) 이미지 자동 업데이트 D) 이미지 암호화
정답: B
설명: ECR 이미지 스캐닝(Enhanced Scanning with Inspector, Basic Scanning)은 컨테이너 이미지의 OS 패키지와 프로그래밍 언어 패키지의 CVE(Common Vulnerabilities and Exposures)를 스캔합니다. 푸시 시 자동 스캔 또는 수동 스캔을 설정할 수 있으며, 발견된 취약점을 심각도별로 보고합니다.
Q33. CodeDeploy에서 appspec.yml 파일의 hooks 섹션에서 ApplicationStop 이벤트의 역할은?
A) 새 애플리케이션 버전을 시작한다 B) 현재 실행 중인 애플리케이션을 정지시킨다 C) 배포를 롤백한다 D) 서버를 재시작한다
정답: B
설명: CodeDeploy 배포 수명 주기 이벤트 순서: ApplicationStop → DownloadBundle → BeforeInstall → Install → AfterInstall → ApplicationStart → ValidateService. ApplicationStop은 현재 실행 중인 애플리케이션을 정상적으로 종료하는 스크립트를 실행합니다. 이전 배포의 appspec.yml에 정의된 스크립트가 실행됩니다.
Q34. Elastic Beanstalk에서 .ebextensions 디렉토리의 역할은?
A) 환경 변수만 설정한다 B) AWS 리소스 프로비저닝 및 EC2 인스턴스 구성을 커스터마이징한다 C) 애플리케이션 소스 코드를 저장한다 D) SSL 인증서를 관리한다
정답: B
설명: .ebextensions 디렉토리의 .config 파일(YAML/JSON)을 통해 EC2 인스턴스 구성, 파일 생성, 패키지 설치, 명령 실행, AWS 리소스(RDS, SQS 등) 프로비저닝, 환경 변수 설정 등을 커스터마이징할 수 있습니다. CloudFormation 구문을 사용하여 추가 리소스를 정의할 수 있습니다.
Q35. CodeCommit에서 브랜치 보호(branch protection)를 구현하는 방법은?
A) CodeCommit 설정에서 직접 브랜치 보호를 활성화한다 B) IAM 정책으로 특정 브랜치에 직접 푸시를 제한한다 C) CodePipeline으로 푸시를 제어한다 D) S3 버킷 정책을 사용한다
정답: B
설명: CodeCommit은 GitHub처럼 네이티브 브랜치 보호 기능이 없습니다. IAM 정책의 조건(StringNotEquals, codecommit:References)을 사용하여 main/master 브랜치에 직접 푸시를 제한할 수 있습니다. Pull Request 기반 워크플로우를 강제하려면 IAM으로 직접 푸시 권한을 제거하는 방법을 사용합니다.
Domain 4: 문제 해결 및 최적화
Q36. Lambda 함수에서 X-Ray 트레이싱을 활성화했을 때 나타나는 세그먼트(Segment)와 서브세그먼트(Subsegment)의 차이는?
A) 세그먼트는 서브세그먼트보다 더 세밀한 정보를 제공한다 B) 세그먼트는 Lambda 함수 전체 호출을 나타내고, 서브세그먼트는 그 안의 특정 작업을 나타낸다 C) 서브세그먼트는 외부 서비스 호출만 추적한다 D) 두 개념은 동일하다
정답: B
설명: X-Ray에서 세그먼트(Segment)는 단일 서비스 또는 요청에 대한 최상위 추적 단위입니다. Lambda 함수의 전체 호출을 나타냅니다. 서브세그먼트(Subsegment)는 세그먼트 내의 개별 작업(DynamoDB 쿼리, HTTP 요청 등)을 나타냅니다. AWS SDK 호출은 자동으로 서브세그먼트로 캡처되며, 커스텀 서브세그먼트도 추가할 수 있습니다.
Q37. DynamoDB에서 ProvisionedThroughputExceededException 오류가 발생하는 원인과 해결 방법은?
A) 테이블 크기가 제한을 초과했다 - 데이터를 삭제한다 B) 읽기/쓰기 처리량이 프로비저닝된 RCU/WCU를 초과했다 - Auto Scaling 또는 용량 증가 C) 인터넷 연결 문제 - 재시도한다 D) IAM 권한이 없다 - 정책을 수정한다
정답: B
설명: ProvisionedThroughputExceededException은 요청 처리량이 프로비저닝된 RCU(Read Capacity Units) 또는 WCU(Write Capacity Units)를 초과할 때 발생합니다. 해결 방법: (1) Auto Scaling 활성화로 자동 용량 조정, (2) 온디맨드 용량 모드 전환, (3) DAX 추가로 읽기 부하 감소, (4) 지수 백오프(Exponential Backoff)로 재시도. 핫 파티션이 원인인 경우 파티션 키 설계를 재검토합니다.
Q38. CloudWatch Logs에서 특정 패턴의 로그를 실시간으로 모니터링하고 알림을 받으려면?
A) CloudWatch 대시보드를 생성한다 B) Metric Filter를 생성하고 CloudWatch Alarm을 설정한다 C) S3로 로그를 내보낸다 D) CloudTrail을 활성화한다
정답: B
설명: CloudWatch Logs Metric Filter를 사용하여 로그 이벤트에서 특정 패턴을 필터링하고 사용자 정의 메트릭을 생성합니다. 예를 들어 "ERROR" 패턴을 필터링하여 에러 카운트 메트릭을 만들 수 있습니다. 이 메트릭에 CloudWatch Alarm을 연결하면 임계값 초과 시 SNS를 통해 알림을 받을 수 있습니다.
Q39. Lambda 함수의 동시 실행 수(Concurrent Executions)가 계정 제한에 도달하면 어떤 일이 발생합니까?
A) Lambda가 자동으로 스케일 다운된다 B) 새 요청은 Throttle(조절) 오류를 받는다 C) Lambda가 EC2 인스턴스로 전환된다 D) 요청이 SQS 큐에 자동 저장된다
정답: B
설명: 계정의 총 동시 실행 수(기본 1,000)에 도달하면 추가 Lambda 호출은 Throttle 오류(HTTP 429)를 받습니다. 동기 호출의 경우 클라이언트에 직접 오류가 반환됩니다. 비동기 호출의 경우 Lambda가 자동으로 재시도합니다. Service Quota 증가 요청으로 제한을 높일 수 있습니다.
Q40. X-Ray에서 주석(Annotations)과 메타데이터(Metadata)의 차이는?
A) 주석은 인덱싱되어 검색 가능하고, 메타데이터는 인덱싱되지 않는다 B) 메타데이터는 인덱싱되어 검색 가능하고, 주석은 인덱싱되지 않는다 C) 두 개념은 동일하다 D) 주석은 숫자만 지원하고, 메타데이터는 모든 유형을 지원한다
정답: A
설명: X-Ray Annotations는 키-값 쌍(문자열, 숫자, 부울)으로 인덱싱되어 트레이스 검색 및 필터링에 사용할 수 있습니다. Metadata는 객체나 배열 등 모든 JSON 직렬화 가능한 값을 저장할 수 있지만 인덱싱되지 않아 검색에 사용할 수 없습니다. 디버깅 정보를 저장할 때는 Metadata, 필터링이 필요한 정보는 Annotations를 사용합니다.
Q41. Lambda 함수에서 비동기(Asynchronous) 호출의 기본 재시도 동작은?
A) 재시도하지 않는다 B) 최대 2번 재시도(총 3번 시도)하고 실패 시 DLQ로 이동 C) 무한 재시도한다 D) 1번 재시도하고 성공 여부와 관계없이 종료한다
정답: B
설명: Lambda 비동기 호출이 실패하면 Lambda는 자동으로 최대 2번 재시도합니다(총 3번 시도). 재시도 간격은 점점 증가합니다. 3번 모두 실패하면 설정된 Dead-Letter Queue(SQS 또는 SNS)로 이벤트를 전송합니다. 이벤트 대상(Destination)을 설정하면 성공/실패 이벤트를 다른 AWS 서비스로 라우팅할 수 있습니다.
Q42. CloudWatch에서 사용자 정의 메트릭을 게시할 때 고해상도(High Resolution) 메트릭을 사용하는 상황은?
A) 메트릭을 더 오래 보관하고 싶을 때 B) 1분 미만(1초~59초) 단위의 세밀한 모니터링이 필요할 때 C) 비용을 절감하고 싶을 때 D) 여러 리전에서 메트릭을 집계할 때
정답: B
설명: 표준 해상도 메트릭은 1분 단위로 게시됩니다. 고해상도 메트릭은 1초 단위까지 지원하여 더 세밀한 모니터링이 가능합니다. 단, 고해상도 메트릭은 표준보다 비용이 더 많이 발생합니다. 금융 거래, 게임 이벤트 등 초 단위 정밀도가 필요한 경우에 사용합니다.
Q43. DynamoDB Streams를 활용하는 일반적인 사용 사례로 올바른 것은?
A) DynamoDB 테이블 백업 B) 데이터 변경 이벤트를 Lambda로 트리거하여 다른 시스템에 전파 C) DynamoDB 읽기 성능 향상 D) 글로벌 테이블 생성
정답: B
설명: DynamoDB Streams는 테이블의 항목 수준 변경 사항(INSERT, MODIFY, REMOVE)을 순서대로 기록합니다. Lambda 이벤트 소스 매핑으로 스트림 레코드를 처리하여 다른 데이터베이스에 변경 사항 전파, 이메일 알림 발송, 검색 인덱스 업데이트, 감사 로그 생성 등을 구현할 수 있습니다. 스트림 레코드는 24시간 동안 보관됩니다.
Q44. API Gateway에서 응답 코드 502 Bad Gateway 오류가 발생하는 일반적인 원인은?
A) 클라이언트의 잘못된 요청 형식 B) Lambda 함수 또는 백엔드가 잘못된 형식의 응답을 반환했거나 타임아웃 C) IAM 권한 부족 D) API Gateway 캐시가 가득 찼다
정답: B
설명: API Gateway 502 Bad Gateway는 백엔드 통합에서 발생하는 오류입니다. 주요 원인: (1) Lambda 함수가 예상 형식(statusCode, headers, body)이 아닌 응답 반환, (2) Lambda 함수 실행 오류(예외 발생), (3) Lambda 타임아웃(API Gateway 타임아웃: 29초). 401/403은 인증/권한 오류, 400은 잘못된 요청, 500은 내부 서버 오류입니다.
Q45. Lambda Cold Start 시간에 영향을 주는 요소들로 올바른 것은?
A) 함수의 호출 빈도만 B) 런타임 유형, 배포 패키지 크기, VPC 구성, 초기화 코드 실행 시간 C) AWS 리전만 D) Lambda 레이어 수만
정답: B
설명: Lambda 콜드 스타트 시간에 영향을 주는 요소: (1) 런타임 유형(Java/C#이 Python/Node.js보다 느림), (2) 배포 패키지 크기(크면 다운로드 시간 증가), (3) VPC 설정(ENI 생성 추가 지연), (4) 초기화 코드(핸들러 외부 코드 실행 시간), (5) Lambda 레이어. 콜드 스타트 최소화: 작은 패키지, Provisioned Concurrency, 경량 런타임 사용.
Q46. SQS Dead-Letter Queue(DLQ)로 메시지가 이동하는 조건은?
A) 메시지 크기가 256KB를 초과할 때 B) 메시지가 maxReceiveCount 횟수만큼 처리 실패했을 때 C) 큐 용량이 가득 찰 때 D) VisibilityTimeout이 만료될 때마다
정답: B
설명: SQS DLQ는 소스 큐에서 maxReceiveCount로 설정된 횟수 이상 수신(처리 실패)된 메시지를 자동으로 이동받습니다. 예를 들어 maxReceiveCount=3이면 메시지가 3번 수신되어 처리 실패했을 때 DLQ로 이동합니다. DLQ의 메시지를 분석하여 처리 실패 원인을 파악하거나 재처리 큐로 이동할 수 있습니다.
Q47. 다음 Lambda 함수 코드의 문제점은 무엇입니까?
import boto3
def handler(event, context):
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('MyTable')
response = table.scan()
return response['Items']
A) boto3 import가 잘못되었다 B) DynamoDB 클라이언트를 핸들러 내부에서 초기화하여 재사용이 안 된다 C) scan() 메서드는 Lambda에서 사용할 수 없다 D) 반환 형식이 잘못되었다
정답: B
설명: DynamoDB 리소스 객체가 핸들러 함수 내부에서 초기화되어 매 호출마다 새로 생성됩니다. 실행 컨텍스트 재사용의 이점을 활용하지 못합니다. 핸들러 외부(전역 범위)에서 초기화하면 warm 재사용 시 기존 연결을 재사용하여 성능이 향상됩니다. 또한 Scan은 전체 테이블을 읽어 비용이 크므로 Query로 대체하는 것이 좋습니다.
Q48. CloudWatch Logs Insights 쿼리에서 Lambda 함수의 에러 로그를 찾는 쿼리는?
A) SELECT * WHERE level = 'ERROR' B) fields @timestamp, @message | filter @message like /ERROR/ | sort @timestamp desc C) GET errors FROM lambda_logs D) SEARCH 'ERROR' IN CloudWatch
정답: B
설명: CloudWatch Logs Insights는 자체 쿼리 언어를 사용합니다. fields 명령으로 표시할 필드를 선택하고, filter로 특정 패턴을 필터링하며, sort로 정렬합니다. like /ERROR/ 또는 like /Exception/ 패턴으로 에러 로그를 찾습니다. stats count(*) by bin(5m)으로 시간별 에러 수를 집계할 수도 있습니다.
Q49. API Gateway에서 사용 계획(Usage Plan)과 API 키의 주요 목적은?
A) API 보안 강화 B) API 요청 수와 속도를 제한하여 남용을 방지하고 수익화를 가능하게 한다 C) API 버전 관리 D) 캐싱 활성화
정답: B
설명: 사용 계획(Usage Plan)은 API 키별로 스로틀링(초당 요청 수: RPS, 버스트 크기)과 할당량(일/주/월별 총 요청 수)을 설정합니다. API 키를 발급하여 사용 계획에 연결하면 고객별로 다른 제한을 적용할 수 있습니다. API 수익화, 파트너 API 제공, 남용 방지에 활용됩니다.
Q50. Lambda 함수에서 timeout 설정의 최대값은?
A) 5분 B) 10분 C) 15분 D) 30분
정답: C
설명: Lambda 함수의 최대 실행 시간(timeout)은 15분(900초)입니다. 기본값은 3초입니다. 15분을 초과하는 작업에는 Step Functions(상태 머신), ECS 태스크, 또는 EC2 인스턴스를 사용해야 합니다. 타임아웃이 발생하면 Lambda는 함수를 강제 종료하고 비동기 호출의 경우 재시도합니다.
Q51. DynamoDB의 단일 테이블 설계(Single-Table Design) 패턴에서 overloading partition key와 sort key를 사용하는 이유는?
A) DynamoDB 비용을 줄이기 위해 B) 여러 엔티티 유형을 단일 테이블에 저장하여 조인 없이 효율적인 쿼리를 지원하기 위해 C) 데이터 암호화를 개선하기 위해 D) 백업을 간소화하기 위해
정답: B
설명: DynamoDB는 조인 연산을 지원하지 않으므로, 여러 관련 엔티티를 단일 테이블에 저장하고 파티션 키와 정렬 키를 오버로딩합니다. 예: PK=USER#123, SK=USER#123(사용자 정보), SK=ORDER#456(주문 정보). 단일 GetItem 또는 Query로 관련 데이터를 함께 조회할 수 있습니다. Rick Houlihan의 설계 패턴이 유명합니다.
Q52. SNS(Simple Notification Service) 팬아웃(Fan-out) 패턴의 설명으로 올바른 것은?
A) SNS가 단일 SQS 큐에 메시지를 전달한다 B) SNS 토픽에 발행된 메시지가 여러 SQS 큐와 Lambda, HTTP 엔드포인트에 동시 전달된다 C) SQS가 여러 Lambda 함수를 동시에 트리거한다 D) 하나의 Lambda가 여러 SNS 토픽에 발행한다
정답: B
설명: SNS 팬아웃 패턴은 SNS 토픽에 하나의 메시지를 발행하면 구독하는 모든 엔드포인트(SQS 큐, Lambda 함수, HTTP/HTTPS, 이메일, SMS)에 동시에 전달되는 패턴입니다. 예를 들어 주문 완료 이벤트를 발행하면 이메일 알림, 재고 업데이트, 배송 처리 등 여러 시스템이 동시에 처리할 수 있습니다.
Q53. Elastic Beanstalk 환경 유형에서 Worker 환경의 특징은?
A) 인터넷 트래픽을 처리하는 웹 서버 B) SQS 큐의 메시지를 폴링하여 백그라운드 작업을 처리한다 C) 데이터베이스 처리에 특화된 환경 D) 오직 Fargate 컨테이너만 실행한다
정답: B
설명: Elastic Beanstalk Worker 환경은 SQS 데몬(sqsd)이 내장되어 있어 SQS 큐를 폴링하고 HTTP POST 요청으로 애플리케이션에 메시지를 전달합니다. 웹 환경(Web Server Tier)과 분리하여 비동기 백그라운드 작업(이미지 처리, 이메일 발송, 데이터 처리 등)을 처리합니다.
Q54. AWS CloudFormation 스택 업데이트 시 리소스 교체(Replacement)가 발생하는 경우의 예시는?
A) EC2 인스턴스의 태그 변경 B) RDS 인스턴스의 DB 엔진 버전 업그레이드 C) S3 버킷 이름 변경 D) Lambda 함수의 메모리 설정 변경
정답: C
설명: S3 버킷 이름은 불변 속성으로, 이름을 변경하면 기존 버킷이 삭제되고 새 이름의 버킷이 생성됩니다(교체). EC2 태그 변경이나 Lambda 메모리 변경은 현재 리소스를 업데이트합니다. CloudFormation은 속성 변경의 업데이트 유형을 'Update requires: Replacement', 'Update requires: No interruption', 'Update requires: Some interruptions'로 문서화합니다.
Q55. S3 이벤트 알림(Event Notifications)을 통해 Lambda를 트리거할 때의 호출 유형은?
A) 동기(Synchronous) 호출 B) 비동기(Asynchronous) 호출 C) Poll-based 호출 D) 스트리밍 호출
정답: B
설명: S3 이벤트 알림이 Lambda를 트리거할 때는 비동기(Asynchronous/Event) 호출 방식을 사용합니다. S3는 이벤트를 Lambda에 발행하고 응답을 기다리지 않습니다. Lambda는 실패 시 자동으로 재시도하며, DLQ 또는 Lambda Destination 설정이 가능합니다. SNS, SES, CloudWatch Events도 비동기 호출을 사용합니다.
Q56. DynamoDB TransactWriteItems의 특징으로 올바른 것은?
A) 단일 파티션에만 적용된다 B) 최대 100개 항목에 대한 원자적(Atomic) ACID 트랜잭션을 지원한다 C) 비동기로만 실행된다 D) 읽기 전용 작업에만 사용된다
정답: B
설명: TransactWriteItems는 여러 테이블에 걸쳐 최대 100개(또는 4MB)의 항목에 대한 원자적 쓰기 작업을 수행합니다. 모든 작업이 성공하거나 모두 실패합니다(ACID). Put, Update, Delete, ConditionCheck 작업을 조합할 수 있습니다. TransactGetItems는 읽기 트랜잭션을 지원합니다. 표준 작업보다 2배의 읽기/쓰기 용량을 소비합니다.
Q57. Lambda 함수의 환경 변수 최대 크기는?
A) 4KB B) 8KB C) 16KB D) 32KB
정답: A
설명: Lambda 함수의 모든 환경 변수의 총 크기는 4KB로 제한됩니다. 이 제한을 초과하는 구성 값은 SSM Parameter Store 또는 Secrets Manager에 저장하고 런타임에 API를 통해 가져와야 합니다. 환경 변수는 함수 배포 패키지와 분리되어 있어 코드 변경 없이 구성을 업데이트할 수 있습니다.
Q58. CodeBuild 빌드 환경에서 환경 변수를 안전하게 전달하는 방법은?
A) buildspec.yml에 직접 하드코딩한다 B) Parameter Store 또는 Secrets Manager 참조를 사용한다 C) 소스 코드 저장소에 저장한다 D) S3 버킷의 평문 파일에서 읽는다
정답: B
설명: CodeBuild에서 민감한 환경 변수(API 키, 비밀번호 등)는 buildspec.yml에 직접 작성하지 않고, SSM Parameter Store의 SecureString 파라미터 또는 Secrets Manager 시크릿을 참조합니다. buildspec.yml에서 parameter-store 또는 secrets-manager 필드로 참조할 수 있으며, 빌드 실행 시 자동으로 복호화되어 환경 변수로 설정됩니다.
Q59. S3 Lifecycle Policy에서 객체를 Glacier로 전환하는 최소 경과 일수는?
A) 1일 B) 30일 C) 60일 D) 90일
정답: B
설명: S3 Standard에서 S3 Glacier Flexible Retrieval로 직접 전환하는 최소 기간은 30일입니다. S3 Standard-IA에서 Glacier로는 30일, S3 Intelligent-Tiering에서는 직접 전환이 가능합니다. Glacier Instant Retrieval로의 전환 최소 기간은 90일입니다. Lifecycle Policy를 잘못 설정하면 예상치 못한 비용이 발생할 수 있습니다.
Q60. API Gateway에서 스테이지 변수(Stage Variables)의 사용 사례는?
A) 사용자 인증 정보를 저장한다 B) 환경별(개발/스테이징/프로덕션)로 다른 Lambda 함수 ARN 또는 엔드포인트를 참조한다 C) API 버전을 자동으로 증가시킨다 D) 캐시 설정을 저장한다
정답: B
설명: 스테이지 변수는 API Gateway 스테이지별로 다른 값을 설정할 수 있는 키-값 쌍입니다. 예를 들어 lambdaAlias 변수를 dev 스테이지에서는 "dev", prod 스테이지에서는 "prod"로 설정하고, Lambda 통합 URI에서는 stageVariables.lambdaAlias 표현식으로 참조합니다. 동일한 API 정의로 여러 환경을 지원할 수 있습니다.
Q61. Lambda 함수를 업데이트할 때 버전(Version)과 별칭(Alias)을 사용하는 주요 이유는?
A) 비용을 절감하기 위해 B) 트래픽 분산(Canary 배포)과 안정적인 ARN 참조를 제공하기 위해 C) 실행 속도를 높이기 위해 D) 로깅을 활성화하기 위해
정답: B
설명: Lambda 버전은 배포된 코드와 구성의 불변 스냅샷입니다. 별칭은 특정 버전(또는 $LATEST)을 가리키는 이름입니다. 별칭 ARN을 API Gateway나 이벤트 소스에 연결하면, 새 버전 배포 시 별칭만 업데이트하면 됩니다. 또한 별칭의 라우팅 구성으로 두 버전 간 트래픽을 분산(예: v1=90%, v2=10%)하여 Canary 배포를 구현할 수 있습니다.
Q62. DynamoDB에서 Conditional Write를 사용하는 시나리오는?
A) 데이터 암호화를 위해 B) 낙관적 잠금(Optimistic Locking)을 구현하거나 항목이 존재하지 않을 때만 삽입하기 위해 C) 읽기 성능을 향상시키기 위해 D) 자동 인덱싱을 활성화하기 위해
정답: B
설명: DynamoDB Conditional Write는 지정된 조건이 true일 때만 쓰기 작업을 수행합니다. 예를 들어 attribute_not_exists(pk) 조건으로 항목이 없을 때만 삽입(중복 방지), version 속성의 버전 번호를 확인하여 낙관적 잠금 구현이 가능합니다. 조건 실패 시 ConditionalCheckFailedException이 발생합니다. 소비되는 WCU는 조건 성공 여부와 관계없이 동일합니다.
Q63. AWS X-Ray 서비스 맵(Service Map)에서 볼 수 있는 정보로 올바른 것은?
A) AWS 비용 정보 B) 서비스 간 연결, 응답 시간, 오류율, 요청 수 C) IAM 권한 정보 D) 네트워크 대역폭 사용량
정답: B
설명: X-Ray 서비스 맵은 애플리케이션의 서비스 토폴로지를 시각화합니다. 각 노드는 서비스(Lambda, DynamoDB, API Gateway 등)를 나타내며 평균 응답 시간(레이턴시), 요청 수(분당), 오류율(4xx), 결함률(5xx)을 표시합니다. 서비스 간 화살표는 호출 관계를 보여줍니다. 성능 병목 지점과 오류 발생 서비스를 시각적으로 파악할 수 있습니다.
Q64. Lambda 함수에서 /tmp 디렉토리의 특징으로 올바른 것은?
A) 함수 호출 간에 공유되지 않으며 영구 저장소로 사용할 수 없다 B) 최대 10GB의 임시 스토리지를 제공하며 같은 컨테이너 재사용 시 데이터가 유지될 수 있다 C) 모든 Lambda 함수가 동일한 /tmp 디렉토리를 공유한다 D) /tmp 디렉토리는 암호화되지 않는다
정답: B
설명: Lambda /tmp 디렉토리는 최대 10GB(기본 512MB, 조정 가능)의 임시 스토리지를 제공합니다. 같은 실행 환경(컨테이너)이 재사용(warm 재실행)될 때 이전 호출에서 저장한 데이터가 남아 있을 수 있습니다. 이는 캐싱에 활용할 수 있지만 보안에 주의해야 합니다(민감 데이터 정리 필요). 다른 Lambda 인스턴스와는 공유되지 않습니다.
Q65. 다음 중 Lambda 이벤트 소스 매핑(Event Source Mapping)을 사용하는 서비스들로 올바른 것은?
A) S3, SNS, API Gateway B) SQS, Kinesis Data Streams, DynamoDB Streams, MSK, MQ C) CloudWatch Events, EventBridge, SNS D) CodeCommit, CodePipeline, CodeDeploy
정답: B
설명: 이벤트 소스 매핑은 Lambda가 능동적으로 폴링하는 스트림/큐 기반 서비스에서 사용됩니다: SQS, Kinesis Data Streams, DynamoDB Streams, Apache Kafka(MSK), Amazon MQ. Lambda 서비스가 직접 폴링하여 배치로 처리합니다. 반면 S3, SNS, API Gateway, EventBridge는 Lambda를 직접 호출(push 방식)합니다.
합격 전략
- 핵심 서비스 집중: Lambda, DynamoDB, API Gateway, SQS, Cognito가 전체의 50% 이상
- 실습 필수: AWS Free Tier로 직접 구현 경험 쌓기
- 공식 문서: 각 서비스의 개발자 가이드와 API 레퍼런스 숙지
- 화이트페이퍼: AWS 보안 모범 사례, 서버리스 아키텍처 화이트페이퍼 필독
- 시험 팁: 문제에서 가장 "효율적", "비용 효과적", "최소 운영 오버헤드" 키워드에 주목