CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
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
  • Week 1
    • 1.데이터 엔지니어링이란
    • 2.배치 vs 스트리밍
    • 3.AWS 데이터 서비스 조감도
    • 4.데이터 포맷과 모델링
    • 5.Week 1 종합 복습
  • Week 2
    • 1.배치 수집: S3 업로드, DataSync, Transfer Family, Snow
    • 2.Kinesis Data Streams: 샤드, 파티션 키, 처리량
    • 3.Kinesis Data Firehose: 전달 스트림과 적재
    • 4.Amazon MSK(Kafka): 토픽, 파티션, 언제 무엇
    • 5.Week 2 종합: 데이터 수집 1 복습
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

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

기준: DEA-C01 시험 가이드·오류 제보

DEA-C01· AssociateWeek 2 · Day 5읽기 약 15분
핵심 정리
  • 수집 문제는 원천(파일인가 이벤트인가) → 방향(끌어오나 받나) → 회선·규모 → 신선도 → 운영 조건 순서로 좁히면 서비스 하나가 남는다.
  • 배치 4종: 소량·단발 = S3 업로드, 대량·반복·검증 = DataSync, 외부가 SFTP 로 밀어 넣음 = Transfer Family, 회선 부족·초대용량 = Snow.
  • 스트리밍 3종: 멀티 컨슈머·재처리 = KDS, 코드 없는 적재 = Firehose, 기존 Kafka 자산 = MSK.
  • "실시간 분석 + 원본 보관"은 KDS(또는 MSK)를 소스로 두고 Firehose 가 S3 로 적재하는 조합이다.
  • 함정은 대개 한도와 기본값에서 나온다: 병렬성 상한 = 샤드·파티션 수, Firehose 는 보존·재처리 없음, Redshift 적재는 S3 경유 COPY.

Day 5 - Week 2 종합: 데이터 수집 1 복습

한 장으로 보는 수집 서비스 지도

이번 주는 데이터 엔지니어링의 출발점인 "수집(ingestion)"을 배치와 스트리밍으로 나눠 훑었다. 오늘은 흩어진 조각을 하나의 의사결정 지도로 묶는다. DEA-C01 수집 도메인 문제의 9할은 "이 시나리오에 어떤 서비스를 골라야 하나"이고, 그 답은 항상 키워드에서 나온다. 이 종합편의 목표는 시나리오 → 서비스 매핑을 반사적으로 떠올리게 만드는 것이다.

                        데이터 수집
                            │
        ┌───────────────────┴───────────────────┐
      배치(Batch)                          스트리밍(Streaming)
        │                                       │
  ┌─────┼─────────┬──────────┐         ┌────────┼──────────┬─────────┐
S3 업로드  DataSync  Transfer   Snow     KDS      Firehose    MSK
(단발/소량) (반복/대량) Family    (PB/느린  (실시간   (근실시간    (기존
           동기화·검증 (SFTP 수신) 회선)    멀티컨슈머 단순적재)    Kafka)
                                          ·재처리)

배치 4종 복습

서비스한 줄 정의결정 키워드
S3 업로드데이터 레이크 착륙장단발·소량, 멀티파트(대용량), Lifecycle abort
DataSync온프레미스↔AWS 자동 동기화대량·반복 스케줄·무결성 검증·메타데이터 보존·충분한 회선
Transfer FamilySFTP/FTPS 수신 게이트웨이외부 파트너가 표준 프로토콜로 밀어넣음, 코드 변경 최소
Snow 패밀리물리 배송 마이그레이션페타바이트급·느린 회선·일회성

💡 관련 이론: 배치 선택의 두 축은 "데이터양"과 "회선 상황"이다. 회선이 충분하면 온라인(DataSync), 부족하거나 데이터가 너무 크면 오프라인(Snow). 그리고 "내가 끌어오는가(DataSync) vs 외부가 밀어넣는가(Transfer Family)"라는 방향 축이 추가된다. 이 두 축만 잡으면 배치 문제는 거의 다 풀린다.

스트리밍 3종 복습

KDS      : 실시간 파이프. 샤드 단위. 멀티 컨슈머·재처리 가능. 컨슈머 코드 직접 작성.
Firehose : 근실시간 적재 파이프. 버퍼링 후 S3/Redshift/OpenSearch에 자동 적재. 코드 거의 없음.
MSK      : 관리형 Apache Kafka. 표준 오픈소스·이식성. 기존 Kafka 자산 이전에 최적.

