CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
  • Week 1
    • 1.개발자 시점에서 본 AWS: 리전, 인프라, 그리고 책임의 경계
    • 2.IAM의 4대 엔터티: User, Group, Role, Policy
    • 3.STS와 정책 조건: 임시 자격증명의 깊은 세계
    • 4.AWS CLI와 SDK: 자격증명 체이닝부터 SigV4까지
    • 5.Week 1 종합: 인프라와 IAM이 만드는 신뢰의 사슬
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
    • 1.SQS: 큐 하나가 어떻게 시스템을 떼어놓는가
    • 2.SNS: 한 번 발행하면 모두가 듣는다
    • 3.Kinesis: 흐르는 데이터를 붙잡아두는 로그
    • 4.Step Functions와 AppSync: 흐름을 코드 밖으로 꺼내다
    • 5.Week 11 종합: 메시징의 모델을 가르는 질문들
  • Week 12
  • Week 13
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← DVA-C02/Week 11/Day 5

기준: DVA-C02 시험 가이드·오류 제보

DVA-C02· AssociateWeek 11 · Day 5읽기 약 18분

Day 5 - Week 11 종합: 메시징의 모델을 가르는 질문들

Week 11에서 다룬 다섯 서비스인 SQS, SNS, Kinesis, Step Functions, AppSync는 표면적으로 모두 "데이터나 작업을 한 곳에서 다른 곳으로 옮긴다." 그래서 시험은 "이 시나리오에 무엇이 맞는가"를 묻는 형태가 많다. 단편적 암기로는 SQS vs Kinesis, SNS vs EventBridge, Standard vs Express 같은 비교에서 흔들리기 쉽다. 이번 복습은 다섯 서비스를 다시 나열하는 대신, 이들을 가르는 근본 질문 몇 가지로 재구성한다. 어떤 시나리오를 만나든 이 질문들을 순서대로 던지면 답이 좁혀진다.

모델을 가르는 네 가지 질문

질문 1: 한 메시지를 몇 명이 받는가? (1:1 vs 1:N)

SQS와 SNS를 가르는 첫 갈림길이다.

  • 1:1 (한 작업 = 한 처리자) → SQS. 주문 처리, 이미지 변환 같은 "작업 큐". 한 메시지는 한 소비자가 가져가 처리하면 사라진다(포인트-투-포인트).
  • 1:N (한 이벤트 → 여러 반응) → SNS(또는 EventBridge). 주문 생성 하나에 재고·결제·알림이 동시 반응. 발행 즉시 모든 구독자에게 푸시(발행-구독).

둘을 결합한 팬아웃(SNS→여러 SQS)은 "1:N으로 퍼뜨리되 각 소비자는 안정적 버퍼·재시도를 갖는다"를 동시에 얻는 구조다.

질문 2: 소비하면 데이터가 사라지는가? (파괴적 읽기 vs 보존 로그)

SQS와 Kinesis를 가르는 가장 본질적인 질문이다.

  • 소비 = 삭제 → SQS. 한 번 처리하면 끝. 재처리·다중 소비 불가.
  • 읽어도 보존(로그) → Kinesis Data Streams. 여러 소비자가 각자 위치에서 동시에 읽고, 어제 데이터를 새 코드로 재처리(replay)할 수 있다. 소비자는 체크포인트로 자기 위치를 책임진다.

"여러 분석 시스템이 같은 스트림을 동시에", "버그 수정 후 과거 데이터 재처리", "초당 수십만 이벤트 + 순서"가 보이면 Kinesis다.

질문 3: 내가 처리하는가, 그냥 보내기만 하는가? (Data Streams vs Firehose)

Kinesis 안에서의 갈림길이다.

  • 코드로 직접 처리(실시간, 낮은 지연) → Data Streams + Lambda/KCL.
  • 목적지로 자동 적재(코드 없이, 1분 지연 허용) → Firehose → S3/Redshift/OpenSearch/Splunk.

"S3에 자동 저장", "Parquet 변환", "서버리스 ETL"이면 Firehose. "초저지연 실시간"이면 Data Streams.

질문 4: 흐름을 명시적으로 엮어야 하는가? (떼어놓기 vs 오케스트레이션)

  • 단계들을 순서·분기·재시도·롤백으로 엮음 → Step Functions. 가시성과 에러 처리가 필요한 멀티스텝 비즈니스 프로세스.
  • 다중 백엔드 데이터를 한 쿼리로 + 실시간 → AppSync(GraphQL).

