AWS DEA-C01 문제로 공부하기 — Day 03
IAM 역할 보안, 보안 그룹 트러블슈팅, Neptune 쿼리 언어, DynamoDB 고처리량, Glue 워크플로 병렬 처리까지 — 5문제 핵심 정리.
AWS 보안 모범 사례에서 Lambda·Glue가 RDS에 접근할 때는 IAM 역할 기반 임시 자격증명을 사용해야 합니다. 장기 액세스 키·하드코딩된 자격증명은 보안 위험이 높아 DEA-C01 보안 도메인에서 단골 오답 패턴으로 출제됩니다.
한 회사가 AWS Step Functions를 사용하여 AWS Lambda 함수와 AWS Glue 작업을 오케스트레이션하는 데이터 파이프라인을 운영하고 있습니다. Lambda 함수와 AWS Glue 작업은 여러 Amazon RDS 데이터베이스에 액세스해야 합니다. Lambda 함수와 AWS Glue 작업은 이미 RDS 데이터베이스를 호스팅하는 VPC에 액세스할 수 있습니다. 어떤 솔루션이 이러한 요구 사항을 가장 안전한 방식으로 충족할까요?
-
ARDS 데이터베이스에 접근할 수 있는 권한을 가진 IAM 역할을 생성합니다. Lambda 함수 및 AWS Glue 작업에 대해 RDS 데이터베이스에 접근할 수 있는 권한이 있는 IAM 역할을 수임할 수 있는 권한을 가진 두 번째 IAM 역할을 생성합니다.✅ IAM 역할 수임(Role Assumption) — 직원이 특정 업무용 출입증을 일시 빌리는 것. Lambda·Glue가 자신의 역할로 RDS 접근 역할을 임시로 수임해 단기 자격증명으로 접근. 장기 키 없이 동작하므로 가장 안전.
-
BRDS 데이터베이스에 액세스할 수 있는 권한과 자격 증명을 가진 IAM 역할을 수임할 수 있는 IAM 사용자를 생성합니다. 각 Lambda 함수 및 AWS Glue 작업에 해당 IAM 사용자를 할당합니다.❌ IAM 사용자(IAM User) — 장기 액세스 키를 발급받는 고정 신분증. Lambda·Glue에 IAM 사용자를 "할당"하는 개념 자체가 없고, 장기 키 노출 위험이 있음. IAM 역할을 써야 함.
-
C회사 AWS 계정의 루트 사용자를 사용하여 RDS 데이터베이스에 대한 장기 액세스 키를 생성합니다. Lambda 함수 및 AWS Glue 작업에 액세스 키를 프로그래밍 방식으로 포함합니다. 90일마다 새로운 키를 생성하세요.❌ 루트 사용자(Root User) — AWS 계정의 최고 권한 마스터 키. 루트 키를 코드에 하드코딩하는 것은 AWS 보안의 최악의 패턴. 유출 시 계정 전체 탈취 가능.
-
DLambda 함수와 AWS Glue 작업, 그리고 RDS 데이터베이스 간에 JDBC(Java Database Connectivity) 연결을 생성합니다. 연결 문자열에 필요한 자격 증명을 포함하세요.❌ 연결 문자열에 자격증명 하드코딩 — 소스 코드나 설정 파일에 ID/PW가 평문으로 노출됨. 코드 저장소에 커밋되는 순간 보안 사고. Secrets Manager나 IAM 역할로 대체해야 함.
| 방식 | 비유 | 자격증명 유형 | 보안 수준 |
|---|---|---|---|
| IAM 역할 수임 | 🏷️ 업무용 임시 출입증 | 단기 임시 자격증명 | ✓ 최고 |
| IAM 사용자 액세스 키 | 🔑 장기 고정 열쇠 | 장기 액세스 키 | 중간 |
| 코드 하드코딩 | 📄 평문 메모지 | 노출된 자격증명 | ✗ 위험 |
| 루트 사용자 키 | 💣 마스터 폭발물 | 계정 전체 권한 키 | ✗ 최악 |
Lambda · Glue 자격증명 → IAM 역할 (임시 자격증명, 자동 갱신)
루트 사용자 키 = 무조건 오답
코드 하드코딩 = 무조건 오답
IAM 역할 수임 = AWS 보안 모범 사례AWS 보안 그룹(Security Group)은 인바운드·아웃바운드 트래픽을 제어하는 가상 방화벽입니다. 같은 보안 그룹 내 리소스끼리 통신하려면 보안 그룹 자체를 소스로 지정하는 인바운드 규칙이 필요합니다. DEA-C01 네트워킹 트러블슈팅 유형으로 출제됩니다.
한 회사에 Amazon RDS 인스턴스, AWS Glue 작업, 그리고 Amazon S3 버킷을 사용하는 데이터 파이프라인이 있습니다. RDS 인스턴스와 AWS Glue 작업은 VPC의 프라이빗 서브넷과 동일한 보안 그룹에서 실행됩니다. 사용자가 보안 그룹을 변경하여 AWS Glue 작업이 RDS 인스턴스에 연결되지 않도록 했습니다. 변경 후 보안 그룹에는 특정 IP 주소에서 들어오는 SSH 트래픽을 허용하는 단일 규칙이 포함됩니다. 회사는 연결 문제를 해결해야 합니다. 어떤 솔루션이 이 요구 사항을 충족시킬까요?
-
A모든 UDP 포트에서 모든 TCP 트래픽을 허용하는 인바운드 규칙을 추가합니다. RDS 인스턴스의 개인 IP 주소를 소스로 설정합니다.❌ UDP(User Datagram Protocol) — 비연결형 프로토콜. "UDP 포트에서 TCP 트래픽"은 논리적으로 모순된 표현. RDS(MySQL/PostgreSQL)는 TCP를 사용하며, 소스를 IP로 고정하면 탄력적이지 못함.
-
B모든 TCP 포트에서 모든 TCP 트래픽을 허용하는 인바운드 규칙을 추가합니다. 보안 그룹을 소스로 설정합니다.✅ 보안 그룹을 소스로 설정 — 아파트 동일 세대 열쇠를 소지한 사람만 출입 허용하는 것. Glue와 RDS가 같은 보안 그룹에 속하므로, 보안 그룹 자체를 소스로 지정하면 그룹 내 모든 리소스 간 통신이 허용됨. IP 변경에도 자동 대응.
-
C모든 TCP 포트에서 모든 TCP 트래픽을 허용하는 인바운드 규칙을 추가합니다. RDS 인스턴스의 DNS 이름을 소스로 설정합니다.❌ 보안 그룹 소스에는 IP 주소, CIDR 블록, 보안 그룹 ID만 지정 가능. DNS 이름은 소스로 사용 불가 — AWS 콘솔에서 아예 입력이 안 됨.
-
D기존 SSH 규칙의 소스를 RDS 인스턴스의 개인 IP 주소로 바꿉니다. 인바운드 SSH 규칙과 동일한 소스, 대상 및 프로토콜을 사용하여 아웃바운드 규칙을 만듭니다.❌ SSH(포트 22)를 수정해봤자 RDS 연결(MySQL 3306, PostgreSQL 5432 등)에는 아무 영향 없음. 포트 자체가 다름. 아웃바운드 규칙도 이 문제와 무관.
| 소스 유형 | 예시 | 사용 가능? | 동적 대응 |
|---|---|---|---|
| IP/CIDR | 10.0.1.5/32 | ✓ | IP 바뀌면 수동 수정 |
| 보안 그룹 ID | sg-0abc1234 | ✓ 권장 | 자동 대응 ✓ |
| DNS 이름 | rds.ap-northeast-2... | ✗ 불가 | - |
| UDP에서 TCP | 모순된 표현 | ✗ 불가 | - |
같은 보안 그룹 내 리소스 간 통신 → 보안 그룹 ID를 소스로 지정
소스에 DNS 이름 = 불가 (오답 패턴)
UDP에서 TCP = 논리 모순 (오답 패턴)Amazon Neptune은 AWS의 완전 관리형 그래프 데이터베이스입니다. Gremlin(Property Graph)과 SPARQL(RDF Graph) 두 가지 쿼리 언어를 지원하며, SQL 계열은 지원하지 않습니다. DEA-C01에서 Neptune 쿼리 언어 식별 문제로 출제됩니다.
데이터 엔지니어는 Amazon Neptune을 사용하여 그래프 애플리케이션을 개발해야 합니다. 엔지니어는 그래프 애플리케이션을 개발하기 위해 어떤 프로그래밍 언어를 사용해야 합니까?
-
A스파클(SPARQL)✅ SPARQL(스파클 — SPARQL Protocol and RDF Query Language) — RDF(Resource Description Framework) 그래프용 쿼리 언어. 웹의 링크드 데이터를 표현하는 트리플(주어-서술어-목적어) 구조를 쿼리. Neptune의 RDF 엔진이 지원.
-
B그렘린✅ Gremlin(그렘린) — Apache TinkerPop 프레임워크의 그래프 순회(Traversal) 언어. SNS 친구 추천·사기 탐지처럼 노드와 엣지로 연결된 Property Graph를 탐색. Neptune의 Property Graph 엔진이 지원.
-
CSQL❌ SQL(Structured Query Language) — 관계형 DB(테이블) 전용 쿼리 언어. Neptune은 그래프 DB라 SQL을 지원하지 않음. RDS·Redshift·Aurora 등에서 사용.
-
DANSI SQL❌ ANSI SQL — 미국 표준 협회(ANSI)가 정의한 표준 SQL. SQL의 한 종류로 Neptune에서 지원하지 않음.
-
E스파크 SQL❌ Spark SQL — Apache Spark의 대용량 분산 데이터 처리용 SQL 엔진. EMR·Glue에서 사용. Neptune과 무관.
| 모델 | 쿼리 언어 | 비유 | 사용 사례 |
|---|---|---|---|
| Property Graph | Gremlin | 🕸️ 친구 관계 지도 | SNS, 추천, 사기 탐지 |
| RDF Graph | SPARQL | 🔗 웹 링크드 데이터 | 지식 그래프, 온톨로지 |
| 관계형 DB | SQL / ANSI SQL | 📊 엑셀 테이블 | RDS, Redshift, Aurora |
| 분산 처리 | Spark SQL | ⚡ 대용량 병렬 처리 | EMR, Glue |
Amazon Neptune → Gremlin + SPARQL
Gremlin = Property Graph (노드·엣지 탐색)
SPARQL = RDF Graph (트리플 구조)
SQL 계열 = Neptune에서 지원 안 함Amazon DynamoDB는 초당 수만 건 이상의 읽기·쓰기를 밀리초 이내에 처리하는 완전 관리형 NoSQL 데이터베이스입니다. DynamoDB API를 통한 직접 접근을 지원해 애플리케이션 통합이 쉬우며, DEA-C01에서 고처리량 + API 접근 조합으로 자주 출제됩니다.
데이터 엔지니어가 지속적인 데이터 수집이 필요한 애플리케이션의 로그 테이블을 설계하고 있습니다. 이 애플리케이션은 다른 애플리케이션의 특정 레코드에 대한 안정적인 API 기반 액세스를 제공해야 합니다. 또한, 매초 4,000건 이상의 동시 쓰기 작업과 6,500건 이상의 읽기 작업을 처리해야 합니다.
-
A애플리케이션의 용량 요구 사항을 충족할 수 있도록 프로비저닝된 용량을 가진 Amazon DynamoDB 테이블을 생성합니다. DynamoDB 테이블을 사용하여 DynamoDB API를 통해 모든 읽기 및 쓰기 작업을 수행합니다.✅ Amazon DynamoDB — 완전 관리형 키-값·문서 NoSQL DB. 초당 수만 건 읽기·쓰기를 한 자릿수 밀리초로 처리. 프로비저닝된 용량(Provisioned Capacity)으로 필요한 RCU(읽기)/WCU(쓰기) 단위 예약 → 4,000 쓰기 + 6,500 읽기 안정적으로 보장. DynamoDB API로 직접 접근.
-
BAmazon S3 Standard 버킷에 로그 파일을 저장합니다. AWS Glue Data Catalog에 스키마를 등록합니다. AWS Glue 스키마를 가리키는 외부 Redshift 테이블을 생성합니다. 이 테이블을 사용하여 Amazon Redshift Spectrum 읽기 작업을 수행합니다.❌ Redshift Spectrum — S3의 데이터를 Redshift에서 외부 테이블로 쿼리하는 기능. 분석용 배치 쿼리에 적합하지 초당 수천 건의 실시간 쓰기/읽기에는 부적합. 레이어가 너무 복잡하고 지연도 높음.
-
CKEY 분포 스타일을 사용하여 Amazon Redshift 테이블을 생성합니다. Amazon Redshift Data API를 사용하여 모든 읽기 및 쓰기 작업을 수행합니다.❌ Amazon Redshift — 열 기반 데이터 웨어하우스. 대용량 분석 쿼리에 최적화되어 있고 초당 수천 건의 개별 행 쓰기에는 적합하지 않음. Redshift Data API도 비동기 방식으로 실시간 고빈도 쓰기에 부적합.
-
DEVEN 분포 스타일을 사용하여 Amazon Redshift 테이블을 생성합니다. Amazon Redshift JDBC 커넥터를 사용하여 데이터베이스 연결을 설정합니다. 이 데이터베이스 연결을 사용하여 모든 읽기 및 쓰기 작업을 수행합니다.❌ Redshift + JDBC는 C와 같은 이유로 부적합. 추가로 JDBC 영구 연결 관리 오버헤드까지 발생. 초당 수천 건 동시 트랜잭션에 Redshift는 설계상 적합하지 않음.
| 서비스 | 초당 처리량 | API 접근 | 적합 워크로드 |
|---|---|---|---|
| DynamoDB | 수만 건/초 ✓ | DynamoDB API ✓ | 실시간 고빈도 읽기·쓰기 |
| Redshift | 수백 건/초 | Data API(비동기) | 대용량 분석 쿼리 |
| RDS/Aurora | 수천 건/초 | JDBC/ODBC | OLTP 트랜잭션 |
| S3+Spectrum | 배치만 가능 | 없음 | 데이터 레이크 분석 |
"초당 수천 건 읽기·쓰기 + API 접근" → DynamoDB
DynamoDB = 실시간 고처리량, 밀리초 응답, API 직접 접근
Redshift = 대용량 분석 쿼리, 고빈도 개별 쓰기에는 부적합AWS Glue 워크플로(Workflow)는 여러 Glue 작업을 병렬 또는 순차로 실행하고 의존성을 관리합니다. 15GiB 메모리 같은 대용량 처리는 Glue 작업(G.2X 이상 워커)이 지원하며, Lambda의 최대 10GB 메모리 제한보다 유연합니다.
한 회사가 매일 500GB의 시청자 및 광고 데이터를 처리하고, AWS Glue 데이터 카탈로그에 스키마가 등록된 CSV 파일을 Amazon S3에 저장합니다. 이 파일을 Apache Parquet 형식으로 변환하여 S3 버킷에 저장해야 합니다. 이 솔루션에는 데이터를 동시에 처리하기 위한 15GiB 메모리 용량의 장기 실행 워크플로가 필요하며, 그 뒤에는 처음 두 프로세스가 완료된 후에만 시작되는 상관 관계 프로세스가 필요합니다.
-
AAWS Step Functions를 사용하여 여러 AWS Lambda 함수를 사용하는 워크플로를 조정합니다. 처음 두 프로세스가 완료된 후 세 번째 프로세스가 시작되도록 합니다.❌ AWS Lambda — 최대 실행 시간 15분, 최대 메모리 10GB. 15GiB(=15,360MB) 메모리 요건을 Lambda는 충족 불가. 500GB 대용량 장기 처리에도 부적합.
-
BAmazon EMR을 사용하여 워크플로의 각 프로세스를 실행합니다. 처음 두 프로세스의 완료를 나타내는 메시지를 처리할 Amazon Simple Queue Service(Amazon SQS) 대기열을 생성합니다. 세 번째 프로세스를 실행하여 SQS 대기열을 처리하도록 AWS Lambda 함수를 구성합니다.❌ EMR + SQS + Lambda 조합은 기술적으로 가능하지만 구성이 복잡하고 비용도 높음. 세 번째 프로세스도 Lambda라면 메모리 제한 문제 재발. Glue 워크플로로 더 단순하게 해결 가능.
-
CAWS Glue 워크플로를 사용하여 처음 두 프로세스를 병렬로 실행합니다. 세 번째 프로세스는 처음 두 프로세스가 완료된 후에 시작되도록 합니다.✅ AWS Glue 워크플로(Workflow) — 공장 라인에서 두 작업반이 동시에 일하고, 둘 다 끝나면 검수반이 시작하는 구조. Glue 작업은 G.2X 워커(16GiB 메모리)로 15GiB 요건 충족. 병렬 실행 + 완료 후 순차 트리거 모두 워크플로 내장 기능으로 처리. 추가 서비스 불필요.
-
DAWS Glue를 사용하여 워크플로를 조정하려면 Amazon Managed Workflows for Apache Airflow(Amazon MWAA)를 사용하세요. 처음 두 프로세스가 완료된 후 세 번째 프로세스를 시작하도록 AWS Glue를 구성하세요.❌ Amazon MWAA — 완전 관리형 Airflow. 강력하지만 시간당 환경 비용이 발생하고 Glue 워크플로만으로 가능한 것에 과도한 레이어 추가. 비용 효율적이지 않음.
| 워커 유형 | 메모리 | vCPU | 적합 워크로드 |
|---|---|---|---|
| G.025X | 4GiB | 2 | 소형 ETL |
| G.1X | 8GiB | 4 | 중형 ETL |
| G.2X | 16GiB ✓ | 8 | 대형 ETL, 15GiB 요건 충족 |
| G.4X | 32GiB | 16 | 초대형 ETL |
| Lambda | 최대 10GB | - | 15GiB 요건 불충족 ✗ |
"병렬 실행 → 완료 후 순차 실행" → Glue Workflow
"15GiB 메모리 필요" → G.2X 워커 (16GiB)
Lambda 최대 메모리 = 10GB → 15GiB 요건이면 Lambda는 오답!