데이터 파이프라인도 결국 코드입니다. 데이터를 수집하는 Lambda 함수, 변환하는 Glue 작업, 저장하는 S3 버킷까지 — 모든 것이 코드로 정의되고 관리되어야 합니다. 개발자가 애플리케이션 코드를 버전 관리하고 자동으로 배포하듯이, 데이터 엔지니어도 인프라와 파이프라인을 코드로 관리합니다. 이를 가능하게 하는 것이 IaC(Infrastructure as Code)와 CI/CD 파이프라인입니다. AWS DEA-C01 시험에서는 이 도구들의 특징과 올바른 사용 시나리오를 묻습니다.
IaC 도구 비교 — 인프라를 코드로 정의하는 방법들
IaC는 "인프라를 코드로 정의하여 자동으로 생성·관리·삭제"하는 개념입니다. 수동으로 AWS 콘솔에서 S3 버킷을 만들고, RDS를 설정하고, Lambda를 배포하는 대신, 코드 파일 하나로 모든 것을 한 번에 구성합니다.
| 도구 | 언어 | 특징 | |------|------|------| | AWS CloudFormation | YAML 또는 JSON | AWS 독자 IaC. 선언적 템플릿. 모든 AWS 리소스 지원 | | AWS CDK | Python, TypeScript, Java 등 | 프로그래밍 언어로 인프라 정의. 내부적으로 CloudFormation으로 컴파일 | | AWS SAM | YAML (CloudFormation 확장) | 서버리스 애플리케이션 특화. Lambda, API Gateway, DynamoDB를 간편하게 정의 |
CloudFormation — 선언적 템플릿
"원하는 최종 상태를 선언하면 AWS가 만들어준다"는 방식입니다. 건축 도면처럼, CloudFormation 템플릿은 "이런 인프라를 만들어줘"라고 명시하면, AWS가 필요한 리소스를 자동으로 생성합니다.
스택(Stack)이 CloudFormation의 핵심 단위입니다. 관련된 AWS 리소스들을 하나의 스택으로 묶어 함께 생성·업데이트·삭제할 수 있습니다.
AWS CDK — 프로그래밍 언어로 인프라 정의
CDK는 Python이나 TypeScript 같은 프로그래밍 언어로 인프라를 정의합니다. YAML보다 훨씬 유연합니다. 반복문, 조건문, 함수, 클래스 등 프로그래밍의 모든 기능을 활용해 인프라를 동적으로 정의할 수 있습니다.
예를 들어, 10개 리전에 동일한 S3 버킷을 만들어야 한다면 CloudFormation에서는 10개의 템플릿이 필요하지만, CDK에서는 반복문 하나로 해결됩니다. CDK 코드는 최종적으로 CloudFormation 템플릿으로 변환(합성, Synthesize)되어 배포됩니다.
AWS SAM — 서버리스 특화 IaC
SAM(Serverless Application Model)은 CloudFormation의 확장입니다. Lambda, API Gateway, DynamoDB 같은 서버리스 리소스를 훨씬 간결하게 정의합니다. SAM CLI를 통해 로컬 테스트와 배포도 지원합니다.
Lambda — 데이터 엔지니어 관점에서 이해하기
AWS Lambda는 서버 없이 코드를 실행하는 서비스입니다. 이벤트가 발생할 때만 코드가 실행되고, 실행 시간만큼만 비용을 냅니다. 데이터 엔지니어링에서 Lambda는 파이프라인의 "작은 자동화 부품" 역할을 합니다.
알아야 할 Lambda의 주요 제약사항
동시성(Concurrency): 동시에 실행 중인 Lambda 인스턴스 수입니다. 계정당 기본 1,000개 제한이 있습니다.
예약된 동시성(Reserved Concurrency): 특정 Lambda에 동시성을 예약합니다. 다른 Lambda가 전체 한도를 다 쓰는 것을 방지합니다. 프로비저닝된 동시성(Provisioned Concurrency): 미리 인스턴스를 준비해두어 콜드 스타트(처음 실행 시 지연)를 제거합니다.
실행 시간 제한(Timeout): 최대 15분입니다. 이 제한을 초과하는 ETL 작업은 Glue ETL이나 EMR로 전환해야 합니다. 데이터 엔지니어링에서 Lambda는 짧고 빠른 작업에 적합합니다.
메모리(Memory): 128MB ~ 10GB까지 설정 가능합니다. Lambda에서 메모리를 늘리면 CPU 성능도 비례해서 증가합니다. 데이터 처리가 느리다면 메모리를 늘려보는 것이 첫 번째 최적화 방법입니다.
EFS 마운트: Lambda는 Amazon EFS(Elastic File System)를 마운트하여 대용량 파일에 접근할 수 있습니다. Lambda의 임시 스토리지(/tmp)는 최대 10GB이지만, 여러 함수가 공유하는 파일이나 더 큰 데이터는 EFS를 사용합니다.
런타임: Python이 데이터 엔지니어링 Lambda에서 가장 널리 사용됩니다. pandas, numpy, boto3 같은 라이브러리를 Lambda 레이어로 추가할 수 있습니다.
CI/CD 파이프라인 — 데이터 파이프라인도 자동으로 배포
CI/CD(Continuous Integration/Continuous Delivery)는 코드 변경이 자동으로 테스트되고 배포되는 체계입니다. 데이터 파이프라인도 코드이므로, 소프트웨어 개발과 동일한 CI/CD 원칙을 적용합니다.
전형적인 AWS CI/CD 파이프라인 흐름:
CodeCommit: AWS 관리형 Git 저장소. GitHub과 유사. CodeBuild: 빌드·테스트 자동화. 컨테이너 기반으로 실행. CodeDeploy: 애플리케이션 코드 배포 자동화. EC2, Lambda, ECS 지원. CodePipeline: 위 단계들을 하나의 파이프라인으로 연결.
데이터 파이프라인 CI/CD 시 고려사항: Glue ETL 스크립트 변경 → 자동 테스트 → S3에 배포 CloudFormation/CDK 템플릿 변경 → 스택 업데이트 자동화 Lambda 코드 변경 → 자동 배포 + Blue/Green 배포로 롤백 가능
분산 컴퓨팅 핵심 개념
Spark, EMR 같은 분산 처리 시스템을 이해하려면 몇 가지 기본 개념을 알아야 합니다. 이 개념들은 DEA-C01 시험에서 성능 문제와 설계 질문에 자주 등장합니다.
셔플링(Shuffling)
여러 노드에 흩어진 데이터를 재분배하는 과정입니다. 예를 들어 "국가별로 GROUP BY"를 하려면, 같은 국가의 데이터가 같은 노드에 모여야 합니다. 이 재분배 과정이 셔플링입니다.
셔플링은 네트워크를 통해 데이터가 이동하므로 비용이 큽니다. Spark 성능 문제의 주요 원인 중 하나입니다. 셔플링을 줄이는 것이 Spark 최적화의 핵심입니다.
파티셔닝(Partitioning)
데이터를 논리적 단위로 나누어 병렬 처리하는 것입니다. 1억 개의 레코드를 100개의 파티션으로 나누면, 100개의 코어가 동시에 각 파티션을 처리할 수 있습니다. 파티션 수가 너무 적으면 병렬성이 낮고, 너무 많으면 오버헤드가 증가합니다.
데이터 스큐(Data Skew)
특정 파티션에 데이터가 극단적으로 몰리는 현상입니다. 예를 들어 100개의 파티션이 있는데, 한 파티션에 전체 데이터의 80%가 몰려 있다면, 그 파티션을 처리하는 노드가 나머지 99개 노드가 끝날 때까지 기다려야 합니다. 전체 작업이 가장 느린 파티션의 속도로 제한됩니다.
스큐 해결 방법: 파티션 키를 더 고르게 분포하는 컬럼으로 변경 스큐된 파티션을 인위적으로 더 작게 나누기 (salting)
직렬화(Serialization)
노드 간에 데이터를 전송하려면 메모리의 객체를 바이트 스트림으로 변환(직렬화)하고, 받는 쪽에서 다시 객체로 복원(역직렬화)해야 합니다. Kryo 직렬화는 Java 기본 직렬화보다 빠르고 압축률이 높아 Spark에서 권장됩니다.
시험 핵심 정리
| 키워드 | 선택 도구/개념 | |--------|--------------| | YAML/JSON 선언적 인프라 정의 | AWS CloudFormation | | 프로그래밍 언어(Python/TypeScript)로 인프라 정의 | AWS CDK | | 서버리스 특화 IaC (Lambda, API Gateway) | AWS SAM | | Lambda에서 대용량 공유 파일 접근 | EFS 마운트 | | Lambda 작업이 15분을 초과 | Glue ETL 또는 EMR로 전환 | | Lambda 콜드 스타트 제거 | 프로비저닝된 동시성 | | 코드 변경 자동 빌드·배포 | CodePipeline (CodeBuild + CodeDeploy) | | 노드 간 데이터 재분배 (Spark 비용 큰 작업) | 셔플링 | | 특정 파티션에 데이터 편중 | 데이터 스큐 | | 파티션 불균형 해결 | 파티션 키 변경 또는 Salting |
CDK는 CloudFormation을 대체하는 것이 아니라 CloudFormation 위에 구축된 추상화 레이어입니다. CDK 코드는 항상 CloudFormation 템플릿으로 컴파일됩니다.