이 네 질문은 메시징·통합의 고전 분류축과 일치한다. (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일
KinesisOn-Demand 한도200 MB/s, 200,000 RPS
Firehose최소 지연60초 (Near Real-Time)
Step FunctionsStandard / Express1년·exactly-once / 5분·at-least-once

⚠️ 함정: 특히 헷갈리기 쉬운 경계값 셋이다. (1) Firehose는 실시간이 아니다(최소 60초). "실시간"이 보이면 Data Streams. (2) SNS는 보존이 없다. "전달 실패 시 유실 방지"는 SQS를 끼우거나 구독 DLQ. (3) Lambda-SQS 가시성 타임아웃은 함수 타임아웃의 6배. 이를 지키지 않으면 중복 처리가 생긴다.

헷갈리는 비교 정리

AB핵심 차이
SQS StandardSQS FIFO무제한·순서X·중복가능 vs 300/s·순서·5분 dedup
SQSSNSPull·1:1·보존 vs Push·1:N·비보존
SNSEventBridge단순 복제 배포·속성 필터 vs 풍부한 이벤트 패턴 라우팅·스키마
Kinesis Data StreamsSQS보존 로그·다중 소비·재처리 vs 파괴적 읽기·단일 소비
Data StreamsFirehose직접 처리·실시간 vs 자동 적재·60초+
ClassicEnhanced Fan-Out공유 2MB/s·폴링 vs 소비자별 2MB/s·HTTP/2 푸시
SF StandardExpress1년·exactly-once·비쌈 vs 5분·at-least-once·고처리량
.sync.waitForTaskToken기계 작업 완료 대기 vs 외부/인간 콜백 대기
AppSyncAPI GatewayGraphQL·다중 소스·내장 구독 vs REST·단일 백엔드

SNS와 EventBridge의 구분은 최근 시험에서 비중이 커졌다는 평가가 있다. 둘 다 "이벤트를 여러 대상에 보낸다"지만 강점이 다르다.

  • SNS는 단순·고속 복제 배포(속성 기반 필터, 초고처리량)에 강하다.
  • EventBridge는 풍부한 라우팅(이벤트 본문 전체에 대한 패턴 매칭, 스키마 레지스트리, SaaS 통합, 스케줄링)에 강하다.
  • 대략의 기준은 이렇다. "같은 메시지를 여러 큐/함수에 빠르게 뿌린다"면 SNS, "이벤트 내용에 따라 복잡하게 분기·변환·외부 SaaS 연동"이면 EventBridge다.
  • 시험이 "정석적 팬아웃"을 물으면 SNS+SQS가 기본 답이고, "내용 기반 복잡 라우팅"이면 EventBridge다.

실패 처리: 서비스마다 다른 안전망

각 서비스가 "실패한 메시지/작업"을 어떻게 다루는지는 시험 범위에 드는 비교 포인트다.

  • SQS: maxReceiveCount 초과 시 DLQ(같은 유형끼리). 독이 든 메시지 격리.
  • SNS: 비보존이지만 구독 DLQ(redrive)로 전달 실패 메시지 보존.
  • Kinesis: 순서 보존 때문에 실패 레코드가 뒤를 막음(head-of-line blocking). Lambda ESM의 BisectBatchOnFunctionError·MaximumRetryAttempts·실패 대상(SQS/SNS)으로 완화.
  • Step Functions: 상태별 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 / SNSSimple Queue / Notification Service
DLQDead Letter Queue
KDS / KDFKinesis Data Streams / Firehose
KCL / KPLKinesis Client / Producer Library
EFOEnhanced Fan-Out
ESMEvent Source Mapping
FSMFinite State Machine (Step Functions의 토대)
Saga분산 트랜잭션 보상 패턴
APNs / FCMApple / Google 모바일 푸시
WALWrite-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 지연으로 읽어야 하고 서로 처리량을 빼앗으면 안 된다. 적절한 기능은?

이전Step Functions와 AppSync: 흐름을 코드 밖으로 꺼내다Week 11 · Day 4다음 ECS와 Fargate: 컨테이너를 "서버 없이" 돌린다는 말의 진짜 의미Week 12 · Day 1

참고 공식 자료

  • DVA-C02 공식 시험 안내(새 탭에서 열림)
  • Amazon SQS 공식 문서(새 탭에서 열림)
  • Amazon SNS 공식 문서(새 탭에서 열림)
  • AWS Lambda 공식 문서(새 탭에서 열림)
  • Amazon Data Firehose 공식 문서(새 탭에서 열림)
  • Amazon Kinesis 공식 문서(새 탭에서 열림)

이 페이지

  • 모델을 가르는 네 가지 질문
  • 질문 1: 한 메시지를 몇 명이 받는가? (1:1 vs 1:N)
  • 질문 2: 소비하면 데이터가 사라지는가? (파괴적 읽기 vs 보존 로그)
  • 질문 3: 내가 처리하는가, 그냥 보내기만 하는가? (Data Streams vs Firehose)
  • 질문 4: 흐름을 명시적으로 엮어야 하는가? (떼어놓기 vs 오케스트레이션)
  • 핵심 숫자: 경계값 정리
  • 헷갈리는 비교 정리
  • 실패 처리: 서비스마다 다른 안전망
  • 약어 빠른 참조
  • Week 11 종합 연습 문제