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
  • Week 1
    • 1.ML 수명주기와 ML 엔지니어의 역할
    • 2.ML 문제 유형과 평가 지표 기초
    • 3.AWS ML 스택 한눈에 보기
    • 4.SageMaker 개요: Studio, 학습/추론, 빌트인 알고리즘
    • 5.Week 1 종합 — ML 기초·AWS 스택 복습
  • Week 2
    • 1.데이터 수집: S3 데이터 레이크, Kinesis, 배치 수집, 데이터 포맷
    • 2.데이터 카탈로그·ETL: AWS Glue와 DataBrew
    • 3.쿼리·탐색: Athena, Redshift, EDA 기초
    • 4.데이터 저장 전략: 파티셔닝·포맷 최적화·학습용 준비
    • 5.Week 2 종합 — 데이터 수집·저장 복습
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

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

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

MLA-C01· AssociateWeek 2 · Day 5읽기 약 13분
핵심 정리
  • 이번 주의 전체 그림은 S3를 중심으로 한 데이터 레이크다. 모든 서비스가 S3를 입출력으로 공유한다.
  • 수집은 데이터가 오는 모양으로 고른다 — 스트리밍은 Kinesis, DB는 DMS, 파일은 DataSync.
  • 저장은 학습을 위해 가공한다 — Parquet + Snappy + 날짜 파티셔닝 + 샤딩.
  • Glue가 카탈로그·변환의 허브 — Crawler로 스키마를 등록하고 ETL Job/DataBrew로 변환한다.
  • Athena는 스캔량 과금이라 포맷·파티션 설계가 곧 비용이다. SELECT * 습관이 요금을 키운다.

Day 5 - Week 2 종합 — 데이터 수집·저장 복습

전체 데이터 파이프라인 한눈에

이번 주 서비스들을 따로 외우기보다 "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은 정형·반정형·비정형 데이터를 모두 다루고 어떤 피처가 유용할지 미리 모르기 때문에, "일단 다 모아두고 나중에 해석하는" 데이터 레이크 모델이 잘 맞는다.

수집: 스트리밍 vs 배치

데이터가 들어오는 모양에 따라 도구가 갈린다. 헷갈리기 쉬운 판별이다.

구분서비스적합한 상황정답 키워드
실시간 스트리밍Kinesis Data Streams저지연·다수 컨슈머, 직접 처리"1초 미만", "여러 앱이 소비", "재생"
스트리밍→저장Kinesis Data FirehoseS3/Redshift로 자동 적재, 관리 불필요"코드 없이 적재", "관리 부담 최소"
DB 마이그레이션DMS온프레미스/RDS → S3·Redshift 복제"CDC", "지속적 DB 복제"
대량 파일 전송DataSync온프레미스 파일 → S3 동기화"NFS/SMB 파일 서버"
물리 이전Snowball회선으로는 수개월 걸리는 규모"100TB + 느린 회선"

Kinesis 두 형제의 차이를 구분해야 한다. Data Streams는 컨슈머를 직접 붙여 실시간 처리하고 샤드를 관리한다(유연·저지연). Firehose는 완전관리형으로 버퍼링 후 S3/Redshift에 자동 적재한다(코드 없이 적재만 원할 때).

import boto3
kinesis = 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개로 줄이면 전체 처리량만 깎인다.

저장: 포맷·파티셔닝

수집한 데이터는 그대로 두지 않고 학습에 유리하게 가공한다. 어제 본 저장 전략의 요지를 다시 묶으면 이렇다.

결정기본값이유
포맷Parquet열 기반, 압축, 분할 가능
압축Snappy자주 읽는 데이터에 해제 속도가 중요
파티셔닝날짜(year=/month=/day=)대부분의 쿼리가 날짜로 필터
파일 크기여러 개의 적당한 샤드분산 읽기·ShardedByS3Key 동작
입력 모드데이터가 크면 Pipe/FastFile복사 대기 제거, GPU 굶김 방지

이 다섯 가지가 Athena 쿼리 비용(스캔량 과금)과 SageMaker 학습 속도를 동시에 좌우한다.

흔한 저장 실수와 증상

실수나타나는 증상해법
CSV 그대로 학습학습 시작이 느리고 I/O 비용 큼Parquet 변환
파티션 없이 평면 저장Athena 요금 폭증날짜 파티셔닝
Gzip CSV 단일 파일워커 1개만 일하고 나머지 유휴분할 가능 포맷 + 샤딩
초 단위 파티션작은 파일 수백만 개, 메타데이터 폭증일·월 단위로 묶기
단일 거대 파일 + ShardedByS3Key분배가 전혀 안 됨여러 객체로 분할

카탈로그·변환: Glue

raw 데이터를 학습 가능한 형태로 만드는 ETL의 중심이 AWS Glue다.

