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
  • Week 3
  • Week 4
  • Week 5
    • 1.Amazon EMR: Spark·Hive와 클러스터 운영, 그리고 EMR Serverless
    • 2.Lambda 변환과 경량 처리: 이벤트 기반 ETL의 한계와 적합성
    • 3.오케스트레이션: Step Functions·MWAA·Glue Workflows의 선택 기준
    • 4.성능·비용 최적화: 파일 포맷·압축·파티셔닝과 작은 파일 문제
    • 5.Week 5 종합: 데이터 변환 2 — 엔진·오케스트레이션·최적화 통합 복습
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

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

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

DEA-C01· AssociateWeek 5 · Day 5읽기 약 15분
핵심 정리
  • 변환 엔진은 규모와 운영 부담으로 고른다 — Lambda(작은 파일 즉시 처리·Firehose 변환·글루 코드, 실패는 DLQ로 격리), Glue(서버리스 ETL), EMR Serverless(클러스터 없는 빅데이터), EMR on EC2(규모·제어·생태계).
  • 오케스트레이션은 Step Functions(AWS 네이티브 서버리스), MWAA(Airflow 자산·멀티 환경), Glue Workflows(Glue 전용)로 갈린다.
  • 최적화의 본질은 읽을 데이터를 줄이는 것이다. 열 포맷 → 분할 가능 압축 → 저카디널리티 파티션 → 128MB~1GB 파일 순으로 점검한다.
  • 한도가 선택을 가른다. Lambda는 호출당 15분·메모리 10GB, Step Functions Express는 5분이고 작업 완료 대기(.sync)를 쓸 수 없다.
  • EMR 비용의 정석은 Task 노드 스팟, 데이터는 S3(EMRFS), 작업할 때만 띄우는 Transient 클러스터다.

Day 5 - Week 5 종합: 데이터 변환 2 — 엔진·오케스트레이션·최적화 통합 복습

한눈에 보는 Week 5 지도

이번 주는 "데이터를 어떻게 변환하고, 어떻게 흐름을 조율하며, 어떻게 싸고 빠르게 만드는가"를 다뤘다. Week 4까지의 Glue가 서버리스 ETL의 기본이었다면, Week 5는 그 주변을 둘러싼 더 큰 도구 상자다 — 대규모 처리를 위한 EMR, 경량 이벤트 처리를 위한 Lambda, 흐름을 엮는 오케스트레이션, 그리고 모든 것을 관통하는 성능·비용 최적화다. 오늘은 이 네 축을 하나의 의사결정 지도로 다시 묶는다.

[변환 엔진 선택]          [오케스트레이션]         [최적화 레이어]
 Lambda  : 경량·이벤트      Step Functions: AWS네이티브   포맷: Parquet/ORC
 Glue    : 서버리스 ETL     MWAA(Airflow) : 복잡·멀티     압축: Snappy/Zstd
 EMR     : 대규모·제어      Glue Workflows: Glue전용      파티션: 날짜 등
 EMR S.  : 서버리스 빅데이터                              파일크기: 128MB~1GB

이 세 열은 독립적이지 않다. 실제 파이프라인은 "오케스트레이터가 변환 엔진들을 순서대로 호출하고, 그 결과를 최적화된 포맷·파티션으로 저장"하는 식으로 세 축이 맞물린다.

1) 변환 엔진 선택: 규모와 제어의 저울

Day 1~2의 핵심은 "작업 규모와 운영 부담의 트레이드오프"다.

엔진규모운영 부담결정적 단서
Lambda작음(15분/10GB)매우 낮음"이벤트 기반", "작은 파일 즉시 변환"
Glue중~대낮음(서버리스)"서버리스 ETL", "빠른 개발", "DPU 과금"
EMR Serverless대낮음"빅데이터, 클러스터 관리 싫음"
EMR on EC2매우 큼높음"Hive/HBase/Presto", "스팟 비용 제어", "세밀 튜닝"

EMR에서 반드시 기억할 점: Core 노드(저장+연산)는 온디맨드, Task 노드(연산 전용)는 스팟. 영구 데이터는 S3(EMRFS)에 두고 Transient 클러스터로 작업 시에만 띄워 비용을 아낀다. HDFS는 임시 저장소다.

