이번 주 서비스들을 따로 외우기보다 "raw 데이터가 들어와 학습 가능한 데이터셋이 되기까지"의 흐름 위에 얹는 것이 시험 대비에 효율적이다.
[소스]
│ ① 수집(ingestion)
├─ 스트리밍 ──> Kinesis Data Streams / Firehose ─┐
└─ 배치 ──────> DMS / DataSync / 직접 업로드 ─────┤
v
┌──────────────────┐
│ S3 데이터 레이크 │ ② 저장
│ (단일 진실 공급원)│
└──────────────────┘
│ ③ 카탈로그·변환
Glue Crawler → Data Catalog
Glue ETL Job (정제·포맷 변환)
│ ④ 쿼리·탐색
Athena (서버리스 SQL, EDA)
│
v
SageMaker 학습 (Parquet, Pipe mode)
핵심은 S3가 중심이라는 점이다. 모든 서비스가 S3를 입출력으로 삼고, 학습도 결국 S3에서 데이터를 읽는다.
이 구조가 "데이터 레이크"의 전형이다. 데이터웨어하우스가 정형 데이터를 미리 스키마에 맞춰 적재(schema-on-write)하는 반면, 데이터 레이크는 raw 데이터를 일단 S3에 그대로 쌓고 읽을 때 스키마를 적용한다(schema-on-read). ML은 정형·반정형·비정형 데이터를 모두 다루고 어떤 피처가 유용할지 미리 모르기 때문에, "일단 다 모아두고 나중에 해석하는" 데이터 레이크 모델이 잘 맞는다.
Kinesis 두 형제의 차이를 구분해야 한다. Data Streams는 컨슈머를 직접 붙여 실시간 처리하고 샤드를 관리한다(유연·저지연). Firehose는 완전관리형으로 버퍼링 후 S3/Redshift에 자동 적재한다(코드 없이 적재만 원할 때).
import boto3kinesis = boto3.client("kinesis")# Kinesis Data Streams에 실시간 이벤트 적재kinesis.put_record( StreamName="clickstream", Data=b'{"user_id": "u123", "event": "click", "ts": "2026-06-25T10:00:00Z"}', PartitionKey="u123", # 같은 키는 같은 샤드 → 순서 보장)
"실시간이지만 코드 없이 S3에 그냥 쌓기만"이면 Firehose, "실시간 스트림을 여러 앱이 각자 처리하고 재생(replay)도 필요"하면 Data Streams다. PartitionKey는 같은 키의 레코드를 같은 샤드로 보내 순서를 보장한다 — 사용자별 이벤트 순서가 중요할 때 user_id를 키로 쓴다.
⚠️ 함정: 순서를 지키려고 샤드를 1개로 줄이는 선택은 오답이다. 순서는 샤드 내부에서 보장되므로, PartitionKey를 잘 고르면 샤드를 여러 개 두고도 키 단위 순서를 지킬 수 있다. 샤드를 1개로 줄이면 전체 처리량만 깎인다.
Glue Data Catalog는 "메타데이터의 단일 진실 공급원" 역할을 한다. 한 번 Crawler로 스키마를 등록하면 Athena, Redshift Spectrum, EMR이 같은 테이블 정의를 공유한다. 데이터(S3)와 메타데이터(Catalog)를 분리해, 여러 쿼리 엔진이 같은 데이터를 각자 다른 방식으로 읽게 하는 것이 데이터 레이크 아키텍처의 핵심 설계다.
준비된 데이터를 읽고 이해하는 단계다. Athena는 서버리스 SQL로 S3를 직접 쿼리하며 스캔한 데이터량에 과금($5/TB)한다. 그래서 Parquet + 파티셔닝 + 압축이 곧 비용 절감이다. EDA(분포·결측·클래스 불균형·데이터 누수 점검)의 주 무대이며, CTAS로 쿼리 결과를 Parquet 학습 데이터셋으로 바로 만들 수도 있다.
-- 파티션 필터로 스캔량을 줄이며 클래스 불균형 확인SELECT churned, COUNT(*) AS cntFROM ml_datalake.eventsWHERE year = '2026' AND month = '06'GROUP BY churned;
⚠️ 함정: Athena 비용이 스캔량에 비례한다는 점을 잊고 SELECT *로 전체를 풀스캔하면 비싸진다. 필요한 컬럼만 고르고(Parquet의 컬럼 스킵 활용), 파티션 키로 필터하는 습관이 비용을 수십 배 줄인다.