핵심 구분 세 가지를 다시 못 박자.

  1. KDS vs Firehose — 복잡한 실시간 처리·여러 컨슈머·재처리면 KDS, 단순 적재면 Firehose. 둘을 잇는 조합(KDS 소스 → Firehose가 S3 적재)은 "실시간 분석 + 원본 보관" 시나리오의 정답.
  2. Kinesis vs MSK — "기존 Apache Kafka"가 보이면 MSK, "최소 운영·AWS 네이티브·단순 적재"면 Kinesis.
  3. 로그 모델 공통점 — KDS·Kafka는 모두 append-only 로그라 소비해도 안 사라지고 멀티 컨슈머·재처리가 된다. SQS와 다르다.
# 종합 패턴: KDS(실시간 분석) + Firehose(원본 S3 보관) 동시 운용
import boto3
firehose = boto3.client("firehose")
 
firehose.create_delivery_stream(
    DeliveryStreamName="raw-archive",
    DeliveryStreamType="KinesisStreamAsSource",          # 소스를 KDS로 지정
    KinesisStreamSourceConfiguration={
        "KinesisStreamARN": "arn:aws:kinesis:...:stream/clickstream",
        "RoleARN": "arn:aws:iam::123456789012:role/firehose-role"
    },
    S3DestinationConfiguration={
        "BucketARN": "arn:aws:s3:::my-data-lake",
        "RoleARN": "arn:aws:iam::123456789012:role/firehose-role",
        "BufferingHints": {"SizeInMBs": 128, "IntervalInSeconds": 300},
        "CompressionFormat": "GZIP"
    }
)
# 같은 clickstream을 실시간 분석 Lambda가 별도로 소비 → 분석 + 보관 동시 달성

잘 설계된 스트리밍 아키텍처는 "수집 → 처리 → 적재"가 느슨하게 결합된다. KDS/MSK가 수집·버퍼 역할을 하면서 여러 다운스트림(실시간 분석, 데이터 레이크 적재, 검색 인덱싱)을 동시에 먹인다. 이 분리 덕분에 한 컨슈머가 느려져도 다른 컨슈머나 프로듀서가 막히지 않는다. 로그 기반 스트림이 단순 큐보다 데이터 플랫폼에 적합한 이유다.

자주 틀리는 함정 정리

  • 멀티파트 미완료 조각 → 보이지 않는 S3 비용, Lifecycle abort 규칙으로 해결
  • 핫 샤드/핫 파티션 → 편향된 파티션 키, 카디널리티 높은 키로 교체
  • 작은 파일 문제 → Firehose 버퍼 크기를 키워 큰 파일로 적재
  • Firehose는 재처리 불가 → 재처리·멀티 컨슈머가 필요하면 KDS
  • 병렬성 상한 = 샤드/파티션 수 → 컨슈머만 늘려도 소용없음
  • Redshift 적재는 S3 경유 COPY → 단건 INSERT 아님

판별 순서: 다섯 번 물으면 하나가 남는다

① 무엇이 들어오나?
   ├─ 파일·객체 덩어리 ───────────────► 배치 쪽 (②로)
   └─ 끊임없이 생기는 작은 레코드 ────► 스트리밍 쪽 (④로)

② 누가 움직이나?
   ├─ 외부 파트너가 SFTP/FTPS 로 올린다 ► Transfer Family
   └─ 우리가 가져온다 (③으로)

③ 회선과 규모는?
   ├─ 소량·단발 ───────────────────────► S3 업로드(CLI/SDK, 큰 파일은 멀티파트)
   ├─ 대량·반복, 회선 충분 ────────────► DataSync
   └─ 회선 부족 또는 초대용량·일회성 ──► Snow 패밀리

④ 기존 자산이 있나?
   ├─ Kafka 코드·커넥터·팀 ────────────► MSK (용량 관리도 싫으면 MSK Serverless)
   └─ 없음 (⑤로)

⑤ 읽는 쪽 요구는?
   ├─ 목적지에 쌓기만 하면 된다 ───────► Data Firehose
   ├─ 여러 앱이 각자 읽는다 / 재처리 ──► Kinesis Data Streams
   └─ 둘 다 ───────────────────────────► KDS + Firehose(KDS 를 소스로)
  • ①을 건너뛰고 ⑤부터 보면 틀린다. "매일 밤 파일 서버 동기화" 문제에 Firehose 를 고르는 실수가 여기서 나온다.
  • ④가 ⑤보다 앞이다. "기존 Apache Kafka"가 지문에 있으면 읽는 쪽 요구가 무엇이든 MSK 계열이 먼저다.