🎯 시나리오: 한 회사의 파이프라인을 설계한다. (1) IoT 기기가 S3에 작은 JSON을 끊임없이 올린다 → Lambda가 도착 즉시 정제. (2) 매일 새벽 누적 데이터를 대규모 집계 → EMR Transient(스팟 Task) 또는 Glue. (3) 결과를 분석용으로 저장 → Parquet + 날짜 파티션. (4) 전체 흐름 조율 → Step Functions. 각 도구가 강점 영역에서만 쓰인다는 점이 핵심이다.

2) 오케스트레이션: 흐름을 엮는 세 도구

Day 3의 결론은 키워드 매칭으로 정리된다.

단서선택
"AWS 서비스 중심 + 서버리스 + 분기/재시도"Step Functions
"고빈도·단기(5분 내) 이벤트"Step Functions Express
"기존 Airflow", "Python 동적 DAG", "멀티 클라우드/온프레미스"MWAA
"순수 Glue 크롤러·작업, 추가 서비스 불필요"Glue Workflows

함정 재확인: "단계가 많다 = MWAA"가 아니다. 전부 AWS 서비스이고 저운영을 원하면 Step Functions가 맞다. MWAA의 단서는 "Airflow 자산", "멀티 환경", "복잡한 Python 로직"이다.

세 도구가 모두 DAG를 쓰는 이유는 비순환 그래프가 위상 정렬 가능해 "의존성 충족 순서"로 실행하고 독립 작업을 병렬화할 수 있기 때문이다. 오케스트레이션은 결국 "DAG를 정의하고 실행 보장(재시도·멱등성·가시성)을 제공하는 일"이며, 세 도구는 그 실행 보장을 각각 서버리스/표준Airflow/Glue내장 방식으로 제공한다.

3) 최적화: 읽을 데이터 최소화

Day 4의 네 무기는 우선순위 순으로 외운다.

  1. 포맷: CSV/JSON → Parquet/ORC(컬럼 프루닝 + 통계 스킵)
  2. 압축: 분할 가능한 Snappy/Zstd. 거대 단일 Gzip 텍스트 금지(병렬성 죽음)
  3. 파티셔닝: 자주 필터하는 저카디널리티 컬럼(날짜·지역). 고카디널리티 금지(작은 파일 폭증)
  4. 파일 크기: 128MB~1GB로 컴팩션. 작은 파일 수만 개는 오버헤드 지옥

포맷 구분 한 줄 요약: 분석 쿼리 = Parquet/ORC(열 기반), 스키마 진화·빠른 쓰기 = Avro(행 기반).

⚠️ 함정: 최적화 문제는 보통 여러 처방을 동시에 요구한다. "Athena 비용 급증" 시나리오의 정답은 "Parquet으로 바꾼다" 하나가 아니라 포맷 전환 + 파티셔닝 + 컴팩션의 조합인 경우가 많다. 보기에서 "가장 효과적인 단일 조치"를 물으면 포맷(열 기반) 또는 파티셔닝이 보통 1순위지만, "모두 적용하라"형 문제도 나온다.

통합 의사결정 플로우

문제를 만났을 때의 사고 순서:

Q1. 처리 규모는? 
    작음/이벤트 → Lambda
    중~대 서버리스 → Glue / EMR Serverless
    매우 큼/생태계 다양/비용 제어 → EMR on EC2

Q2. 흐름을 어떻게 조율?
    AWS 네이티브 서버리스 → Step Functions
    Airflow 자산/멀티 환경 → MWAA
    순수 Glue → Glue Workflows

Q3. 저장은 어떻게 최적화?
    Parquet + Snappy + 날짜 파티션 + 128MB~1GB

한도와 실행 모델 비교: 숫자가 선택을 가르는 지점

엔진 선택 문제의 오답은 대개 한도에 걸려서 탈락한다. 네 엔진을 같은 항목으로 놓고 본다.

