Amazon DEA-C01: 데이터 인제스천 및 수집 — 학습 가이드
다음의 일부입니다: Amazon Data Engineer Associate DEA-C01 — 학습 가이드. 검증된 답안으로 연습하기: Amazon 시험 허브, 또는 다음에서 시간 제한 모의고사 풀기: ExamRoll.io.
이 도메인은 원본 데이터를 데이터 플랫폼으로 안정적이고 확장 가능하게 가져오는 데 사용되는 패턴, AWS 서비스 및 운영 세부 정보를 다룹니다. 데이터 엔지니어는 배치 및 스트리밍 진입점 중에서 선택하고, 데이터 카탈로그 생성 및 검색 가능성을 보장하며, 처리량, 재처리 가능성 및 장애 모드를 고려하여 설계해야 합니다. 주요 AWS 구성 요소는 배치를 위한 S3 및 Glue, 스트리밍을 위한 Kinesis 및 Firehose, 데이터베이스 마이그레이션 및 CDC를 위한 DMS, 그리고 애드혹 및 푸시 기반 수집을 위한 API/이벤트 기반 구성 요소(API Gateway, Lambda, SNS, SQS, S3 이벤트)입니다.
AWS Glue 및 S3를 사용한 배치 수집
Glue는 S3 및 데이터 카탈로그로의 배치 수집을 위한 기본 관리형 ETL 및 메타데이터 솔루션입니다. 일반적인 패턴: 원본 파일을 S3(별도의 raw/zone 접두사 사용)에 저장하고, Glue 크롤러를 실행하여 스키마를 추론하고 Glue 데이터 카탈로그를 채운 다음, Glue ETL 작업(Spark)을 실행하여 변환, 파티셔닝, 컬럼 형식(Parquet/ORC)으로 변환하고 최적화된 데이터를 다시 S3에 씁니다. 크롤러에 적절한 분류기(기본 제공 CSV/JSON/Parquet 또는 사용자 지정 grok/regex)를 구성하고, 크롤러에 s3:GetObject/s3:ListBucket 및 glue:catalog 권한이 있는 IAM 역할을 부여해야 합니다. 이러한 권한이 없는 것은 일반적인 운영상의 오류입니다.
Glue 작업 및 크롤러를 구성할 때 다음 콘솔/CLI 패턴과 토글을 사용하십시오:
- 크롤러 생성: aws glue create-crawler –name my-crawler –role GlueRole –database-name raw_db –targets ‘{“S3Targets”:[{“Path”:“s3://bucket/raw/”}]}’ 그리고 aws glue start-crawler –name my-crawler로 시작합니다.
- Glue 작업: aws glue create-job –name etl-job –role GlueRole –command ‘{“Name”:“glueetl”,“ScriptLocation”:“s3://bucket/scripts/job.py”}’; 재처리를 방지하기 위해 작업 북마크를 활성화합니다. Glue와 대안 기술 선택 기준:
- 관리형 Spark ETL, 스키마 검색, Athena/Redshift Spectrum과의 카탈로그 통합을 원할 때 Glue를 사용합니다.
- 특화된 클러스터 튜닝, 사용자 지정 라이브러리 또는 장기 실행 클러스터가 필요할 때 EMR을 사용합니다.
- 작은 파일에 대한 경량 변환에는 간단한 Lambda 또는 Glue 온디맨드를 사용합니다.
Kinesis Data Streams 및 Firehose를 사용한 스트리밍 수집
Kinesis Data Streams (KDS)는 재처리, 소비자 제어, 세분화된 확장이 가능한 실시간 수집을 위한 서비스입니다. Kinesis 샤드는 초당 1MB 또는 초당 1,000개 레코드의 쓰기 용량과 초당 2MB의 읽기 용량을 제공합니다. aws kinesis create-stream –stream-name my-stream –shard-count 4를 사용하고 aws kinesis put-record –stream-name my-stream –partition-key key –data fileb://payload로 데이터를 넣습니다. 파티션 키는 샤드 할당을 결정합니다. 파티션 키 카디널리티가 낮으면 핫 샤드가 발생하므로, 키 엔트로피를 높이거나 해시 값을 접미사로 붙여 이를 방지해야 합니다. aws kinesis update-shard-count를 사용하여 샤드를 확장하거나 On-Demand 모드를 활성화하여 자동 확장을 할 수 있습니다.
Firehose는 내장된 버퍼링, 압축 및 선택적 Lambda 변환 기능을 통해 거의 실시간으로 데이터를 전송(S3, Redshift, OpenSearch, Splunk)하는 데 최적화된 전송 스트림 서비스입니다. BufferingHints의 buffer_size(MB) 및 buffer_interval(초)로 버퍼링을 구성하여 전송 지연 시간과 비용을 조정하고, 압축(GZIP, Snappy)을 활성화하며, 레코드 수준 변환을 위해 처리 Lambda를 설정합니다. 주요 차이점:
- Kinesis Data Streams:
- 실시간, 다중 소비자 지원, 보존된 데이터 재처리, 명시적인 샤드 관리
- 샤드당 처리량(1MB/1k 쓰기), 파티션 키 설계 필요
- Kinesis Data Firehose:
- 목적지로의 관리형 전송, 자동 재시도/백오프, 전송된 레코드 재처리 불가
- 버퍼링(크기/시간), 압축, Lambda를 통한 변환, Redshift 로드를 위한 S3 스테이징 지원
재처리, 강력한 소비자 제어 또는 여러 다운스트림 소비자가 필요할 때는 KDS를 선택하고, 최소한의 운영 오버헤드로 S3/Redshift/OpenSearch로 간단하게 전송 및 변환해야 할 때는 Firehose를 선택합니다.
DMS를 사용한 데이터베이스 마이그레이션 및 CDC
AWS DMS는 동종/이종 마이그레이션 및 지속적인 복제(CDC)에 사용됩니다. 처리량에 맞게 크기가 조정된 복제 인스턴스(aws dms create-replication-instance –replication-instance-class dms.r5.large –allocated-storage 100)를 배포하며, 사이징은 변경률, 전체 로드 볼륨 및 작업 병렬 처리에 따라 결정됩니다. DMS 작업 유형:
- full-load: 기존 데이터만 복사
- cdc: 진행 중인 변경 사항을 스트리밍
- full-load + cdc: 초기 로드 후 변경 사항 스트리밍 계속 적절한 엔진 설정(JDBC/연결 문자열)으로 엔드포인트를 구성하고, 소스에서 보조 로깅 또는 플러그인을 활성화하며, 테이블을 필터링/포함하기 위한 JSON 테이블 매핑을 제공합니다. MySQL 기반 소스의 경우 DMS CDC는 소스에서 바이너리 로깅(binlog)이 활성화되고 적절한 binlog_format(ROW 권장)이 설정되어야 합니다. PostgreSQL의 경우 논리적 복제를 활성화하고 wal2json과 같은 플러그인을 사용하거나 복제 슬롯을 사용해야 합니다. CloudWatch 지표 및 작업 로그를 통해 작업을 모니터링하고, 처리량을 위해 batchApplyEnabled 및 maxFullLoadSubTasks를 조정합니다.
전체 로드와 CDC 간의 결정 기준: 다운타임을 최소화하는 마이그레이션이 필요할 때 full-load+CDC를 사용하고, 다른 메커니즘으로 초기 로드가 완료된 후 지속적인 복제를 위해서는 CDC 전용을 사용합니다. 항상 스키마 매핑을 검증하고 대표적인 데이터 볼륨으로 테스트 마이그레이션을 실행해야 합니다.
API 기반 및 이벤트 기반 수집 패턴
API와 이벤트는 푸시(push) 기반 수집 및 오케스트레이션에 사용됩니다. 일반적인 패턴은 다음과 같습니다:
- API Gateway -> Lambda -> Firehose/Kinesis: 클라이언트가 JSON 이벤트를 푸시할 때 적합합니다. API Gateway의 쓰로틀링과 Lambda의 동시성 제어를 사용하여 역압력(backpressure)을 제공하고 멱등성 헤더를 강제합니다.
- S3 이벤트 알림: 콘솔 또는 aws s3api put-bucket-notification-configuration을 통해 버킷 알림을 구성하여 객체 생성 이벤트를 Lambda, SQS 또는 SNS로 보냅니다. 접두사/접미사 필터를 사용하여 트리거를 제한합니다. 팬아웃(fan-out)을 위해서는 S3 -> SNS 주제 -> 다수의 SQS 대기열/Lambda 구독자로 라우팅하여 결합 없이 여러 소비자에게 동일한 이벤트를 전달합니다.
- 내구성 있고 분리된 수집을 위한 SQS 및 SNS: SQS는 가시성 제한 시간(visibility timeout)을 이용한 풀(pull) 기반 워커 처리에, SNS는 푸시(push) 기반 팬아웃에 사용됩니다.
운영 고려 사항 및 CLI 패턴:
- Lambda/SQS 실패에 대비해 DLQ를 사용하고, SNS 구독에는 재시도 정책을 구성합니다.
- API로부터의 높은 처리량 스트리밍의 경우, API 클라이언트 차단을 피하기 위해 동기식 다운스트림 쓰기보다 Kinesis 또는 Firehose로 일괄 처리(batching)하는 것을 선호합니다.
일반적인 함정과 결정 기준
- Kinesis Data Streams(재생 가능, 샤드 관리형)와 Firehose(관리형 전송, 재생 불가)를 혼동하는 경우: 재생 기능이나 다수의 소비자가 필요할 때는 KDS를, 간단한 전송 파이프라인에는 Firehose를 선택합니다.
- Glue 크롤러의 IAM 권한을 잊는 경우: 크롤러가 데이터 카탈로그를 채울 수 있도록 항상 s3:GetObject/s3:ListBucket 및 glue:CreateTable/UpdateTable/DeleteTable 권한을 부여하는 IAM 역할을 연결해야 합니다.
- DMS CDC를 위한 바이너리 로깅/논리적 복제가 누락된 경우: CDC 작업을 시작하기 전에 MySQL에서 binlog(ROW 형식)를 활성화하거나 PostgreSQL에서 논리적 복제 및 wal2json을 활성화해야 합니다.
- 낮은 파티션 키 카디널리티로 인한 핫 샤드 발생: 해싱을 통해 파티션 키 카디널리티를 높이거나, 고유값이 많은 속성을 포함하거나, 샤드 수를 늘립니다. Put/Get 쓰로틀링 지표를 모니터링합니다.
- Firehose의 과도한 버퍼링 또는 잘못된 버퍼링 구성으로 인한 높은 지연 시간 발생: 허용 가능한 지연 시간과 요청량에 따라 buffer_size 및 buffer_interval을 조정합니다.
- DLQ나 재시도 없이 S3 이벤트 알림에만 의존하는 경우: 누락되는 이벤트를 방지하고 내구성 있는 팬아웃을 보장하기 위해 SNS/SQS 팬아웃 또는 DLQ가 있는 Lambda를 사용합니다.
실용적인 문제: 사용 사례 시나리오
RetailCo는 대용량 실시간 모바일 클릭스트림과 야간 상품 카탈로그 파일을 수집하며, 실시간 대시보드와 통합 분석 레이크가 필요합니다.
- 사용자 세션 + 해시된 샤드 접미사에서 파생된 파티션 키를 사용하여 클릭스트림을 Kinesis Data Streams로 수집합니다. 실시간 처리를 위해 Kinesis Data Analytics 또는 Lambda/Kinesis Client Library를 사용하여 소비자를 생성합니다.
- 변환 Lambda와 함께 Kinesis Data Firehose를 사용하여 보강된 스트리밍 출력을 S3(Parquet 형식)에 저장하고, Snappy로 압축하며, 선택적으로 분석을 위해 Redshift Spectrum에 로드합니다.
- 야간 카탈로그 파일을 S3의 raw/ 경로에 배치하고 예약된 Glue 크롤러를 실행하여 Glue 데이터 카탈로그를 업데이트한 다음, Glue ETL 작업을 실행하여 정제된 영역(curated zone)에서 파티션된 Parquet으로 변환합니다.
- S3 이벤트 알림 -> SNS -> Lambda를 사용하여 경량 메타데이터 업데이트를 트리거하거나 캐시를 무효화합니다. 내구성 있는 다운스트림 처리를 위해 SQS로 전송을 라우팅합니다.
- Kinesis 샤드 지표(IncomingBytes, IncomingRecords, PutRecords.Success)를 모니터링하고, UpdateShardCount 또는 온디맨드(On-Demand) 스트림을 사용하여 증가하는 트래픽을 처리합니다. CloudWatch 경보를 활성화합니다.
AWS 모범 사례의 근거: 실시간 경로와 배치 경로를 분리하고, 재생 기능과 소비자 격리가 필요할 때는 Kinesis Data Streams를 사용하며, S3/대상으로의 관리형 전송에는 Firehose를 사용합니다. 또한 Athena/Redshift와의 검색 및 쿼리 통합을 위해 Glue 데이터 카탈로그를 유지 관리합니다.
이 문제 연습하기 → · ExamRoll.io에서 시간 제한 연습 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
시험 합격하기 →