Glue 구성요소역할언제 고르나
CrawlerS3 스캔 → 스키마 추론 → Catalog에 테이블 등록수천 파일의 스키마 자동 등록
Data Catalog중앙 메타데이터 저장소 (Athena·Spectrum·EMR 공유)여러 엔진이 같은 정의를 봐야 할 때
ETL Job (Spark)대규모 분산 정제·변환·포맷 변환GB~TB급 변환
Python Shell Job단일 프로세스 스크립트수 MB 소규모 변환
DataBrew코드 없는 시각적 정제·프로파일링비기술 사용자, 빠른 탐색
# Glue PySpark ETL: CSV를 정제해 파티셔닝된 Parquet으로 저장
from awsglue.context import GlueContext
from pyspark.context import SparkContext
 
glueContext = GlueContext(SparkContext.getOrCreate())
df = glueContext.create_dynamic_frame.from_catalog(
    database="ml_datalake", table_name="raw_events"
).toDF()
 
df.write.partitionBy("year", "month").mode("overwrite") \
    .parquet("s3://ml-datalake/curated/events/")

Glue Data Catalog는 "메타데이터의 단일 진실 공급원" 역할을 한다. 한 번 Crawler로 스키마를 등록하면 Athena, Redshift Spectrum, EMR이 같은 테이블 정의를 공유한다. 데이터(S3)와 메타데이터(Catalog)를 분리해, 여러 쿼리 엔진이 같은 데이터를 각자 다른 방식으로 읽게 하는 것이 데이터 레이크 아키텍처의 핵심 설계다.

쿼리·탐색: Athena

준비된 데이터를 읽고 이해하는 단계다. Athena는 서버리스 SQL로 S3를 직접 쿼리하며 스캔한 데이터량에 과금($5/TB)한다. 그래서 Parquet + 파티셔닝 + 압축이 곧 비용 절감이다. EDA(분포·결측·클래스 불균형·데이터 누수 점검)의 주 무대이며, CTAS로 쿼리 결과를 Parquet 학습 데이터셋으로 바로 만들 수도 있다.

-- 파티션 필터로 스캔량을 줄이며 클래스 불균형 확인
SELECT churned, COUNT(*) AS cnt
FROM ml_datalake.events
WHERE year = '2026' AND month = '06'
GROUP BY churned;

⚠️ 함정: Athena 비용이 스캔량에 비례한다는 점을 잊고 SELECT *로 전체를 풀스캔하면 비싸진다. 필요한 컬럼만 고르고(Parquet의 컬럼 스킵 활용), 파티션 키로 필터하는 습관이 비용을 수십 배 줄인다.

Week 2 한 줄 체크리스트

물음답
ML 데이터의 단일 진실 공급원은?S3
Raw 존의 원본을 덮어써도 되나?안 된다. 재처리 경로가 사라진다
코드 없이 스트림을 S3에 적재하려면?Kinesis Data Firehose
저지연 + 다중 소비자 + 재생이 필요하면?Kinesis Data Streams
관계형 DB를 지속적으로 복제하려면?DMS (CDC)
100TB를 느린 회선으로 옮겨야 하면?Snowball
학습 데이터 포맷의 기본값은?Parquet + Snappy
수천 파일의 스키마를 등록하려면?Glue Crawler
수 MB 변환에 Spark를 쓰면?오버헤드가 커 Python Shell이 낫다
Athena 요금이 크면 먼저 볼 것은?스캔량 — 포맷·파티션·컬럼 선택

서비스 오답 매칭 정리

시험에서 오답 보기는 대개 "다른 단계의 서비스"를 슬쩍 끼워 넣는 방식이다. 각 서비스가 어느 단계 소속인지 못 박아두면 걸러진다.

서비스소속 단계이것과 헷갈리기 쉬움
Kinesis Data Streams수집(스트리밍)Firehose와 관리 부담·지연에서 갈림
Kinesis Data Firehose수집→적재Data Streams와 소비자 구조에서 갈림
Kinesis Data Analytics스트림 분석적재 목적과 혼동 주의
DMS수집(DB 복제)DataSync와 소스 종류가 다름
DataSync수집(파일)DMS와 소스 종류가 다름
Snowball수집(물리 이전)DataSync와 회선 조건에서 갈림
Glue Crawler카탈로그ETL Job과 역할이 다름
Glue ETL Job변환Crawler·DataBrew와 인터페이스가 다름
Glue DataBrew변환(노코드)ETL Job과 사용자층이 다름
Athena쿼리Redshift와 과금·적재 여부가 다름
Redshift분석(적재형)Athena와 워크로드 성격이 다름
Redshift Spectrum분석(S3 조인)Athena와 실행 주체가 다름

비용 관점으로 다시 본 이번 주

단계비용이 발생하는 지점줄이는 방법
수집(스트리밍)샤드 수 × 시간처리량에 맞춘 샤드, 가능하면 Firehose
저장저장 용량 × 기간압축, 수명주기 정책, 존별 스토리지 클래스
카탈로그크롤러 실행 시간새 폴더만 크롤, 파티션 프로젝션
변환DPU × 실행 시간적정 Job 타입, 증분 처리
쿼리스캔한 바이트Parquet + 파티셔닝 + 컬럼 선택
학습 입력GPU 유휴 시간Pipe/FastFile, 샤딩, 효율적 포맷