항목LambdaGlue Spark JobEMR on EC2EMR Serverless
실행 단위함수 호출Job 실행클러스터 + Step애플리케이션 + Job 실행
시간 한도호출당 15분타임아웃 설정(최대 7일)클러스터가 떠 있는 동안Job 실행 단위
메모리128MB~10,240MB워커 유형이 결정(G.1X는 16GB)인스턴스 타입이 결정워커 크기가 결정
유휴 비용없음없음클러스터가 떠 있으면 발생없음(사전 초기화 용량을 두면 발생)
상주 서비스(HBase 등)불가불가가능불가(Spark·Hive 작업 실행용)
세부 튜닝·스팟 제어메모리 설정 정도워커 유형·수인스턴스·스팟·설정 전부워커 크기·용량 한도
  • Lambda의 나머지 한도도 같이 묶어 둔다. /tmp 임시 저장소는 512MB~10,240MB, 페이로드는 동기 6MB·비동기 1MB다(비동기 한도는 오랫동안 256KB였으므로 시험 자료에는 256KB로 나올 수 있다). CPU는 메모리에 비례해 배정되므로 CPU가 모자란 함수는 메모리를 올려야 빨라진다.
  • EMR Serverless의 사전 초기화 용량은 워커를 미리 데워 두어 작업을 몇 초 안에 시작하게 해 주지만, 그만큼 유휴 비용이 생긴다. "간헐적 배치, 유휴 비용 없음"이 조건이면 켜지 않는다.
  • "30분 걸리는 단일 파일 변환"은 데이터가 작아도 Lambda로는 안 된다. 크기가 아니라 시간 한도가 탈락 사유다.

Step Functions Standard와 Express: ETL에서 갈리는 지점

Day 3에서는 실행 시간(1년 대 5분)으로만 구분했다. ETL 오케스트레이션에서는 그보다 중요한 차이가 있다.

구분StandardExpress
최대 실행 시간1년5분
실행 보장exactly-once비동기는 at-least-once, 동기는 at-most-once
과금 기준상태 전이 수실행 수 + 실행 시간 + 메모리
작업 완료 대기(.sync), 콜백(.waitForTaskToken)지원미지원
Distributed Map지원미지원
실행 이력서비스가 보관(완료 후 90일)CloudWatch Logs로 남겨야 본다
  • ETL 오케스트레이션의 기본은 Standard다. Glue Job이나 EMR Step은 몇 분에서 몇 시간이 걸리고, glue:startJobRun.sync처럼 끝날 때까지 기다리는 통합 패턴은 Express에서 쓸 수 없다.
  • Standard는 멱등하지 않은 작업을 맡겨도 된다. 같은 상태가 두 번 실행되지 않으므로(Retry를 적은 경우 제외) EMR 클러스터 생성 같은 작업에 맞다. Express는 한 번 더 실행될 수 있어 멱등한 작업에만 쓴다.
  • 과금 직관이 반대다. Standard는 단계가 많을수록, Express는 오래·자주 돌수록 비싸다. 초당 수백 건의 짧은 이벤트를 Standard로 돌리면 상태 전이 수가 폭증한다.
  • 워크플로 유형은 상태 머신을 만든 뒤에는 바꿀 수 없다.

실패는 누가 다시 시도하는가

파이프라인 장애 문제는 "어느 계층이 재시도하고, 실패가 어디에 남는가"를 묻는다.

계층기본 재시도실패가 남는 곳
Lambda 비동기 호출(S3 이벤트 등)함수 오류 시 2회 더DLQ 또는 실패 대상(설정하지 않으면 버려진다)
Lambda + Kinesis/DynamoDB Streams레코드가 만료될 때까지 반복(해당 샤드가 막힌다)재시도 상한·배치 분할·실패 대상을 직접 설정해야 한다
Step Functions상태에 Retry를 적은 만큼Catch로 분기해 알림·보상 처리
Glue Job설정한 횟수(0~10회). 타임아웃 종료는 재시도하지 않는다Job 실행 상태와 CloudWatch

⚠️ 함정: 재시도를 여러 계층에 겹쳐 두면 곱해진다. Step Functions의 Retry 3회와 Glue Job 자체의 재시도 3회를 함께 걸면, 한 번의 장애에 Job이 최대 16번 실행될 수 있다. 재시도는 한 계층(보통 오케스트레이터)에만 두고, 재실행되어도 결과가 같도록 출력은 덧붙이기가 아니라 파티션 단위 덮어쓰기로 설계한다.