스트리밍 3종 정밀 비교

지난 사흘의 내용을 같은 축으로 한 표에 놓았다. 가로로 읽으면 차이가 보인다.

축Kinesis Data StreamsData FirehoseAmazon MSK
본질다시 읽을 수 있는 로그목적지로 흘려보내는 배달부다시 읽을 수 있는 로그(Kafka)
용량 단위샤드(쓰기 1MB/s·1,000건/s, 읽기 2MB/s)없음(자동)브로커·파티션(Serverless 는 자동)
지연향상된 팬아웃 평균 70ms 수준, 공유 처리량 200ms~버퍼만큼(S3 기본 300초, 0초까지 가능)밀리초~
보존기본 24시간, 최대 365일없음(전달 실패 시 재시도용으로만 보관)설정에 따름, 컴팩션 가능
재처리가능불가가능
소비자여러 앱(KCL, Lambda, Flink, Firehose…)설정한 목적지 하나여러 컨슈머 그룹
순서샤드 안에서 보장보장 대상 아님파티션 안에서 보장
변환소비자가 직접Lambda 변환, Parquet/ORC 변환, 동적 파티셔닝소비자·커넥터가 직접
내구성 설정없음(서비스 관리)없음복제 계수·acks·min.insync.replicas
접속·인증리전 엔드포인트 + IAM리전 엔드포인트 + IAMVPC 내 브로커 + IAM/SCRAM/TLS
운영 부담중(온디맨드면 낮음)가장 낮음높음(Serverless 면 낮음)
과금 구조샤드 시간 또는 데이터량수집 데이터량브로커 시간+스토리지 또는 사용량
  • 세 서비스는 대체재이면서 조합재다. KDS → Firehose, MSK → Firehose 는 모두 정식 구성이다. 보기에 조합이 나오면 "각자 맡은 역할이 겹치지 않는가"로 판단한다.

Week 2 숫자·기본값 한 장

서비스항목값
KDS샤드 쓰기 / 읽기1MB/s 또는 1,000건/s / 2MB/s
KDSGetRecords샤드당 초당 5회, 호출당 최대 10MB·10,000건
KDSPutRecords요청당 최대 500건, 부분 실패 가능
KDS보존 기간기본 24시간, 최대 365일
KDS향상된 팬아웃컨슈머마다 샤드당 2MB/s 전용, 스트림당 등록 컨슈머 20개
KDS온디맨드 시작 용량쓰기 4MB/s, 최근 30일 피크의 2배까지 수용
KDS용량 모드 전환24시간에 2회
FirehoseS3 버퍼1~128MB(기본 5MB), 0~900초(기본 300초)
Firehose포맷 변환 시 버퍼최소 64MB(기본 128MB), 입력은 JSON, 목적지는 S3
Firehose변환 Lambda호출당 최대 5분, 페이로드 6MB, 실패 시 기본 3회 재시도
Firehose레코드 최대 크기1,000KiB(인코딩 전)
FirehoseDirect PUT 전달 실패최대 24시간 재시도 후 유실
FirehoseRedshift·OpenSearch 재시도 시간0~7,200초
Firehose동적 파티셔닝활성 파티션 기본 500개
MSK기본 구성(3 AZ)복제 계수 3, min.insync.replicas 2, 토픽 자동 생성 꺼짐
MSK포트평문 9092, TLS 9094, SASL/SCRAM 9096, IAM 9098
MSK Serverless인증 / 파티션당 유입IAM 만 / 5MB/s
Lambda(KDS 소스)배치 크기 / 병렬화 계수기본 100·최대 10,000 / 1~10
  • 한도는 대부분 조정 가능한 기본값이고 리전에 따라 다르다. 시험이 묻는 것은 숫자 자체보다 "어느 한도에 먼저 걸리는가" 다. 예를 들어 레코드가 작으면 바이트보다 건수 한도가 먼저, 컨슈머가 많으면 쓰기보다 읽기 한도가 먼저 찬다.

시나리오 연습: 단서에서 정답까지

연습 문제와 겹치지 않는 상황이다. 결정적 단서 열을 가리고 먼저 답해 본다.

