기준: DVA-C02 시험 가이드오류 제보
Week 11에서 다룬 다섯 서비스인 SQS, SNS, Kinesis, Step Functions, AppSync는 표면적으로 모두 "데이터나 작업을 한 곳에서 다른 곳으로 옮긴다." 그래서 시험은 "이 시나리오에 무엇이 맞는가"를 묻는 형태가 많다. 단편적 암기로는 SQS vs Kinesis, SNS vs EventBridge, Standard vs Express 같은 비교에서 흔들리기 쉽다. 이번 복습은 다섯 서비스를 다시 나열하는 대신, 이들을 가르는 근본 질문 몇 가지로 재구성한다. 어떤 시나리오를 만나든 이 질문들을 순서대로 던지면 답이 좁혀진다.
SQS와 SNS를 가르는 첫 갈림길이다.
둘을 결합한 팬아웃(SNS→여러 SQS)은 "1:N으로 퍼뜨리되 각 소비자는 안정적 버퍼·재시도를 갖는다"를 동시에 얻는 구조다.
SQS와 Kinesis를 가르는 가장 본질적인 질문이다.
"여러 분석 시스템이 같은 스트림을 동시에", "버그 수정 후 과거 데이터 재처리", "초당 수십만 이벤트 + 순서"가 보이면 Kinesis다.
Kinesis 안에서의 갈림길이다.
"S3에 자동 저장", "Parquet 변환", "서버리스 ETL"이면 Firehose. "초저지연 실시간"이면 Data Streams.
이 네 질문은 메시징·통합의 고전 분류축과 일치한다. (1) point-to-point vs pub/sub, (2) destructive read vs log-based, (3) processing vs delivery, (4) choreography vs orchestration이다. Gregor Hohpe의 Enterprise Integration Patterns(2003)와 Jay Kreps의 로그 중심 사상(2013)이 이 축들을 정립했다. AWS의 다섯 서비스는 이 보편적 축들 위의 각기 다른 좌표다. 한 서비스의 특성을 외우기보다 "이 서비스는 어느 축의 어느 쪽인가"로 위치를 잡으면 비교 문제가 좌표 읽기로 바뀐다.
| 서비스 | 항목 | 값 |
|---|---|---|
| SQS | 메시지 최대 크기 | 1 MiB (2025년 8월 256 KiB에서 상향. 초과 시 Extended Client → S3, 2GB) |
| SQS | 보존 기간 | 60초 ~ 14일 (기본 4일) |
| SQS | 가시성 타임아웃 | 0 ~ 12시간 (기본 30초) |
| SQS | 메시지 지연 | 0 ~ 15분 |
| SQS FIFO | 처리량 | 300 msg/s, 배치 3,000, 고처리량 70,000+ |
| SNS | 메시지 보존 | 없음 (전달 실패 시 소실) |
| SNS | 구독자 수/토픽 | 12,500,000 |
| Kinesis | 샤드 쓰기 | 1 MB/s 또는 1,000 records/s |
| Kinesis | 샤드 읽기(클래식) | 2 MB/s 공유 / (EFO) 2 MB/s 소비자별 |
| Kinesis | 보존 | 24시간 ~ 365일 |
| Kinesis | On-Demand 한도 | 200 MB/s, 200,000 RPS |
| Firehose | 최소 지연 | 60초 (Near Real-Time) |
| Step Functions | Standard / Express | 1년·exactly-once / 5분·at-least-once |
⚠️ 함정: 특히 헷갈리기 쉬운 경계값 셋이다. (1) Firehose는 실시간이 아니다(최소 60초). "실시간"이 보이면 Data Streams. (2) SNS는 보존이 없다. "전달 실패 시 유실 방지"는 SQS를 끼우거나 구독 DLQ. (3) Lambda-SQS 가시성 타임아웃은 함수 타임아웃의 6배. 이를 지키지 않으면 중복 처리가 생긴다.
| A | B | 핵심 차이 |
|---|---|---|
| SQS Standard | SQS FIFO | 무제한·순서X·중복가능 vs 300/s·순서·5분 dedup |
| SQS | SNS | Pull·1:1·보존 vs Push·1:N·비보존 |
| SNS | EventBridge | 단순 복제 배포·속성 필터 vs 풍부한 이벤트 패턴 라우팅·스키마 |
| Kinesis Data Streams | SQS | 보존 로그·다중 소비·재처리 vs 파괴적 읽기·단일 소비 |
| Data Streams | Firehose | 직접 처리·실시간 vs 자동 적재·60초+ |
| Classic | Enhanced Fan-Out | 공유 2MB/s·폴링 vs 소비자별 2MB/s·HTTP/2 푸시 |
| SF Standard | Express | 1년·exactly-once·비쌈 vs 5분·at-least-once·고처리량 |
.sync | .waitForTaskToken | 기계 작업 완료 대기 vs 외부/인간 콜백 대기 |
| AppSync | API Gateway | GraphQL·다중 소스·내장 구독 vs REST·단일 백엔드 |
SNS와 EventBridge의 구분은 최근 시험에서 비중이 커졌다는 평가가 있다. 둘 다 "이벤트를 여러 대상에 보낸다"지만 강점이 다르다.
각 서비스가 "실패한 메시지/작업"을 어떻게 다루는지는 시험 범위에 드는 비교 포인트다.
maxReceiveCount 초과 시 DLQ(같은 유형끼리). 독이 든 메시지 격리.BisectBatchOnFunctionError·MaximumRetryAttempts·실패 대상(SQS/SNS)으로 완화.Retry(백오프)와 Catch(오류 분기), 보상 트랜잭션(Saga).📚 사례: 세 종류의 DLQ를 시험이 섞어 낼 수 있다. SQS DLQ(큐 메시지가 maxReceiveCount 초과), SNS 구독 DLQ(구독자 전달 실패), Lambda DLQ(Lambda 비동기 호출 실패). 같은 "DLQ"여도 잡는 실패의 계층이 다르다. 예: "SNS가 HTTPS 엔드포인트 전달에 실패한 메시지 보존" → SNS 구독 DLQ. "Lambda가 비동기 이벤트 처리에 실패" → Lambda DLQ(또는 Destinations). "SQS 메시지가 3번 처리 실패" → SQS DLQ. 문구에서 "어느 단계의 실패인가"를 먼저 짚어야 한다.
| 약어 | 풀네임 |
|---|---|
| SQS / SNS | Simple Queue / Notification Service |
| DLQ | Dead Letter Queue |
| KDS / KDF | Kinesis Data Streams / Firehose |
| KCL / KPL | Kinesis Client / Producer Library |
| EFO | Enhanced Fan-Out |
| ESM | Event Source Mapping |
| FSM | Finite State Machine (Step Functions의 토대) |
| Saga | 분산 트랜잭션 보상 패턴 |
| APNs / FCM | Apple / Google 모바일 푸시 |
| WAL | Write-Ahead Log (로그 모델의 뿌리) |
선택지를 클릭하면 정답·해설이 펼쳐집니다.
문제 1
결제 트랜잭션을 고객별 순서대로, 중복 없이 정확히 한 번 처리해야 한다. 초당 약 4,000건이 발생한다. 적절한 구성은?
문제 2
S3 객체 업로드 하나에 썸네일 생성·바이러스 검사·검색 색인 세 작업이 독립적으로(한 작업의 실패가 다른 작업에 영향 없이) 반응해야 한다. 가장 정석적인 패턴은?
문제 3
클릭스트림을 Lambda로 실시간 이상 탐지하면서, 동시에 모든 원본을 S3에 아카이브해 나중에 Athena로 분석하려 한다. 적절한 구성은?
문제 4
Firehose로 로그를 S3에 적재 중인데 "데이터가 1분 정도 늦게 도착한다"는 불만이 있다. 1초 이내 실시간 처리가 필수라면?
문제 5
SNS를 통해 Lambda로 직접 푸시하던 중, Lambda가 잠시 다운된 사이 발행된 알림이 영구 유실됐다. 내구성을 확보하려면?
문제 6
Kinesis 스트림에서 특정 샤드만 ProvisionedThroughputExceededException이 나고 다른 샤드는 한가하다. 원인과 해결은?
문제 7
여러 Lambda를 순서대로 실행하고, 중간 실패 시 이전 단계를 보상(롤백)하며, 운영자가 전체 흐름을 시각적으로 추적해야 한다. 적절한 서비스는?
문제 8
환불 워크플로에서 고액 건은 관리자 승인을 받아야 하며, 승인까지 며칠이 걸릴 수 있다. 적절한 구성은?
문제 9
모바일 앱이 한 화면에 사용자(DynamoDB)·주문(Lambda)·추천(OpenSearch)을 한 번에 가져오고, 주문 상태 변경을 실시간으로 받아야 한다. 적절한 서비스는?
문제 10
Lambda가 SQS 큐를 소비하는데 같은 메시지가 중복 처리된다. 함수 타임아웃은 60초다. 가장 적절한 조치는?
문제 11
SNS가 HTTPS 엔드포인트로의 전달에 반복 실패한 메시지를 보존해 분석하려 한다. 적절한 방법은?
문제 12
세 소비자가 같은 Kinesis 스트림을 각각 수십 ms 지연으로 읽어야 하고 서로 처리량을 빼앗으면 안 된다. 적절한 기능은?