EMR에서 한 번 더 짚을 것

  • 스팟 Task 노드가 안전하다는 말의 전제. Task 노드는 HDFS DataNode를 돌리지 않으므로 회수되어도 데이터는 잃지 않는다. 하지만 작업을 지휘하는 YARN 애플리케이션 마스터가 그 노드에 올라가 있었다면 작업 자체가 실패한다. EMR 6.x부터는 애플리케이션 마스터가 Core·Task 어디에나 올라갈 수 있는 것이 기본값이므로, 스팟 비중이 크면 노드 레이블로 Core(또는 온디맨드) 노드에만 두도록 설정한다.
  • Primary 노드는 3대로 구성해 고가용성을 확보할 수 있다. 1대 구성에서는 Primary가 단일 장애점이다. 스팟으로 두면 안 되는 이유다.
  • Managed Scaling은 최소·최대 용량만 정해 두면 EMR이 지표를 보고 Core·Task 노드를 늘리고 줄인다. YARN 기반 애플리케이션(Spark·Hive·Flink 등)에만 동작하고 Presto·HBase에는 적용되지 않는다. Primary 노드는 조정 대상이 아니다.
  • Instance Fleets는 구매 옵션과 인스턴스 타입의 혼합이 기본 기능이라 스팟 용량 확보에 유리하다. Instance Groups는 그룹마다 타입과 구매 옵션이 하나씩이다.

과금 구조 한 표

서비스과금 기준줄이는 방법
Lambda요청 수 + 실행 시간 × 메모리메모리 튜닝, 불필요한 호출 줄이기
GlueDPU × 실행 시간(초 단위)워커 수·타임아웃 조정, Flex, Auto Scaling
EMR on EC2EC2 요금 + EMR 요금(인스턴스 가동 시간)Task 스팟, Transient 클러스터, Managed Scaling
EMR Serverless워커가 쓴 vCPU·메모리·스토리지 × 시간사전 초기화 용량 최소화, 용량 한도 설정
Step Functions Standard상태 전이 수단계 합치기, 잦은 폴링 루프 피하기
Step Functions Express실행 수 + 실행 시간 + 메모리짧고 가벼운 흐름에만 사용
MWAA환경 가동 시간 + 워커환경 클래스와 워커 자동 조정 범위
Athena스캔한 데이터 양Day 4의 네 가지(포맷·압축·파티션·파일 크기)

시나리오 연습: 오답을 먼저 걸러내기

시나리오먼저 탈락하는 보기선택
5GB CSV 한 파일을 Parquet으로 바꾸는 데 30분쯤 걸린다Lambda(15분 초과)Glue Job
1MB JSON이 초당 수십 개씩 S3에 도착하고, 건마다 검증 후 옮긴다Glue(건마다 Job을 띄우는 것은 과하다)Lambda + 동시성 제한 + DLQ
Glue Job 세 개를 순서대로 돌리고 실패하면 알림을 보낸다. 인프라는 두고 싶지 않다MWAA(상시 비용), Express(완료 대기 불가)Step Functions Standard
크롤러 → Glue Job → 크롤러만 엮으면 된다MWAAGlue Workflows
온프레미스의 Airflow DAG 200개를 옮긴다Step Functions(전부 다시 작성)MWAA
하루 한 번 2시간짜리 Spark 배치, 클러스터를 운영할 인력이 없다EMR on EC2EMR Serverless 또는 Glue
Presto와 HBase를 상시 띄워 두고 스팟으로 비용을 통제한다EMR Serverless, GlueEMR on EC2(Core 온디맨드, Task 스팟)
Firehose가 1분마다 작은 파일을 만들어 Athena가 느려졌다포맷만 바꾸기버퍼 크기·간격 확대 + 컴팩션
user_id로 파티셔닝했더니 파티션이 수백만 개가 됐다파일을 더 쪼개기날짜 등 저카디널리티 컬럼으로 재설계
이벤트마다 몇 초짜리 변환 단계 네 개를 초당 수백 건 실행한다Standard(전이 수 과금)Step Functions Express(단계는 멱등하게)