상황결정적 단서정답탈락하는 보기와 이유
협력사 40곳이 매일 정산 파일을 SFTP 로 올리고, 도착 즉시 검증 잡이 돌아야 한다"SFTP 로 올린다", "도착 즉시"Transfer Family → S3 → S3 이벤트로 Lambda/Glue 트리거DataSync — 우리가 끌어오는 도구라 방향이 반대
온프레미스 NAS 300TB 를 한 번 옮긴 뒤 매일 변경분만 동기화, 전용 회선 있음"변경분", "회선 있음"DataSync(초기 전송 + 스케줄 증분)Snow — 일회성에 맞고 매일 증분에는 부적합
위성 회선뿐인 현장에서 2PB 영상 원본을 한 번 이전"회선이 느리다", "한 번"Snow 패밀리DataSync — 그 회선으로는 현실적인 기간 안에 끝나지 않는다
클릭스트림을 추천 엔진·부정 탐지·데이터 레이크 세 곳이 각자 소비"세 곳이 각자"KDS + 향상된 팬아웃, 레이크 쪽은 FirehoseFirehose 단독 — 목적지가 하나뿐
로그를 OpenSearch 에 색인만 하면 되고 운영 인력이 없다"색인만", "인력 없음"Firehose → OpenSearchKDS + Lambda — 컨슈머 코드를 직접 운영
주문 이벤트를 주문 ID 별 순서대로 처리, 초당 건수는 많지만 레코드는 200바이트"ID 별 순서", "작은 레코드"파티션 키 = 주문 ID, KPL 집계무작위 키 — 순서가 깨진다
Lambda 컨슈머가 잘못된 레코드 하나 때문에 한 샤드에서 계속 실패"같은 배치 반복 실패"배치 분할 + 재시도 제한 + 실패 대상샤드 증설 — 막힌 샤드는 그대로다
블랙프라이데이 전후로 유입이 평소의 수십 배로 급변, 용량 계획 인력 없음"급변", "용량 계획 없음"KDS 온디맨드(급증 직전 스로틀 대비 재시도 구현)프로비저닝 고정 샤드 — 과소 또는 과다
온프레미스 Kafka 의 Debezium 커넥터까지 그대로 AWS 로"커넥터까지 그대로"MSK + MSK ConnectKDS — 커넥터 생태계를 버려야 한다
MSK 토픽을 분석가가 Redshift 에서 초 단위 지연으로 조회"Redshift 에서 낮은 지연"Redshift 스트리밍 수집(구체화된 뷰)Firehose → Redshift — S3 스테이징과 버퍼만큼 늦다
JSON 스트림을 S3 에 쌓는데 Athena 비용이 크고 고객별로 폴더를 나누고 싶다"Athena 비용", "고객별 폴더"Firehose 포맷 변환(Parquet) + 동적 파티셔닝버퍼 간격 단축 — 파일이 더 잘게 쪼개진다
Firehose 의 S3 전달이 IAM 변경으로 이틀간 실패했고 소스는 Direct PUT 이었다"이틀", "Direct PUT"24시간 초과분은 유실 → KDS 를 소스로 두고 보존 연장했어야 함"S3 오류 폴더에 남는다" — S3 전달 자체가 실패하면 갈 곳이 없다

증상 → 원인 → 조치

증상가장 흔한 원인조치
S3 요금이 저장량보다 빠르게 는다완료되지 않은 멀티파트 업로드 조각Lifecycle AbortIncompleteMultipartUpload
KDS 쓰기 스로틀이 일부 샤드에만편향된 파티션 키키 재설계, 해당 샤드 분할(여러 키가 몰린 경우)
KDS 읽기 스로틀, 컨슈머 추가 후 지연 증가공유 처리량 경쟁향상된 팬아웃
이터레이터 에이지가 계속 증가컨슈머 처리 속도 부족 또는 오류 재시도 정체샤드·병렬화 계수 증가, 독약 레코드 격리
예외 없이 레코드가 간헐적으로 누락PutRecords 부분 실패 미확인FailedRecordCount 확인 후 실패분 재전송
Firehose 로 쌓은 S3 조회가 느리다작은 파일, 행형 JSON버퍼 크기 확대, Parquet 변환
Athena 가 Firehose 파일에서 한 줄만 읽는다레코드 사이 구분자 없음개행 구분자 추가
Firehose → Redshift 일부 구간 누락COPY 실패 후 재시도 시간 초과로 건너뜀errors/ 매니페스트로 수동 COPY
Kafka 컨슈머를 늘려도 처리량 불변컨슈머 수 > 파티션 수파티션 증설
브로커 장애 후 메시지 일부 유실acks=1 또는 복제 계수 부족acks=all, 복제 계수 3, min.insync.replicas=2
Lambda·Glue 가 MSK 에 접속 실패VPC 서브넷·보안 그룹·인증 방식 불일치네트워크 경로와 포트(인증 방식별)를 확인