한 번의 저장 설계가 이후 모든 단계의 비용을 좌우한다. Parquet + 날짜 파티셔닝 + 적정 샤딩은 카탈로그·쿼리·학습 세 단계에서 동시에 이득을 낸다.

파이프라인을 망치는 다섯 가지

실수어디서 터지나
Raw 존을 덮어씀변환 버그 발견 시 재처리 불가
파티션 키를 쿼리와 무관하게 선택Athena 요금이 줄지 않음
Gzip CSV로 학습 데이터 저장분산 학습에서 워커 하나만 일함
크롤러를 스케줄 없이 한 번만 실행새 파티션·컬럼이 반영 안 됨
수 MB 변환에 Spark Job 사용기동 오버헤드가 처리 시간을 넘어섬

이번 주 서비스들은 "무엇을 하는가"보다 "어떤 조건일 때 그것이 최선인가"로 물어온다. 서비스 이름과 기능을 외우는 것으로는 부족하고, 지연·관리 부담·비용·데이터 크기라는 네 축에서 비교할 수 있어야 한다.

Week 2를 한 문장으로

"S3에 원본을 불변으로 쌓고, Glue로 카탈로그·변환해 Parquet + 날짜 파티셔닝으로 재배치한 뒤, Athena로 탐색하고 SageMaker가 그대로 학습에 읽는다."

단계한 단어잊지 말 것
수집모양스트리밍/배치/물리 이전이 갈린다
저장불변Raw 존은 덮어쓰지 않는다
카탈로그공유하나의 정의를 모든 엔진이 본다
변환규모데이터 크기가 Job 타입을 정한다
쿼리스캔량읽은 만큼 돈을 낸다
학습 입력병목GPU를 굶기지 않는 것이 목표

다음 주(Week 3)에는 이렇게 준비한 데이터를 모델이 읽을 수 있게 바꾸는 특성 공학과, 데이터의 편향·품질 점검을 다룬다.

📖 용어

  • 데이터 파이프라인 : 소스에서 학습 데이터셋까지 데이터를 옮기고 다듬는 일련의 단계.
  • 수집(ingestion) : 외부의 데이터를 AWS 안(주로 S3)으로 들여오는 과정. 스트리밍과 배치로 나뉜다.
  • PartitionKey : Kinesis에서 레코드를 어느 샤드로 보낼지 정하는 값. 같은 키는 같은 샤드로 가 순서가 지켜진다.
  • 재생(replay) : 보관 기간 안의 스트림 데이터를 처음부터 다시 읽는 것. Data Streams에서만 가능하다.
  • 버퍼링(buffering) : Firehose가 일정 크기나 시간만큼 모았다가 한 번에 내보내는 방식.
  • schema-on-write : 데이터를 넣는 시점에 스키마를 강제하는 전통 DB 방식. 데이터 레이크와 대비된다.
  • Glue Crawler : 저장소를 훑어 스키마와 파티션을 자동으로 알아내 카탈로그에 등록하는 도구.
  • Data Catalog : 여러 쿼리 엔진이 공유하는 중앙 테이블 정의 저장소. 데이터 자체는 담지 않는다.
  • 샤딩(sharding) : 데이터를 적당한 크기의 여러 파일로 나눠 병렬 읽기가 가능하게 하는 작업.
  • 스캔량 과금 : 쿼리가 실제로 읽은 바이트에 비례해 요금이 매겨지는 방식. Athena 설계의 핵심 제약.

📝 연습 문제

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

문제 1

실시간 클릭스트림을 별도 처리 코드 없이 버퍼링 후 S3에 자동 적재하기만 하면 된다. 가장 적합한 서비스는?

문제 2

Glue Crawler가 수행하는 핵심 역할은?

문제 3

ML 데이터 레이크에서 S3가 "단일 진실 공급원" 역할을 하는 이유로 가장 옳은 것은?

문제 4

Athena로 EDA를 하는데 비용이 예상보다 크게 나왔다. 모든 쿼리가 SELECT *로 전체 데이터를 읽고 있었다. 비용을 줄이는 조치로 가장 적절한 것은?

문제 5

같은 user_id를 가진 이벤트들의 처리 순서를 보장하며 Kinesis Data Streams에 적재하려 한다. 어떻게 하는가?

이전데이터 저장 전략: 파티셔닝·포맷 최적화·학습용 준비Week 2 · Day 4다음 특성 공학: 모델이 읽을 수 있는 숫자로 바꾸는 기술Week 3 · Day 1

참고 공식 자료

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

이 페이지

  • 전체 데이터 파이프라인 한눈에
  • 수집: 스트리밍 vs 배치
  • 저장: 포맷·파티셔닝
  • 카탈로그·변환: Glue
  • 쿼리·탐색: Athena
  • Week 2 한 줄 체크리스트
  • 서비스 오답 매칭 정리
  • 비용 관점으로 다시 본 이번 주
  • 파이프라인을 망치는 다섯 가지
  • Week 2를 한 문장으로
  • 용어
  • 연습 문제