다음 주는 데이터를 저장·서빙하는 쪽 — 데이터 웨어하우스와 카탈로그 영역으로 넘어간다. 변환된 데이터가 어디에 어떻게 안착하는지를 다룬다.

📖 용어

  • Transient 클러스터 : 작업을 시작할 때 띄우고 끝나면 자동으로 종료하는 일회성 EMR 클러스터.
  • EMRFS : EMR이 S3를 파일 시스템처럼 읽고 쓰게 해 주는 계층. 데이터를 클러스터 밖에 영구 보관하게 해 준다.
  • Core / Task 노드 : Core는 HDFS 저장과 연산을 함께 하고, Task는 연산만 한다. Task는 사라져도 데이터가 남아 스팟에 적합하다.
  • 콜드 스타트 : Lambda가 실행 환경을 새로 만드느라 첫 호출이 느려지는 현상.
  • 상태 전이 : Step Functions에서 한 단계가 끝나 다음 단계로 넘어가는 것. Standard 워크플로의 과금 단위다.
  • DAG : 작업을 노드로, 의존 관계를 화살표로 그린 순환 없는 그래프. 오케스트레이터가 실행 순서를 정하는 기준이다.
  • 컬럼 프루닝 : 열 기반 포맷에서 쿼리에 필요한 컬럼만 골라 읽는 최적화.
  • 파티션 프루닝 : 조건에 맞는 파티션 폴더만 읽고 나머지는 열지 않는 최적화.
  • 컴팩션 : 작은 파일 여러 개를 적정 크기의 큰 파일로 합치는 작업.
  • 멱등성 : 같은 작업을 여러 번 실행해도 결과가 한 번 실행한 것과 같은 성질. 재시도가 안전하려면 필요하다.

📝 연습 문제

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

문제 1

다음 요구를 모두 만족하는 변환 엔진은? "수십 TB를 처리, Hive와 HBase를 함께 사용, 스팟 인스턴스로 비용을 극단적으로 제어, 클러스터를 세밀히 튜닝."

문제 2

"S3 파일 도착 → Glue 변환 → 검증 → 통과 시 Redshift 적재, 실패 시 알림"을 분기·재시도와 함께 서버리스로 조율하려 한다. 가장 적합한 오케스트레이터는?

문제 3

EMR 비용 최적화를 위한 설명 중 옳은 것은?

문제 4

Athena 스캔 비용이 급증했다. 데이터는 단일 Gzip CSV로 저장돼 있고 쿼리는 최근 며칠·특정 컬럼만 본다. 다음 중 비용 절감에 도움이 되지 않는 조치는?

문제 5

다음 중 도구와 대표 용도의 연결이 잘못된 것은?

이전성능·비용 최적화: 파일 포맷·압축·파티셔닝과 작은 파일 문제Week 5 · Day 4다음 S3 데이터 레이크 레이아웃과 파티셔닝 전략Week 6 · Day 1

참고 공식 자료

  • DEA-C01 공식 시험 안내(새 탭에서 열림)
  • Amazon EMR 공식 문서(새 탭에서 열림)
  • AWS Glue 공식 문서(새 탭에서 열림)
  • AWS Step Functions 공식 문서(새 탭에서 열림)
  • AWS Lambda 공식 문서(새 탭에서 열림)
  • Amazon S3 공식 문서(새 탭에서 열림)

이 페이지

  • 한눈에 보는 Week 5 지도
  • 1) 변환 엔진 선택: 규모와 제어의 저울
  • 2) 오케스트레이션: 흐름을 엮는 세 도구
  • 3) 최적화: 읽을 데이터 최소화
  • 통합 의사결정 플로우
  • 한도와 실행 모델 비교: 숫자가 선택을 가르는 지점
  • Step Functions Standard와 Express: ETL에서 갈리는 지점
  • 실패는 누가 다시 시도하는가
  • EMR에서 한 번 더 짚을 것
  • 과금 구조 한 표
  • 시나리오 연습: 오답을 먼저 걸러내기
  • 용어
  • 연습 문제