⚠️ 함정: 표의 조치 중 "샤드를 늘린다"가 정답인 줄은 생각보다 적다. 쏠림은 키 문제, 읽기 경쟁은 팬아웃 문제, 막힘은 오류 처리 문제다. 용량 증설은 "모든 샤드가 고르게 한도에 닿았을 때"에만 맞는 처방이다.

Week 3는 수집의 나머지 절반 — 스트림 위에서의 실시간 처리와 윈도우, 수집 신뢰성(멱등성·재시도·DLQ), DMS 와 CDC, 이벤트 기반 아키텍처 — 으로 넘어간다. 오늘 만든 "무엇으로 들여오나"의 지도 위에 "들여온 흐름을 어떻게 안전하게 다루나"가 얹힌다. 수집 도메인의 키워드 매핑은 이 지도에서 확인한다.

📖 용어

  • 수집(ingestion) : 원천의 데이터를 분석 환경으로 들여오는 단계. 배치와 스트리밍으로 나뉜다.
  • 증분 동기화 : 지난 실행 이후 바뀐 것만 골라 옮기는 방식. DataSync 의 스케줄 작업이 대표적이다.
  • append-only 로그 : 뒤에 덧붙이기만 하는 기록 구조. 읽어도 지워지지 않아 여러 소비자가 각자 위치에서 다시 읽을 수 있다.
  • 팬아웃 : 하나의 스트림을 여러 소비자가 독립적으로 받아 가는 것.
  • 재처리(replay) : 보존 기간 안의 과거 레코드를 처음부터 다시 읽어 처리하는 것.
  • 핫 샤드 / 핫 파티션 : 키가 쏠려 특정 샤드·파티션에만 부하가 몰리는 현상.
  • 독약 레코드(poison pill) : 처리할 때마다 실패해 뒤 레코드의 처리를 막는 레코드.
  • 스테이징 : 최종 목적지에 넣기 전에 잠시 거치는 중간 저장 위치. Firehose 의 Redshift 적재는 S3 를 스테이징으로 쓴다.
  • at-least-once : 최소 한 번은 전달하되 중복이 생길 수 있는 전달 보장. 받는 쪽이 중복을 견디게 설계한다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 KDS를 Firehose보다 우선해야 하는 시나리오는?

문제 2

온프레미스 파일 서버의 데이터를 매일 야간에 변경분만 무결성 검증과 함께 S3로 동기화한다. 회선 대역폭은 충분하다. 가장 적절한 서비스는?

문제 3

한 회사가 기존 Apache Kafka 기반 파이프라인과 Kafka Connect 커넥터를 운영 중이며, 이를 AWS로 코드 변경 최소화하며 옮기려 한다. 동시에 클러스터 운영 부담도 줄이고 싶다. 가장 적절한 선택은?

문제 4

Firehose로 S3에 적재한 데이터를 Athena로 분석하는데, 수많은 작은 파일과 행 기반 JSON 때문에 쿼리가 느리고 비싸다. 두 가지 개선 방향으로 옳은 것은?

문제 5

KDS와 Amazon MSK가 공통으로 가진, 단순 메시지 큐(SQS)와 구별되는 특성은?

이전Amazon MSK(Kafka): 토픽, 파티션, 언제 무엇Week 2 · Day 4다음 스트리밍 처리: Managed Service for Apache Flink와 윈도우 집계Week 3 · Day 1

참고 공식 자료

  • DEA-C01 공식 시험 안내(새 탭에서 열림)
  • Amazon Data Firehose 공식 문서(새 탭에서 열림)
  • Amazon S3 공식 문서(새 탭에서 열림)
  • Amazon MSK 공식 문서(새 탭에서 열림)
  • Amazon Redshift 공식 문서(새 탭에서 열림)
  • AWS DataSync 공식 문서(새 탭에서 열림)

이 페이지

  • 한 장으로 보는 수집 서비스 지도
  • 배치 4종 복습
  • 스트리밍 3종 복습
  • 자주 틀리는 함정 정리
  • 판별 순서: 다섯 번 물으면 하나가 남는다
  • 스트리밍 3종 정밀 비교
  • Week 2 숫자·기본값 한 장
  • 시나리오 연습: 단서에서 정답까지
  • 증상 → 원인 → 조치
  • 용어
  • 연습 문제